summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WHATSNEW.txt102
-rw-r--r--docs/NT4-Locking.reg7
-rw-r--r--docs/README.pam_smbpass3
-rw-r--r--docs/Samba-HOWTO-Collection.pdf4450
-rw-r--r--docs/docbook/Makefile.in198
-rwxr-xr-xdocs/docbook/configure15
-rw-r--r--docs/docbook/configure.in2
-rw-r--r--docs/docbook/faq/samba-pdc-faq.sgml110
-rw-r--r--docs/docbook/howto/samba-pdc-howto.sgml67
-rw-r--r--docs/docbook/manpages/make_smbcodepage.1.sgml8
-rw-r--r--docs/docbook/manpages/make_unicodemap.1.sgml172
-rw-r--r--docs/docbook/manpages/nmbd.8.sgml6
-rw-r--r--docs/docbook/manpages/nmblookup.1.sgml4
-rw-r--r--docs/docbook/manpages/rpcclient.1.sgml39
-rw-r--r--docs/docbook/manpages/smb.conf.5.sgml934
-rw-r--r--docs/docbook/manpages/smbcacls.1.sgml12
-rw-r--r--docs/docbook/manpages/smbclient.1.sgml94
-rw-r--r--docs/docbook/manpages/smbcontrol.1.sgml2
-rw-r--r--docs/docbook/manpages/smbd.8.sgml42
-rw-r--r--docs/docbook/manpages/smbmnt.8.sgml4
-rw-r--r--docs/docbook/manpages/smbmount.8.sgml29
-rw-r--r--docs/docbook/manpages/smbpasswd.5.sgml14
-rw-r--r--docs/docbook/manpages/smbpasswd.8.sgml14
-rw-r--r--docs/docbook/manpages/smbsh.1.sgml2
-rw-r--r--docs/docbook/manpages/smbspool.8.sgml10
-rw-r--r--docs/docbook/manpages/smbstatus.1.sgml2
-rw-r--r--docs/docbook/manpages/smbumount.8.sgml2
-rw-r--r--docs/docbook/manpages/swat.8.sgml18
-rw-r--r--docs/docbook/manpages/testparm.1.sgml6
-rw-r--r--docs/docbook/manpages/wbinfo.1.sgml2
-rw-r--r--docs/docbook/manpages/winbindd.8.sgml26
-rw-r--r--docs/docbook/projdoc/CVS-Access.sgml157
-rw-r--r--docs/docbook/projdoc/ENCRYPTION.sgml4
-rw-r--r--docs/docbook/projdoc/Integrating-with-Windows.sgml935
-rw-r--r--docs/docbook/projdoc/NT_Security.sgml20
-rw-r--r--docs/docbook/projdoc/OS2-Client-HOWTO.sgml2
-rw-r--r--docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml212
-rw-r--r--docs/docbook/projdoc/Samba-PDC-HOWTO.sgml1540
-rw-r--r--docs/docbook/projdoc/UNIX_INSTALL.sgml16
-rw-r--r--docs/docbook/projdoc/printer_driver2.sgml787
-rw-r--r--docs/docbook/projdoc/samba-doc.sgml26
-rw-r--r--docs/docbook/projdoc/winbind.sgml26
-rw-r--r--docs/docbook/scripts/README.ldp_print60
-rw-r--r--docs/docbook/scripts/fix_print_html.lib172
-rwxr-xr-xdocs/docbook/scripts/ldp_print71
-rw-r--r--docs/docbook/scripts/strip-links.pl3
-rw-r--r--docs/docbook/stylesheets/ldp.dsl.in256
-rw-r--r--docs/htmldocs/CVS-Access.html193
-rw-r--r--docs/htmldocs/ENCRYPTION.html4
-rw-r--r--docs/htmldocs/Integrating-with-Windows.html1072
-rw-r--r--docs/htmldocs/NT_Security.html22
-rw-r--r--docs/htmldocs/OS2-Client-HOWTO.html2
-rw-r--r--docs/htmldocs/PAM-Authentication-And-Samba.html309
-rw-r--r--docs/htmldocs/Samba-HOWTO-Collection.html7005
-rw-r--r--docs/htmldocs/Samba-PDC-HOWTO.html1643
-rw-r--r--docs/htmldocs/UNIX_INSTALL.html16
-rw-r--r--docs/htmldocs/findsmb.1.html9
-rw-r--r--docs/htmldocs/lmhosts.5.html14
-rw-r--r--docs/htmldocs/make_smbcodepage.1.html16
-rw-r--r--docs/htmldocs/make_unicodemap.1.html276
-rw-r--r--docs/htmldocs/nmbd.8.html49
-rw-r--r--docs/htmldocs/nmblookup.1.html28
-rw-r--r--docs/htmldocs/printer_driver2.html677
-rw-r--r--docs/htmldocs/rpcclient.1.html155
-rw-r--r--docs/htmldocs/samba-pdc-faq.html122
-rw-r--r--docs/htmldocs/smb.conf.5.html3195
-rw-r--r--docs/htmldocs/smbcacls.1.html93
-rw-r--r--docs/htmldocs/smbclient.1.html367
-rw-r--r--docs/htmldocs/smbcontrol.1.html2
-rw-r--r--docs/htmldocs/smbd.8.html179
-rw-r--r--docs/htmldocs/smbmnt.8.html6
-rw-r--r--docs/htmldocs/smbmount.8.html104
-rw-r--r--docs/htmldocs/smbpasswd.5.html64
-rw-r--r--docs/htmldocs/smbpasswd.8.html40
-rw-r--r--docs/htmldocs/smbsh.1.html13
-rw-r--r--docs/htmldocs/smbspool.8.html21
-rw-r--r--docs/htmldocs/smbstatus.1.html8
-rw-r--r--docs/htmldocs/smbtar.1.html5
-rw-r--r--docs/htmldocs/smbumount.8.html2
-rw-r--r--docs/htmldocs/swat.8.html64
-rw-r--r--docs/htmldocs/testparm.1.html31
-rw-r--r--docs/htmldocs/testprns.1.html4
-rw-r--r--docs/htmldocs/wbinfo.1.html11
-rw-r--r--docs/htmldocs/winbind.html28
-rw-r--r--docs/htmldocs/winbindd.8.html114
-rw-r--r--docs/manpages/findsmb.15
-rw-r--r--docs/manpages/lmhosts.55
-rw-r--r--docs/manpages/make_smbcodepage.111
-rw-r--r--docs/manpages/make_unicodemap.1199
-rw-r--r--docs/manpages/nmbd.823
-rw-r--r--docs/manpages/nmblookup.112
-rw-r--r--docs/manpages/rpcclient.144
-rw-r--r--docs/manpages/samba.72
-rw-r--r--docs/manpages/smb.conf.5837
-rw-r--r--docs/manpages/smbcacls.114
-rw-r--r--docs/manpages/smbclient.196
-rw-r--r--docs/manpages/smbcontrol.12
-rw-r--r--docs/manpages/smbd.852
-rw-r--r--docs/manpages/smbmnt.86
-rw-r--r--docs/manpages/smbmount.826
-rw-r--r--docs/manpages/smbpasswd.516
-rw-r--r--docs/manpages/smbpasswd.817
-rw-r--r--docs/manpages/smbrun.12
-rw-r--r--docs/manpages/smbsh.17
-rw-r--r--docs/manpages/smbspool.88
-rw-r--r--docs/manpages/smbstatus.12
-rw-r--r--docs/manpages/smbtar.15
-rw-r--r--docs/manpages/smbumount.85
-rw-r--r--docs/manpages/swat.823
-rw-r--r--docs/manpages/testparm.111
-rw-r--r--docs/manpages/testprns.15
-rw-r--r--docs/manpages/wbinfo.15
-rw-r--r--docs/manpages/winbindd.831
-rw-r--r--docs/textdocs/Application_Serving.txt2
-rw-r--r--docs/textdocs/BROWSING-Config.txt2
-rw-r--r--docs/textdocs/BROWSING.txt2
-rw-r--r--docs/textdocs/BUGS.txt2
-rw-r--r--docs/textdocs/CVS_ACCESS.txt124
-rw-r--r--docs/textdocs/DHCP-Server-Configuration.txt58
-rw-r--r--docs/textdocs/DIAGNOSIS.txt2
-rw-r--r--docs/textdocs/DNIX.txt2
-rw-r--r--docs/textdocs/DOMAIN.txt381
-rw-r--r--docs/textdocs/Faxing.txt2
-rw-r--r--docs/textdocs/GOTCHAS.txt2
-rw-r--r--docs/textdocs/HINTS.txt2
-rw-r--r--docs/textdocs/Imprints.txt2
-rwxr-xr-xdocs/textdocs/MIRRORS.txt6
-rw-r--r--docs/textdocs/Macintosh_Clients.txt2
-rw-r--r--docs/textdocs/NTDOMAIN.txt (renamed from docs/textdocs/outdated/NTDOMAIN.txt)2
-rw-r--r--docs/textdocs/NetBIOS.txt2
-rw-r--r--docs/textdocs/PRINTER_DRIVER.txt (renamed from docs/textdocs/outdated/PRINTER_DRIVER.txt)2
-rw-r--r--docs/textdocs/PROFILES.txt2
-rw-r--r--docs/textdocs/PROJECTS (renamed from docs/textdocs/outdated/PROJECTS)0
-rw-r--r--docs/textdocs/Passwords.txt2
-rw-r--r--docs/textdocs/Printing.txt2
-rw-r--r--docs/textdocs/Recent-FAQs.txt2
-rw-r--r--docs/textdocs/RoutedNetworks.txt2
-rw-r--r--docs/textdocs/SCO.txt2
-rw-r--r--docs/textdocs/SSLeay.txt2
-rw-r--r--docs/textdocs/Speed.txt2
-rw-r--r--docs/textdocs/Speed2.txt2
-rw-r--r--docs/textdocs/Support.txt8
-rw-r--r--docs/textdocs/Tracing.txt2
-rw-r--r--docs/textdocs/UNIX-SMB.txt2
-rw-r--r--docs/textdocs/UNIX_SECURITY.txt2
-rw-r--r--docs/textdocs/Win95.txt2
-rw-r--r--docs/textdocs/WinNT.txt2
-rw-r--r--docs/textdocs/cifsntdomain.txt2
-rw-r--r--docs/textdocs/samba-pdc-faq.txt996
-rw-r--r--docs/textdocs/samba-pdc-howto.txt715
-rw-r--r--docs/textdocs/security_level.txt2
-rw-r--r--docs/yodldocs/README-NOW14
-rw-r--r--examples/LDAP/README56
-rw-r--r--examples/LDAP/export_smbpasswd.pl63
-rw-r--r--examples/LDAP/import_smbpasswd.pl65
-rw-r--r--examples/LDAP/samba.schema36
-rw-r--r--examples/VFS/README5
-rw-r--r--examples/libsmbclient/testsmbc.c456
-rw-r--r--examples/libsmbclient/tree.c812
-rwxr-xr-xexamples/misc/modify_samba_config.pl154
-rw-r--r--packaging/Caldera/OpenLinux/makerpms.sh.tmpl33
-rw-r--r--packaging/Caldera/OpenLinux/samba.pam6
-rw-r--r--packaging/Caldera/OpenLinux/samba2.spec-lsb.tmpl41
-rw-r--r--packaging/Caldera/OpenLinux/samba2.spec.tmpl39
-rwxr-xr-xpackaging/Caldera/OpenServer/Install2
-rw-r--r--packaging/Caldera/OpenServer/pkg/input/Samba.pkg6
-rwxr-xr-xpackaging/Caldera/UnixWare/Install7
-rw-r--r--packaging/Caldera/UnixWare/pkg/prototype3
-rwxr-xr-xpackaging/Example/samba.init7
-rw-r--r--packaging/Mandrake/empty.patch0
-rw-r--r--packaging/Mandrake/makerpms.sh.tmpl6
-rw-r--r--packaging/Mandrake/samba.log4
-rw-r--r--packaging/Mandrake/samba.pamd8
-rw-r--r--packaging/Mandrake/samba2.spec.tmpl175
-rw-r--r--packaging/Mandrake/smb.conf357
-rw-r--r--packaging/Mandrake/smb.conf.sample319
-rwxr-xr-xpackaging/Mandrake/smb.init113
-rw-r--r--packaging/PHT/TurboLinux/samba.pamd15
-rw-r--r--packaging/PHT/TurboLinux/samba2.spec.tmpl56
-rw-r--r--packaging/RedHat/samba.log4
-rw-r--r--packaging/RedHat/samba.pamd4
-rw-r--r--packaging/RedHat/samba2.spec.tmpl3
-rwxr-xr-xpackaging/SGI/idb.pl2
-rw-r--r--packaging/SGI/smbprint2
-rwxr-xr-xpackaging/Solaris/makepkg.sh33
-rw-r--r--packaging/Solaris/prototype.master46
-rw-r--r--source/Makefile.in80
-rw-r--r--source/acconfig.h9
-rw-r--r--source/aclocal.m414
-rw-r--r--source/auth/pampass.c815
-rw-r--r--source/auth/pass_check.c21
-rw-r--r--source/client/client.c235
-rw-r--r--source/client/smbspool.c4
-rw-r--r--source/codepages/CPISO8859-15.TXT134
-rwxr-xr-xsource/config.guess1036
-rwxr-xr-xsource/config.sub699
-rwxr-xr-xsource/configure2066
-rw-r--r--source/configure.in163
-rw-r--r--source/include/config.h.in39
-rw-r--r--source/include/debug.h17
-rw-r--r--source/include/includes.h104
-rw-r--r--source/include/libsmbclient.h780
-rw-r--r--source/include/local.h13
-rw-r--r--source/include/messages.h1
-rw-r--r--source/include/ntdomain.h3
-rw-r--r--source/include/proto.h470
-rw-r--r--source/include/rpc_lsa.h28
-rw-r--r--source/include/rpc_netlogon.h95
-rw-r--r--source/include/rpc_samr.h81
-rwxr-xr-xsource/include/rpc_spoolss.h38
-rw-r--r--source/include/rpc_srvsvc.h85
-rw-r--r--source/include/safe_string.h5
-rw-r--r--source/include/smb.h20
-rw-r--r--source/include/smb_acls.h42
-rw-r--r--source/include/talloc.h9
-rw-r--r--source/include/version.h2
-rw-r--r--source/include/vfs.h2
-rw-r--r--source/lib/access.c3
-rw-r--r--source/lib/debug.c59
-rw-r--r--source/lib/genrand.c362
-rw-r--r--source/lib/hash.c10
-rw-r--r--source/lib/messages.c16
-rw-r--r--source/lib/ms_fnmatch.c73
-rw-r--r--source/lib/slprintf.c95
-rw-r--r--source/lib/snprintf.c1488
-rw-r--r--source/lib/substitute.c14
-rw-r--r--source/lib/sysacls.c329
-rw-r--r--source/lib/system.c67
-rw-r--r--source/lib/talloc.c76
-rw-r--r--source/lib/ufc.c30
-rw-r--r--source/lib/util.c148
-rw-r--r--source/lib/util_getent.c239
-rw-r--r--source/lib/util_seaccess.c26
-rw-r--r--source/lib/util_sid.c102
-rw-r--r--source/lib/util_sock.c266
-rw-r--r--source/lib/util_str.c8
-rw-r--r--source/lib/util_unistr.c46
-rw-r--r--source/libsmb/cli_lsarpc.c129
-rw-r--r--source/libsmb/cli_samr.c405
-rw-r--r--source/libsmb/cli_spoolss.c296
-rw-r--r--source/libsmb/cliconnect.c109
-rw-r--r--source/libsmb/clidgram.c272
-rw-r--r--source/libsmb/clientgen.c14
-rw-r--r--source/libsmb/clierror.c3
-rw-r--r--source/libsmb/clifile.c216
-rw-r--r--source/libsmb/clilist.c146
-rw-r--r--source/libsmb/climessage.c12
-rw-r--r--source/libsmb/clirap.c119
-rw-r--r--source/libsmb/clireadwrite.c162
-rw-r--r--source/libsmb/clisecdesc.c13
-rw-r--r--source/libsmb/clistr.c153
-rw-r--r--source/libsmb/clitrans.c25
-rw-r--r--source/libsmb/libsmbclient.c2520
-rw-r--r--source/libsmb/namequery.c151
-rw-r--r--source/libsmb/pwd_cache.c10
-rw-r--r--source/libsmb/smbdes.c2
-rw-r--r--source/libsmb/smbencrypt.c2
-rw-r--r--source/libsmb/unexpected.c4
-rw-r--r--source/locking/brlock.c84
-rw-r--r--source/locking/locking.c107
-rw-r--r--source/locking/posix.c4
-rw-r--r--source/msdfs/msdfs.c1137
-rw-r--r--source/nmbd/nmbd.c10
-rw-r--r--source/nmbd/nmbd_namequery.c80
-rw-r--r--source/nmbd/nmbd_packets.c21
-rw-r--r--source/nmbd/nmbd_synclists.c9
-rw-r--r--source/nsswitch/.cvsignore1
-rw-r--r--source/nsswitch/pam_winbind.c4
-rw-r--r--source/nsswitch/pam_winbind.h87
-rw-r--r--source/nsswitch/wb_client.c8
-rw-r--r--source/nsswitch/wb_common.c5
-rw-r--r--source/nsswitch/wbinfo.c11
-rw-r--r--source/nsswitch/winbind_nss.c889
-rw-r--r--source/nsswitch/winbind_nss_config.h62
-rw-r--r--source/nsswitch/winbindd.c3
-rw-r--r--source/nsswitch/winbindd_cache.c2
-rw-r--r--source/nsswitch/winbindd_idmap.c2
-rw-r--r--source/nsswitch/wins.c54
-rw-r--r--source/pam_smbpass/INSTALL64
-rw-r--r--source/pam_smbpass/README4
-rw-r--r--source/pam_smbpass/pam_smb_acct.c113
-rw-r--r--source/pam_smbpass/pam_smb_auth.c246
-rw-r--r--source/pam_smbpass/pam_smb_passwd.c314
-rw-r--r--source/param/loadparm.c324
-rw-r--r--source/passdb/nispass.c2
-rw-r--r--source/passdb/pampass.c815
-rw-r--r--source/passdb/pass_check.c21
-rw-r--r--source/passdb/passdb.c17
-rw-r--r--source/passdb/secrets.c31
-rw-r--r--source/passdb/smbpass.c7
-rw-r--r--source/passdb/tdbpass.c12
-rw-r--r--source/printing/nt_printing.c160
-rw-r--r--source/printing/printfsp.c4
-rw-r--r--source/printing/printing.c43
-rw-r--r--source/profile/profile.c4
-rw-r--r--source/rpc_client/cli_netlogon.c2
-rw-r--r--source/rpc_client/cli_pipe.c71
-rw-r--r--source/rpc_client/cli_spoolss_notify.c2
-rw-r--r--source/rpc_client/cli_trust.c245
-rw-r--r--source/rpc_parse/parse_lsa.c86
-rw-r--r--source/rpc_parse/parse_misc.c31
-rw-r--r--source/rpc_parse/parse_net.c201
-rw-r--r--source/rpc_parse/parse_samr.c327
-rw-r--r--source/rpc_parse/parse_sec.c19
-rw-r--r--source/rpc_parse/parse_spoolss.c190
-rw-r--r--source/rpc_parse/parse_srv.c459
-rw-r--r--source/rpc_server/srv_dfs_nt.c2
-rw-r--r--source/rpc_server/srv_lsa.c32
-rw-r--r--source/rpc_server/srv_lsa_nt.c82
-rw-r--r--source/rpc_server/srv_netlog.c32
-rw-r--r--source/rpc_server/srv_netlog_nt.c114
-rw-r--r--source/rpc_server/srv_pipe.c8
-rw-r--r--source/rpc_server/srv_pipe_hnd.c4
-rw-r--r--source/rpc_server/srv_samr.c5
-rw-r--r--source/rpc_server/srv_samr_nt.c110
-rwxr-xr-xsource/rpc_server/srv_spoolss.c66
-rw-r--r--source/rpc_server/srv_spoolss_nt.c142
-rw-r--r--source/rpc_server/srv_srvsvc.c152
-rw-r--r--source/rpc_server/srv_srvsvc_nt.c336
-rw-r--r--source/rpc_server/srv_util.c4
-rw-r--r--source/rpcclient/cmd_lsarpc.c66
-rw-r--r--source/rpcclient/cmd_netlogon.c106
-rw-r--r--source/rpcclient/cmd_samr.c494
-rw-r--r--source/rpcclient/cmd_spoolss.c251
-rw-r--r--source/rpcclient/cmd_srvsvc.c243
-rw-r--r--source/rpcclient/rpcclient.c104
-rw-r--r--source/script/mkproto.awk4
-rwxr-xr-xsource/script/scancvslog.pl2
-rwxr-xr-xsource/script/uninstallcp.sh12
-rw-r--r--source/smbd/blocking.c22
-rw-r--r--source/smbd/chgpasswd.c79
-rw-r--r--source/smbd/conn.c30
-rw-r--r--source/smbd/connection.c883
-rw-r--r--source/smbd/dir.c43
-rw-r--r--source/smbd/ipc.c25
-rw-r--r--source/smbd/message.c5
-rw-r--r--source/smbd/negprot.c2
-rw-r--r--source/smbd/notify.c3
-rw-r--r--source/smbd/notify_kernel.c16
-rw-r--r--source/smbd/nttrans.c9
-rw-r--r--source/smbd/open.c12
-rw-r--r--source/smbd/oplock.c12
-rw-r--r--source/smbd/oplock_linux.c18
-rw-r--r--source/smbd/password.c524
-rw-r--r--source/smbd/posix_acls.c266
-rw-r--r--source/smbd/process.c36
-rw-r--r--source/smbd/quotas.c75
-rw-r--r--source/smbd/reply.c242
-rw-r--r--source/smbd/sec_ctx.c16
-rw-r--r--source/smbd/server.c28
-rw-r--r--source/smbd/service.c42
-rw-r--r--source/smbd/session.c179
-rw-r--r--source/smbd/ssl.c6
-rw-r--r--source/smbd/statcache.c10
-rw-r--r--source/smbd/trans2.c174
-rw-r--r--source/smbd/utmp.c576
-rw-r--r--source/smbd/vfs-wrap.c32
-rw-r--r--source/smbd/vfs.c213
-rw-r--r--source/smbwrapper/smbw.c1
-rw-r--r--source/smbwrapper/smbw_dir.c40
-rw-r--r--source/tdb/Makefile16
-rw-r--r--source/tdb/tdb.c368
-rw-r--r--source/tdb/tdb.h2
-rw-r--r--source/tdb/tdbtest.c10
-rw-r--r--source/tdb/tdbtool.c2
-rw-r--r--source/tdb/tdbtorture.c74
-rw-r--r--source/tdb/tdbutil.c75
-rw-r--r--source/tests/fcntl_lock.c31
-rw-r--r--source/utils/masktest.c171
-rw-r--r--source/utils/nmblookup.c2
-rw-r--r--source/utils/smbcacls.c23
-rw-r--r--source/utils/smbcontrol.c34
-rw-r--r--source/utils/smbfilter.c6
-rw-r--r--source/utils/smbpasswd.c5
-rw-r--r--source/utils/smbw_sample.c2
-rw-r--r--source/utils/status.c8
-rw-r--r--source/utils/testparm.c42
-rw-r--r--source/utils/torture.c149
-rw-r--r--source/web/statuspage.c24
-rw-r--r--source/web/swat.c10
-rw-r--r--swat/help/welcome.html2
-rw-r--r--testsuite/build_farm/basicsmb.fns63
-rw-r--r--testsuite/build_farm/basicsmb.smb.conf.server2
-rw-r--r--testsuite/build_farm/basicsmb.smb.conf.template37
-rw-r--r--testsuite/build_farm/basicsmb.smb.conf.user1
-rw-r--r--testsuite/build_farm/runlist1
386 files changed, 19515 insertions, 42776 deletions
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 277c346b891..b2bb4efdd3e 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,5 +1,103 @@
- WHATS NEW IN Samba 2.2.0
- ========================
+ WHATS NEW IN Samba 2.2.0a: 23rd June 2001
+ ==========================================
+
+SECURITY FIX
+============
+
+This is a security bugfix release for Samba 2.2.0. This release provides the
+following two changes *ONLY* from the 2.2.0 release.
+
+1). Fix for the security hole discovered by Michal Zalewski (lcamtuf@bos.bindview.com)
+ and described in the security advisory below.
+2). Fix for the hosts allow/hosts deny parameters not being honoured.
+
+No other changes are being made for this release to ensure a security fix only.
+For new functionality (including these security fixes) download Samba 2.2.1
+when it is available.
+
+The security advisory follows :
+
+
+ IMPORTANT: Security bugfix for Samba
+ ------------------------------------
+
+June 23rd 2001
+
+
+Summary
+-------
+
+A serious security hole has been discovered in all versions of Samba
+that allows an attacker to gain root access on the target machine for
+certain types of common Samba configuration.
+
+The immediate fix is to edit your smb.conf configuration file and
+remove all occurances of the macro "%m". Replacing occurances of %m
+with %I is probably the best solution for most sites.
+
+Details
+-------
+
+A remote attacker can use a netbios name containing unix path
+characters which will then be substituted into the %m macro wherever
+it occurs in smb.conf. This can be used to cause Samba to create a log
+file on top of an important system file, which in turn can be used to
+compromise security on the server.
+
+The most commonly used configuration option that can be vulnerable to
+this attack is the "log file" option. The default value for this
+option is VARDIR/log.smbd. If the default is used then Samba is not
+vulnerable to this attack.
+
+The security hole occurs when a log file option like the following is
+used:
+
+ log file = /var/log/samba/%m.log
+
+In that case the attacker can use a locally created symbolic link to
+overwrite any file on the system. This requires local access to the
+server.
+
+If your Samba configuration has something like the following:
+
+ log file = /var/log/samba/%m
+
+Then the attacker could successfully compromise your server remotely
+as no symbolic link is required. This type of configuration is very
+rare.
+
+The most commonly used log file configuration containing %m is the
+distributed in the sample configuration file that comes with Samba:
+
+ log file = /var/log/samba/log.%m
+
+in that case your machine is not vulnerable to this attack unless you
+happen to have a subdirectory in /var/log/samba/ which starts with the
+prefix "log."
+
+Credit
+------
+
+Thanks to Michal Zalewski (lcamtuf@bos.bindview.com) for finding this
+vulnerability.
+
+
+New Release
+-----------
+
+While we recommend that vulnerable sites immediately change their
+smb.conf configuration file to prevent the attack we will also be
+making new releases of Samba within the next 24 hours to properly fix
+the problem. Please see http://www.samba.org/ for the new releases.
+
+Please report any attacks to the appropriate authority.
+
+ The Samba Team
+ security@samba.org
+
+---------------------------------------------------------------------------
+
+The release notes for 2.2.0 follow :
This is the official Samba 2.2.0 release. This version of Samba provides
the following new features and enhancements.
diff --git a/docs/NT4-Locking.reg b/docs/NT4-Locking.reg
index 6175fd51459..a550d52a725 100644
--- a/docs/NT4-Locking.reg
+++ b/docs/NT4-Locking.reg
@@ -1,8 +1,7 @@
REGEDIT4
;Contributor: John H Terpstra <jht@samba.org>
-;Corrected: Stefan Kanthak <skanthak@nexgo.de>
-;Updated: Jun 25, 2001
+;Updated: Feb 15, 1999
;
;Subject: Registry Entries That Affect Locking and Caching
@@ -16,9 +15,9 @@ REGEDIT4
"UtilizeNtCaching"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Filesystem]
-"Win95TruncatedExtensions"=dword:00000000
-"NTFSDisable8dot3NameCreation"=dword:00000001
+"Win95TruncateExtensions"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanManServer\Parameters]
"EnableOpLockForceClose"=dword:00000001
"EnableOpLocks"=dword:00000000
+
diff --git a/docs/README.pam_smbpass b/docs/README.pam_smbpass
deleted file mode 100644
index 3adff618493..00000000000
--- a/docs/README.pam_smbpass
+++ /dev/null
@@ -1,3 +0,0 @@
-The documentation for the smbpass PAM module
-is contained in a README file in the source/pam_smbpass
-directory.
diff --git a/docs/Samba-HOWTO-Collection.pdf b/docs/Samba-HOWTO-Collection.pdf
index a68a19f3b4c..bcd4cb2df40 100644
--- a/docs/Samba-HOWTO-Collection.pdf
+++ b/docs/Samba-HOWTO-Collection.pdf
@@ -1,6 +1,6 @@
%PDF-1.2
%âãÏÓ
-1 0 obj<</Producer(htmldoc 1.8.11 Copyright 1997-2001 Easy Software Products, All Rights Reserved.)/CreationDate(D:20010622202415Z)/Title(SAMBA Project Documentation)/Creator(Modular DocBook HTML Stylesheet Version 1.57)>>endobj
+1 0 obj<</Producer(htmldoc 1.8.11 Copyright 1997-2001 Easy Software Products, All Rights Reserved.)/CreationDate(D:20010415041942Z)/Title(SAMBA Project Documentation)/Creator(Modular DocBook HTML Stylesheet Version 1.57)>>endobj
2 0 obj<</Type/Encoding/Differences[ 32/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/minus/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde 128/Euro 130/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE 145/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe 159/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]>>endobj
3 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding 2 0 R>>endobj
4 0 obj<</Type/Font/Subtype/Type1/BaseFont/Courier-Bold/Encoding 2 0 R>>endobj
@@ -9,487 +9,492 @@
7 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Roman/Encoding 2 0 R>>endobj
8 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Bold/Encoding 2 0 R>>endobj
9 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-Italic/Encoding 2 0 R>>endobj
-10 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
-11 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
-12 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
-13 0 obj<</S/URI/URI(http://www.samba.org/)>>endobj
-14 0 obj<</Subtype/Link/Rect[188.4 476.2 289.8 489.2]/Border[0 0 0]/A 13 0 R>>endobj
-15 0 obj<</S/URI/URI(mailto:jerry@samba.org)>>endobj
-16 0 obj<</Subtype/Link/Rect[72.0 463.0 148.4 476.0]/Border[0 0 0]/A 15 0 R>>endobj
-17 0 obj[14 0 R
+10 0 obj<</Type/Font/Subtype/Type1/BaseFont/Times-BoldItalic/Encoding 2 0 R>>endobj
+11 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica/Encoding 2 0 R>>endobj
+12 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica-Bold/Encoding 2 0 R>>endobj
+13 0 obj<</Type/Font/Subtype/Type1/BaseFont/Symbol>>endobj
+14 0 obj<</Subtype/Link/Rect[83.0 625.4 223.9 638.4]/Border[0 0 0]/Dest[486 0 R/XYZ null 798 0]>>endobj
+15 0 obj<</Subtype/Link/Rect[108.0 612.2 230.5 625.2]/Border[0 0 0]/Dest[489 0 R/XYZ null 798 0]>>endobj
+16 0 obj<</Subtype/Link/Rect[108.0 599.0 235.7 612.0]/Border[0 0 0]/Dest[492 0 R/XYZ null 798 0]>>endobj
+17 0 obj<</Subtype/Link/Rect[108.0 585.8 239.1 598.8]/Border[0 0 0]/Dest[495 0 R/XYZ null 798 0]>>endobj
+18 0 obj<</Subtype/Link/Rect[108.0 572.6 290.4 585.6]/Border[0 0 0]/Dest[498 0 R/XYZ null 798 0]>>endobj
+19 0 obj<</Subtype/Link/Rect[108.0 559.4 296.2 572.4]/Border[0 0 0]/Dest[501 0 R/XYZ null 798 0]>>endobj
+20 0 obj<</Subtype/Link/Rect[108.0 546.2 265.7 559.2]/Border[0 0 0]/Dest[504 0 R/XYZ null 798 0]>>endobj
+21 0 obj<</Subtype/Link/Rect[144.0 533.0 288.5 546.0]/Border[0 0 0]/Dest[504 0 R/XYZ null 611 0]>>endobj
+22 0 obj<</Subtype/Link/Rect[144.0 519.8 338.9 532.8]/Border[0 0 0]/Dest[507 0 R/XYZ null 783 0]>>endobj
+23 0 obj<</Subtype/Link/Rect[108.0 506.6 348.2 519.6]/Border[0 0 0]/Dest[510 0 R/XYZ null 798 0]>>endobj
+24 0 obj<</Subtype/Link/Rect[108.0 493.4 294.7 506.4]/Border[0 0 0]/Dest[513 0 R/XYZ null 798 0]>>endobj
+25 0 obj<</Subtype/Link/Rect[108.0 480.2 484.1 493.2]/Border[0 0 0]/Dest[516 0 R/XYZ null 798 0]>>endobj
+26 0 obj<</Subtype/Link/Rect[108.0 467.0 232.6 480.0]/Border[0 0 0]/Dest[519 0 R/XYZ null 798 0]>>endobj
+27 0 obj<</Subtype/Link/Rect[144.0 453.8 240.3 466.8]/Border[0 0 0]/Dest[519 0 R/XYZ null 585 0]>>endobj
+28 0 obj<</Subtype/Link/Rect[144.0 440.6 188.9 453.6]/Border[0 0 0]/Dest[519 0 R/XYZ null 510 0]>>endobj
+29 0 obj<</Subtype/Link/Rect[144.0 427.4 270.2 440.4]/Border[0 0 0]/Dest[519 0 R/XYZ null 395 0]>>endobj
+30 0 obj<</Subtype/Link/Rect[144.0 414.2 298.6 427.2]/Border[0 0 0]/Dest[522 0 R/XYZ null 741 0]>>endobj
+31 0 obj<</Subtype/Link/Rect[144.0 401.0 179.4 414.0]/Border[0 0 0]/Dest[522 0 R/XYZ null 613 0]>>endobj
+32 0 obj<</Subtype/Link/Rect[144.0 387.8 236.0 400.8]/Border[0 0 0]/Dest[525 0 R/XYZ null 783 0]>>endobj
+33 0 obj<</Subtype/Link/Rect[144.0 374.6 238.1 387.6]/Border[0 0 0]/Dest[525 0 R/XYZ null 694 0]>>endobj
+34 0 obj<</Subtype/Link/Rect[83.0 361.4 313.4 374.4]/Border[0 0 0]/Dest[528 0 R/XYZ null 798 0]>>endobj
+35 0 obj<</Subtype/Link/Rect[108.0 348.2 163.0 361.2]/Border[0 0 0]/Dest[531 0 R/XYZ null 798 0]>>endobj
+36 0 obj<</Subtype/Link/Rect[108.0 335.0 190.8 348.0]/Border[0 0 0]/Dest[534 0 R/XYZ null 798 0]>>endobj
+37 0 obj<</Subtype/Link/Rect[108.0 321.8 247.6 334.8]/Border[0 0 0]/Dest[537 0 R/XYZ null 798 0]>>endobj
+38 0 obj<</Subtype/Link/Rect[144.0 308.6 282.4 321.6]/Border[0 0 0]/Dest[537 0 R/XYZ null 203 0]>>endobj
+39 0 obj<</Subtype/Link/Rect[144.0 295.4 325.9 308.4]/Border[0 0 0]/Dest[540 0 R/XYZ null 701 0]>>endobj
+40 0 obj<</Subtype/Link/Rect[108.0 282.2 194.2 295.2]/Border[0 0 0]/Dest[543 0 R/XYZ null 798 0]>>endobj
+41 0 obj<</Subtype/Link/Rect[108.0 269.0 225.3 282.0]/Border[0 0 0]/Dest[549 0 R/XYZ null 798 0]>>endobj
+42 0 obj<</Subtype/Link/Rect[108.0 255.8 344.5 268.8]/Border[0 0 0]/Dest[552 0 R/XYZ null 798 0]>>endobj
+43 0 obj<</Subtype/Link/Rect[83.0 242.6 344.5 255.6]/Border[0 0 0]/Dest[555 0 R/XYZ null 798 0]>>endobj
+44 0 obj<</Subtype/Link/Rect[108.0 229.4 160.6 242.4]/Border[0 0 0]/Dest[558 0 R/XYZ null 798 0]>>endobj
+45 0 obj<</Subtype/Link/Rect[144.0 216.2 169.1 229.2]/Border[0 0 0]/Dest[561 0 R/XYZ null 754 0]>>endobj
+46 0 obj<</Subtype/Link/Rect[83.0 203.0 225.4 216.0]/Border[0 0 0]/Dest[564 0 R/XYZ null 798 0]>>endobj
+47 0 obj<</Subtype/Link/Rect[108.0 189.8 163.0 202.8]/Border[0 0 0]/Dest[567 0 R/XYZ null 798 0]>>endobj
+48 0 obj<</Subtype/Link/Rect[108.0 176.6 170.3 189.6]/Border[0 0 0]/Dest[570 0 R/XYZ null 798 0]>>endobj
+49 0 obj<</Subtype/Link/Rect[144.0 163.4 298.3 176.4]/Border[0 0 0]/Dest[576 0 R/XYZ null 741 0]>>endobj
+50 0 obj<</Subtype/Link/Rect[108.0 150.2 199.7 163.2]/Border[0 0 0]/Dest[579 0 R/XYZ null 798 0]>>endobj
+51 0 obj<</Subtype/Link/Rect[144.0 137.0 222.8 150.0]/Border[0 0 0]/Dest[579 0 R/XYZ null 664 0]>>endobj
+52 0 obj<</Subtype/Link/Rect[144.0 123.8 294.6 136.8]/Border[0 0 0]/Dest[579 0 R/XYZ null 457 0]>>endobj
+53 0 obj<</Subtype/Link/Rect[144.0 110.6 230.8 123.6]/Border[0 0 0]/Dest[579 0 R/XYZ null 355 0]>>endobj
+54 0 obj<</Subtype/Link/Rect[144.0 97.4 243.6 110.4]/Border[0 0 0]/Dest[579 0 R/XYZ null 240 0]>>endobj
+55 0 obj<</Subtype/Link/Rect[108.0 84.2 282.5 97.2]/Border[0 0 0]/Dest[585 0 R/XYZ null 798 0]>>endobj
+56 0 obj<</Subtype/Link/Rect[83.0 71.0 223.6 84.0]/Border[0 0 0]/Dest[588 0 R/XYZ null 798 0]>>endobj
+57 0 obj[14 0 R
+15 0 R
16 0 R
-]endobj
-18 0 obj<</S/URI/URI(http://www.samba.org/)>>endobj
-19 0 obj<</Subtype/Link/Rect[369.9 587.8 471.0 600.8]/Border[0 0 0]/A 18 0 R>>endobj
-20 0 obj[19 0 R
-]endobj
-21 0 obj<</S/URI/URI(ENCRYPTION.html)>>endobj
-22 0 obj<</Subtype/Link/Rect[176.8 381.8 270.6 394.8]/Border[0 0 0]/A 21 0 R>>endobj
-23 0 obj<</S/URI/URI(#PASSWORDLEVEL)>>endobj
-24 0 obj<</Subtype/Link/Rect[73.0 118.8 154.0 129.8]/Border[0 0 0]/A 23 0 R>>endobj
-25 0 obj<</S/URI/URI(#USERNAMELEVEL)>>endobj
-26 0 obj<</Subtype/Link/Rect[73.0 108.0 148.6 119.0]/Border[0 0 0]/A 25 0 R>>endobj
-27 0 obj[22 0 R
+17 0 R
+18 0 R
+19 0 R
+20 0 R
+21 0 R
+22 0 R
+23 0 R
24 0 R
+25 0 R
26 0 R
-]endobj
-28 0 obj<</S/URI/URI(winbind.html)>>endobj
-29 0 obj<</Subtype/Link/Rect[508.9 602.2 547.4 615.2]/Border[0 0 0]/A 28 0 R>>endobj
-30 0 obj<</S/URI/URI(winbind.html)>>endobj
-31 0 obj<</Subtype/Link/Rect[72.0 589.0 115.4 602.0]/Border[0 0 0]/A 30 0 R>>endobj
-32 0 obj[29 0 R
+27 0 R
+28 0 R
+29 0 R
+30 0 R
31 0 R
-]endobj
-33 0 obj<</S/URI/URI(http://rsync.samba.org/)>>endobj
-34 0 obj<</Subtype/Link/Rect[120.9 102.2 222.3 115.2]/Border[0 0 0]/A 33 0 R>>endobj
-35 0 obj[34 0 R
-]endobj
-36 0 obj<</S/URI/URI(#OBEYPAMRESTRICTIONS)>>endobj
-37 0 obj<</Subtype/Link/Rect[238.2 662.6 332.9 675.6]/Border[0 0 0]/A 36 0 R>>endobj
-38 0 obj<</S/URI/URI(#ENCRYPTPASSWORDS)>>endobj
-39 0 obj<</Subtype/Link/Rect[344.2 583.4 454.9 596.4]/Border[0 0 0]/A 38 0 R>>endobj
-40 0 obj[37 0 R
+32 0 R
+33 0 R
+34 0 R
+35 0 R
+36 0 R
+37 0 R
+38 0 R
39 0 R
-]endobj
-41 0 obj<</S/URI/URI(http://www.microsoft.com/NTServer/nts/downloads/winfeatures/NTSDistrFile/AdminGuide.asp)>>endobj
-42 0 obj<</Subtype/Link/Rect[72.0 590.2 183.5 603.2]/Border[0 0 0]/A 41 0 R>>endobj
-43 0 obj<</S/URI/URI(#HOSTMSDFS)>>endobj
-44 0 obj<</Subtype/Link/Rect[347.8 511.0 420.4 524.0]/Border[0 0 0]/A 43 0 R>>endobj
-45 0 obj<</S/URI/URI(#MSDFSROOT)>>endobj
-46 0 obj<</Subtype/Link/Rect[383.6 497.8 456.2 510.8]/Border[0 0 0]/A 45 0 R>>endobj
-47 0 obj[42 0 R
+40 0 R
+41 0 R
+42 0 R
+43 0 R
44 0 R
+45 0 R
46 0 R
-]endobj
-48 0 obj<</S/URI/URI(#NTACLSUPPORT)>>endobj
-49 0 obj<</Subtype/Link/Rect[342.7 533.8 441.7 546.8]/Border[0 0 0]/A 48 0 R>>endobj
-50 0 obj[49 0 R
-]endobj
-51 0 obj<</S/URI/URI(#SECURITYMASK)>>endobj
-52 0 obj<</Subtype/Link/Rect[88.2 668.2 180.6 681.2]/Border[0 0 0]/A 51 0 R>>endobj
-53 0 obj<</S/URI/URI(#CREATEMASK)>>endobj
-54 0 obj<</Subtype/Link/Rect[358.9 589.0 438.1 602.0]/Border[0 0 0]/A 53 0 R>>endobj
-55 0 obj<</S/URI/URI(#FORCESECURITYMODE)>>endobj
-56 0 obj<</Subtype/Link/Rect[427.0 536.2 526.0 549.2]/Border[0 0 0]/A 55 0 R>>endobj
-57 0 obj<</S/URI/URI(#FORCESECURITYMODE)>>endobj
-58 0 obj<</Subtype/Link/Rect[72.0 523.0 98.4 536.0]/Border[0 0 0]/A 57 0 R>>endobj
-59 0 obj<</S/URI/URI(#FORCECREATEMODE)>>endobj
-60 0 obj<</Subtype/Link/Rect[358.9 443.8 477.7 456.8]/Border[0 0 0]/A 59 0 R>>endobj
-61 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
-62 0 obj<</Subtype/Link/Rect[72.0 166.6 151.2 179.6]/Border[0 0 0]/A 61 0 R>>endobj
-63 0 obj[52 0 R
+47 0 R
+48 0 R
+49 0 R
+50 0 R
+51 0 R
+52 0 R
+53 0 R
54 0 R
+55 0 R
56 0 R
-58 0 R
+]endobj
+58 0 obj<</Subtype/Link/Rect[108.0 721.0 280.0 734.0]/Border[0 0 0]/Dest[591 0 R/XYZ null 798 0]>>endobj
+59 0 obj<</Subtype/Link/Rect[108.0 707.8 267.5 720.8]/Border[0 0 0]/Dest[597 0 R/XYZ null 798 0]>>endobj
+60 0 obj<</Subtype/Link/Rect[108.0 694.6 290.5 707.6]/Border[0 0 0]/Dest[600 0 R/XYZ null 798 0]>>endobj
+61 0 obj<</Subtype/Link/Rect[83.0 681.4 366.9 694.4]/Border[0 0 0]/Dest[603 0 R/XYZ null 798 0]>>endobj
+62 0 obj<</Subtype/Link/Rect[108.0 668.2 161.8 681.2]/Border[0 0 0]/Dest[606 0 R/XYZ null 798 0]>>endobj
+63 0 obj<</Subtype/Link/Rect[108.0 655.0 298.1 668.0]/Border[0 0 0]/Dest[612 0 R/XYZ null 798 0]>>endobj
+64 0 obj<</Subtype/Link/Rect[108.0 641.8 414.8 654.8]/Border[0 0 0]/Dest[618 0 R/XYZ null 798 0]>>endobj
+65 0 obj<</Subtype/Link/Rect[108.0 628.6 244.0 641.6]/Border[0 0 0]/Dest[624 0 R/XYZ null 798 0]>>endobj
+66 0 obj<</Subtype/Link/Rect[108.0 615.4 233.6 628.4]/Border[0 0 0]/Dest[630 0 R/XYZ null 798 0]>>endobj
+67 0 obj<</Subtype/Link/Rect[108.0 602.2 228.4 615.2]/Border[0 0 0]/Dest[636 0 R/XYZ null 798 0]>>endobj
+68 0 obj<</Subtype/Link/Rect[144.0 589.0 222.2 602.0]/Border[0 0 0]/Dest[639 0 R/XYZ null 266 0]>>endobj
+69 0 obj<</Subtype/Link/Rect[144.0 575.8 202.4 588.8]/Border[0 0 0]/Dest[642 0 R/XYZ null 609 0]>>endobj
+70 0 obj<</Subtype/Link/Rect[108.0 562.6 404.4 575.6]/Border[0 0 0]/Dest[648 0 R/XYZ null 798 0]>>endobj
+71 0 obj<</Subtype/Link/Rect[83.0 549.4 360.5 562.4]/Border[0 0 0]/Dest[654 0 R/XYZ null 798 0]>>endobj
+72 0 obj<</Subtype/Link/Rect[108.0 536.2 145.3 549.2]/Border[0 0 0]/Dest[657 0 R/XYZ null 798 0]>>endobj
+73 0 obj<</Subtype/Link/Rect[108.0 523.0 163.0 536.0]/Border[0 0 0]/Dest[660 0 R/XYZ null 798 0]>>endobj
+74 0 obj<</Subtype/Link/Rect[108.0 509.8 213.1 522.8]/Border[0 0 0]/Dest[663 0 R/XYZ null 798 0]>>endobj
+75 0 obj<</Subtype/Link/Rect[144.0 496.6 197.5 509.6]/Border[0 0 0]/Dest[663 0 R/XYZ null 426 0]>>endobj
+76 0 obj<</Subtype/Link/Rect[108.0 483.4 199.7 496.4]/Border[0 0 0]/Dest[666 0 R/XYZ null 798 0]>>endobj
+77 0 obj<</Subtype/Link/Rect[144.0 470.2 297.7 483.2]/Border[0 0 0]/Dest[666 0 R/XYZ null 651 0]>>endobj
+78 0 obj<</Subtype/Link/Rect[144.0 457.0 236.9 470.0]/Border[0 0 0]/Dest[666 0 R/XYZ null 444 0]>>endobj
+79 0 obj<</Subtype/Link/Rect[144.0 443.8 297.4 456.8]/Border[0 0 0]/Dest[669 0 R/XYZ null 662 0]>>endobj
+80 0 obj<</Subtype/Link/Rect[144.0 430.6 279.0 443.6]/Border[0 0 0]/Dest[669 0 R/XYZ null 349 0]>>endobj
+81 0 obj<</Subtype/Link/Rect[144.0 417.4 211.5 430.4]/Border[0 0 0]/Dest[672 0 R/XYZ null 783 0]>>endobj
+82 0 obj<</Subtype/Link/Rect[108.0 404.2 243.1 417.2]/Border[0 0 0]/Dest[675 0 R/XYZ null 798 0]>>endobj
+83 0 obj<</Subtype/Link/Rect[108.0 391.0 158.1 404.0]/Border[0 0 0]/Dest[678 0 R/XYZ null 798 0]>>endobj
+84 0 obj<</Subtype/Link/Rect[108.0 377.8 158.1 390.8]/Border[0 0 0]/Dest[681 0 R/XYZ null 798 0]>>endobj
+85 0 obj<</Subtype/Link/Rect[83.0 364.6 353.1 377.6]/Border[0 0 0]/Dest[684 0 R/XYZ null 798 0]>>endobj
+86 0 obj<</Subtype/Link/Rect[108.0 351.4 425.2 364.4]/Border[0 0 0]/Dest[687 0 R/XYZ null 798 0]>>endobj
+87 0 obj<</Subtype/Link/Rect[108.0 338.2 299.3 351.2]/Border[0 0 0]/Dest[690 0 R/XYZ null 798 0]>>endobj
+88 0 obj<</Subtype/Link/Rect[108.0 325.0 209.5 338.0]/Border[0 0 0]/Dest[693 0 R/XYZ null 798 0]>>endobj
+89 0 obj<</Subtype/Link/Rect[108.0 311.8 271.8 324.8]/Border[0 0 0]/Dest[696 0 R/XYZ null 798 0]>>endobj
+90 0 obj<</Subtype/Link/Rect[144.0 298.6 218.2 311.6]/Border[0 0 0]/Dest[696 0 R/XYZ null 532 0]>>endobj
+91 0 obj<</Subtype/Link/Rect[144.0 285.4 243.3 298.4]/Border[0 0 0]/Dest[696 0 R/XYZ null 272 0]>>endobj
+92 0 obj<</Subtype/Link/Rect[108.0 272.2 280.9 285.2]/Border[0 0 0]/Dest[702 0 R/XYZ null 798 0]>>endobj
+93 0 obj<</Subtype/Link/Rect[108.0 259.0 380.5 272.0]/Border[0 0 0]/Dest[705 0 R/XYZ null 798 0]>>endobj
+94 0 obj<</Subtype/Link/Rect[108.0 245.8 370.8 258.8]/Border[0 0 0]/Dest[711 0 R/XYZ null 798 0]>>endobj
+95 0 obj<</Subtype/Link/Rect[83.0 232.6 173.4 245.6]/Border[0 0 0]/Dest[714 0 R/XYZ null 798 0]>>endobj
+96 0 obj<</Subtype/Link/Rect[108.0 219.4 133.7 232.4]/Border[0 0 0]/Dest[717 0 R/XYZ null 798 0]>>endobj
+97 0 obj<</Subtype/Link/Rect[144.0 206.2 503.3 219.2]/Border[0 0 0]/Dest[717 0 R/XYZ null 745 0]>>endobj
+98 0 obj<</Subtype/Link/Rect[144.0 193.0 506.7 206.0]/Border[0 0 0]/Dest[717 0 R/XYZ null 320 0]>>endobj
+99 0 obj<</Subtype/Link/Rect[144.0 179.8 459.9 192.8]/Border[0 0 0]/Dest[720 0 R/XYZ null 754 0]>>endobj
+100 0 obj<</Subtype/Link/Rect[144.0 166.6 429.1 179.6]/Border[0 0 0]/Dest[720 0 R/XYZ null 619 0]>>endobj
+101 0 obj[58 0 R
+59 0 R
60 0 R
+61 0 R
62 0 R
-]endobj
-64 0 obj<</S/URI/URI(http://imprints.sourceforge.net)>>endobj
-65 0 obj<</Subtype/Link/Rect[146.5 548.2 280.3 561.2]/Border[0 0 0]/A 64 0 R>>endobj
-66 0 obj<</S/URI/URI(http://msdn.microsoft.com/)>>endobj
-67 0 obj<</Subtype/Link/Rect[221.4 521.8 341.1 534.8]/Border[0 0 0]/A 66 0 R>>endobj
-68 0 obj<</S/URI/URI(http://support.microsoft.com/support/kb/articles/Q189/1/05.ASP)>>endobj
-69 0 obj<</Subtype/Link/Rect[72.0 297.4 355.9 310.4]/Border[0 0 0]/A 68 0 R>>endobj
-70 0 obj[65 0 R
+63 0 R
+64 0 R
+65 0 R
+66 0 R
67 0 R
+68 0 R
69 0 R
-]endobj
-71 0 obj<</Subtype/Link/Rect[462.9 705.8 540.9 718.8]/Border[0 0 0]/Dest[603 0 R/XYZ null 768 0]>>endobj
-72 0 obj<</S/URI/URI(#WRITELIST)>>endobj
-73 0 obj<</Subtype/Link/Rect[91.9 313.4 157.9 326.4]/Border[0 0 0]/A 72 0 R>>endobj
-74 0 obj<</S/URI/URI(conf.5.html)>>endobj
-75 0 obj<</Subtype/Link/Rect[192.7 300.2 294.1 313.2]/Border[0 0 0]/A 74 0 R>>endobj
-76 0 obj<</S/URI/URI(#GUESTOK)>>endobj
-77 0 obj<</Subtype/Link/Rect[163.3 273.8 231.3 286.8]/Border[0 0 0]/A 76 0 R>>endobj
-78 0 obj<</S/URI/URI(#MAPTOGUEST)>>endobj
-79 0 obj<</Subtype/Link/Rect[401.4 168.2 492.0 181.2]/Border[0 0 0]/A 78 0 R>>endobj
-80 0 obj<</S/URI/URI(#MAPTOGUEST)>>endobj
-81 0 obj<</Subtype/Link/Rect[108.0 155.0 130.0 168.0]/Border[0 0 0]/A 80 0 R>>endobj
-82 0 obj[71 0 R
+70 0 R
+71 0 R
+72 0 R
73 0 R
+74 0 R
75 0 R
+76 0 R
77 0 R
+78 0 R
79 0 R
+80 0 R
81 0 R
-]endobj
-83 0 obj<</S/URI/URI(#PRINTERADMIN)>>endobj
-84 0 obj<</Subtype/Link/Rect[433.8 567.8 526.2 580.8]/Border[0 0 0]/A 83 0 R>>endobj
-85 0 obj[84 0 R
-]endobj
-86 0 obj<</S/URI/URI(rpcclient.1.html)>>endobj
-87 0 obj<</Subtype/Link/Rect[239.1 583.4 382.1 596.4]/Border[0 0 0]/A 86 0 R>>endobj
-88 0 obj<</S/URI/URI(#SHOWADDPRINTERWIZARD)>>endobj
-89 0 obj<</Subtype/Link/Rect[108.0 159.0 306.0 172.0]/Border[0 0 0]/A 88 0 R>>endobj
-90 0 obj<</S/URI/URI(#ADDPRINTERCOMMAND)>>endobj
-91 0 obj<</Subtype/Link/Rect[456.6 132.6 535.8 145.6]/Border[0 0 0]/A 90 0 R>>endobj
-92 0 obj<</S/URI/URI(#ADDPRINTERCOMMAND)>>endobj
-93 0 obj<</Subtype/Link/Rect[72.0 119.4 118.2 132.4]/Border[0 0 0]/A 92 0 R>>endobj
-94 0 obj[87 0 R
+82 0 R
+83 0 R
+84 0 R
+85 0 R
+86 0 R
+87 0 R
+88 0 R
89 0 R
+90 0 R
91 0 R
+92 0 R
93 0 R
-]endobj
-95 0 obj<</S/URI/URI(#DELETEPRINTERCOMMAND)>>endobj
-96 0 obj<</Subtype/Link/Rect[189.3 681.4 334.5 694.4]/Border[0 0 0]/A 95 0 R>>endobj
-97 0 obj<</S/URI/URI(#ENUMPORTSCOMMAND)>>endobj
-98 0 obj<</Subtype/Link/Rect[451.4 504.2 510.8 517.2]/Border[0 0 0]/A 97 0 R>>endobj
-99 0 obj<</S/URI/URI(#ENUMPORTSCOMMAND)>>endobj
-100 0 obj<</Subtype/Link/Rect[72.0 491.0 118.2 504.0]/Border[0 0 0]/A 99 0 R>>endobj
-101 0 obj<</S/URI/URI(http://imprints.sourceforge.net/)>>endobj
-102 0 obj<</Subtype/Link/Rect[303.3 406.2 442.9 419.2]/Border[0 0 0]/A 101 0 R>>endobj
-103 0 obj[96 0 R
+94 0 R
+95 0 R
+96 0 R
+97 0 R
98 0 R
+99 0 R
100 0 R
-102 0 R
]endobj
-104 0 obj<</S/URI/URI(http://imprints.sourceforge.net/)>>endobj
-105 0 obj<</Subtype/Link/Rect[108.0 58.6 244.9 71.6]/Border[0 0 0]/A 104 0 R>>endobj
+102 0 obj<</S/URI/URI(http://www.samba.org/)>>endobj
+103 0 obj<</Subtype/Link/Rect[369.9 617.8 471.0 630.8]/Border[0 0 0]/A 102 0 R>>endobj
+104 0 obj[103 0 R
+]endobj
+105 0 obj<</Subtype/Link/Rect[295.1 514.6 385.6 527.6]/Border[0 0 0]/Dest[543 0 R/XYZ null 798 0]>>endobj
106 0 obj[105 0 R
]endobj
-107 0 obj<</S/URI/URI(smbpasswd.8.html)>>endobj
-108 0 obj<</Subtype/Link/Rect[221.4 416.2 287.7 429.2]/Border[0 0 0]/A 107 0 R>>endobj
-109 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
-110 0 obj<</Subtype/Link/Rect[353.1 99.4 425.7 112.4]/Border[0 0 0]/A 109 0 R>>endobj
-111 0 obj<</S/URI/URI(#SECURITY)>>endobj
-112 0 obj<</Subtype/Link/Rect[169.1 59.8 241.7 72.8]/Border[0 0 0]/A 111 0 R>>endobj
+107 0 obj<</S/URI/URI(http://www.microsoft.com/NTServer/nts/downloads/winfeatures/NTSDistrFile/AdminGuide.asp)>>endobj
+108 0 obj<</Subtype/Link/Rect[72.0 644.2 183.5 657.2]/Border[0 0 0]/A 107 0 R>>endobj
+109 0 obj<</S/URI/URI(#HOSTMSDFS)>>endobj
+110 0 obj<</Subtype/Link/Rect[347.8 565.0 420.4 578.0]/Border[0 0 0]/A 109 0 R>>endobj
+111 0 obj<</S/URI/URI(#MSDFSROOT)>>endobj
+112 0 obj<</Subtype/Link/Rect[383.6 551.8 456.2 564.8]/Border[0 0 0]/A 111 0 R>>endobj
113 0 obj[108 0 R
110 0 R
112 0 R
]endobj
-114 0 obj<</S/URI/URI(#WORKGROUP)>>endobj
-115 0 obj<</Subtype/Link/Rect[146.2 694.6 225.4 707.6]/Border[0 0 0]/A 114 0 R>>endobj
-116 0 obj<</S/URI/URI(#ENCRYPTPASSWORDS)>>endobj
-117 0 obj<</Subtype/Link/Rect[224.7 615.4 343.5 628.4]/Border[0 0 0]/A 116 0 R>>endobj
-118 0 obj<</S/URI/URI(#PASSWORDSERVER)>>endobj
-119 0 obj<</Subtype/Link/Rect[188.7 575.8 307.5 588.8]/Border[0 0 0]/A 118 0 R>>endobj
-120 0 obj[115 0 R
+114 0 obj<</S/URI/URI(http://imprints.sourceforge.net)>>endobj
+115 0 obj<</Subtype/Link/Rect[484.1 551.8 558.9 564.8]/Border[0 0 0]/A 114 0 R>>endobj
+116 0 obj<</S/URI/URI(http://msdn.microsoft.com/)>>endobj
+117 0 obj<</Subtype/Link/Rect[108.0 499.0 210.7 512.0]/Border[0 0 0]/A 116 0 R>>endobj
+118 0 obj[115 0 R
117 0 R
-119 0 R
]endobj
-121 0 obj<</S/URI/URI(#SECURITYEQUALSSERVER)>>endobj
-122 0 obj<</Subtype/Link/Rect[277.9 651.4 354.1 664.4]/Border[0 0 0]/A 121 0 R>>endobj
-123 0 obj<</S/URI/URI(winbind.html)>>endobj
-124 0 obj<</Subtype/Link/Rect[153.9 598.6 222.3 611.6]/Border[0 0 0]/A 123 0 R>>endobj
-125 0 obj<</S/URI/URI(http://www.linuxworld.com)>>endobj
-126 0 obj<</Subtype/Link/Rect[443.5 281.8 500.6 294.8]/Border[0 0 0]/A 125 0 R>>endobj
-127 0 obj<</S/URI/URI(http://www.linuxworld.com/linuxworld/lw-1998-10/lw-10-samba.html)>>endobj
-128 0 obj<</Subtype/Link/Rect[72.0 268.6 189.3 281.6]/Border[0 0 0]/A 127 0 R>>endobj
-129 0 obj[122 0 R
-124 0 R
-126 0 R
-128 0 R
+119 0 obj<</Subtype/Link/Rect[462.9 451.4 543.6 464.4]/Border[0 0 0]/Dest[585 0 R/XYZ null 798 0]>>endobj
+120 0 obj<</S/URI/URI(#WRITELIST)>>endobj
+121 0 obj<</Subtype/Link/Rect[91.9 281.2 164.5 294.2]/Border[0 0 0]/A 120 0 R>>endobj
+122 0 obj<</S/URI/URI(conf.5.html)>>endobj
+123 0 obj<</Subtype/Link/Rect[192.7 268.0 294.1 281.0]/Border[0 0 0]/A 122 0 R>>endobj
+124 0 obj<</S/URI/URI(#GUESTOK)>>endobj
+125 0 obj<</Subtype/Link/Rect[163.3 241.6 231.3 254.6]/Border[0 0 0]/A 124 0 R>>endobj
+126 0 obj<</S/URI/URI(#MAPTOGUEST)>>endobj
+127 0 obj<</Subtype/Link/Rect[427.4 149.2 545.5 162.2]/Border[0 0 0]/A 126 0 R>>endobj
+128 0 obj[119 0 R
+121 0 R
+123 0 R
+125 0 R
+127 0 R
]endobj
-130 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
-131 0 obj<</Subtype/Link/Rect[182.3 603.4 254.9 616.4]/Border[0 0 0]/A 130 0 R>>endobj
-132 0 obj<</S/URI/URI(ENCRYPTION.html)>>endobj
-133 0 obj<</Subtype/Link/Rect[334.9 603.4 418.9 616.4]/Border[0 0 0]/A 132 0 R>>endobj
-134 0 obj<</S/URI/URI(UNIX_INSTALL.html)>>endobj
-135 0 obj<</Subtype/Link/Rect[72.0 426.2 173.7 439.2]/Border[0 0 0]/A 134 0 R>>endobj
-136 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
-137 0 obj<</Subtype/Link/Rect[167.0 413.0 268.4 426.0]/Border[0 0 0]/A 136 0 R>>endobj
-138 0 obj[131 0 R
-133 0 R
-135 0 R
-137 0 R
+129 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
+130 0 obj<</Subtype/Link/Rect[433.8 467.6 526.2 480.6]/Border[0 0 0]/A 129 0 R>>endobj
+131 0 obj[130 0 R
]endobj
-139 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
-140 0 obj<</Subtype/Link/Rect[468.3 570.2 549.6 583.2]/Border[0 0 0]/A 139 0 R>>endobj
-141 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
-142 0 obj<</Subtype/Link/Rect[72.0 557.0 92.8 570.0]/Border[0 0 0]/A 141 0 R>>endobj
-143 0 obj<</S/URI/URI(#NETBIOSNAME)>>endobj
-144 0 obj<</Subtype/Link/Rect[94.6 483.6 159.4 494.6]/Border[0 0 0]/A 143 0 R>>endobj
-145 0 obj<</S/URI/URI(#WORKGROUP)>>endobj
-146 0 obj<</Subtype/Link/Rect[94.6 472.8 143.2 483.8]/Border[0 0 0]/A 145 0 R>>endobj
-147 0 obj<</S/URI/URI(#OSLEVEL)>>endobj
-148 0 obj<</Subtype/Link/Rect[94.6 440.4 137.8 451.4]/Border[0 0 0]/A 147 0 R>>endobj
-149 0 obj<</S/URI/URI(#PERFERREDMASTER)>>endobj
-150 0 obj<</Subtype/Link/Rect[94.6 429.6 181.0 440.6]/Border[0 0 0]/A 149 0 R>>endobj
-151 0 obj<</S/URI/URI(#DOMAINMASTER)>>endobj
-152 0 obj<</Subtype/Link/Rect[94.6 418.8 164.8 429.8]/Border[0 0 0]/A 151 0 R>>endobj
-153 0 obj<</S/URI/URI(#LOCALMASTER)>>endobj
-154 0 obj<</Subtype/Link/Rect[94.6 408.0 159.4 419.0]/Border[0 0 0]/A 153 0 R>>endobj
-155 0 obj<</S/URI/URI(#SECURITYEQUALSUSER)>>endobj
-156 0 obj<</Subtype/Link/Rect[94.6 375.6 137.8 386.6]/Border[0 0 0]/A 155 0 R>>endobj
-157 0 obj<</S/URI/URI(#ENCRYPTPASSWORDS)>>endobj
-158 0 obj<</Subtype/Link/Rect[94.6 343.2 186.4 354.2]/Border[0 0 0]/A 157 0 R>>endobj
-159 0 obj<</S/URI/URI(#DOMAINLOGONS)>>endobj
-160 0 obj<</Subtype/Link/Rect[94.6 310.8 164.8 321.8]/Border[0 0 0]/A 159 0 R>>endobj
-161 0 obj<</S/URI/URI(#LOGONPATH)>>endobj
-162 0 obj<</Subtype/Link/Rect[94.6 278.4 148.6 289.4]/Border[0 0 0]/A 161 0 R>>endobj
-163 0 obj<</S/URI/URI(#LOGONDRIVE)>>endobj
-164 0 obj<</Subtype/Link/Rect[94.6 235.2 154.0 246.2]/Border[0 0 0]/A 163 0 R>>endobj
-165 0 obj<</S/URI/URI(#LOGONHOME)>>endobj
-166 0 obj<</Subtype/Link/Rect[94.6 224.4 148.6 235.4]/Border[0 0 0]/A 165 0 R>>endobj
-167 0 obj<</S/URI/URI(#LOGONSCRIPT)>>endobj
-168 0 obj<</Subtype/Link/Rect[94.6 181.2 159.4 192.2]/Border[0 0 0]/A 167 0 R>>endobj
-169 0 obj<</S/URI/URI(#PATH)>>endobj
-170 0 obj<</Subtype/Link/Rect[94.6 138.0 116.2 149.0]/Border[0 0 0]/A 169 0 R>>endobj
-171 0 obj<</S/URI/URI(#WRITEABLE)>>endobj
-172 0 obj<</Subtype/Link/Rect[94.6 127.2 143.2 138.2]/Border[0 0 0]/A 171 0 R>>endobj
-173 0 obj<</S/URI/URI(#WRITELIST)>>endobj
-174 0 obj<</Subtype/Link/Rect[94.6 116.4 148.6 127.4]/Border[0 0 0]/A 173 0 R>>endobj
-175 0 obj<</S/URI/URI(#PATH)>>endobj
-176 0 obj<</Subtype/Link/Rect[94.6 73.2 116.2 84.2]/Border[0 0 0]/A 175 0 R>>endobj
-177 0 obj<</S/URI/URI(#WRITEABLE)>>endobj
-178 0 obj<</Subtype/Link/Rect[94.6 62.4 143.2 73.4]/Border[0 0 0]/A 177 0 R>>endobj
-179 0 obj[140 0 R
-142 0 R
+132 0 obj<</S/URI/URI(rpcclient.1.html)>>endobj
+133 0 obj<</Subtype/Link/Rect[239.1 619.4 384.8 632.4]/Border[0 0 0]/A 132 0 R>>endobj
+134 0 obj[133 0 R
+]endobj
+135 0 obj<</S/URI/URI(http://imprints.sourceforge.net/)>>endobj
+136 0 obj<</Subtype/Link/Rect[303.3 670.6 442.9 683.6]/Border[0 0 0]/A 135 0 R>>endobj
+137 0 obj[136 0 R
+]endobj
+138 0 obj<</S/URI/URI(http://imprints.sourceforge.net/)>>endobj
+139 0 obj<</Subtype/Link/Rect[283.1 170.2 402.5 183.2]/Border[0 0 0]/A 138 0 R>>endobj
+140 0 obj[139 0 R
+]endobj
+141 0 obj<</S/URI/URI(smbpasswd.8.html)>>endobj
+142 0 obj<</Subtype/Link/Rect[221.4 446.2 287.7 459.2]/Border[0 0 0]/A 141 0 R>>endobj
+143 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
+144 0 obj<</Subtype/Link/Rect[353.1 129.4 425.7 142.4]/Border[0 0 0]/A 143 0 R>>endobj
+145 0 obj<</S/URI/URI(#SECURITY)>>endobj
+146 0 obj<</Subtype/Link/Rect[169.1 89.8 241.7 102.8]/Border[0 0 0]/A 145 0 R>>endobj
+147 0 obj[142 0 R
144 0 R
146 0 R
-148 0 R
-150 0 R
-152 0 R
-154 0 R
-156 0 R
+]endobj
+148 0 obj<</S/URI/URI(#WORKGROUP)>>endobj
+149 0 obj<</Subtype/Link/Rect[146.2 721.0 225.4 734.0]/Border[0 0 0]/A 148 0 R>>endobj
+150 0 obj<</S/URI/URI(#ENCRYPTPASSWORDS)>>endobj
+151 0 obj<</Subtype/Link/Rect[224.7 641.8 343.5 654.8]/Border[0 0 0]/A 150 0 R>>endobj
+152 0 obj<</S/URI/URI(#PASSWORDSERVER)>>endobj
+153 0 obj<</Subtype/Link/Rect[188.7 602.2 307.5 615.2]/Border[0 0 0]/A 152 0 R>>endobj
+154 0 obj[149 0 R
+151 0 R
+153 0 R
+]endobj
+155 0 obj<</S/URI/URI(#SECURITYEQUALSSERVER)>>endobj
+156 0 obj<</Subtype/Link/Rect[277.9 644.2 354.1 657.2]/Border[0 0 0]/A 155 0 R>>endobj
+157 0 obj<</S/URI/URI(winbind.html)>>endobj
+158 0 obj<</Subtype/Link/Rect[153.9 591.4 222.3 604.4]/Border[0 0 0]/A 157 0 R>>endobj
+159 0 obj<</S/URI/URI(http://www.linuxworld.com)>>endobj
+160 0 obj<</Subtype/Link/Rect[443.5 274.6 500.6 287.6]/Border[0 0 0]/A 159 0 R>>endobj
+161 0 obj<</S/URI/URI(http://www.linuxworld.com/linuxworld/lw-1998-10/lw-10-samba.html)>>endobj
+162 0 obj<</Subtype/Link/Rect[72.0 261.4 189.3 274.4]/Border[0 0 0]/A 161 0 R>>endobj
+163 0 obj[156 0 R
158 0 R
160 0 R
162 0 R
-164 0 R
-166 0 R
-168 0 R
-170 0 R
+]endobj
+164 0 obj<</S/URI/URI(UNIX_INSTALL.html)>>endobj
+165 0 obj<</Subtype/Link/Rect[446.0 116.2 547.7 129.2]/Border[0 0 0]/A 164 0 R>>endobj
+166 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
+167 0 obj<</Subtype/Link/Rect[72.0 89.8 173.4 102.8]/Border[0 0 0]/A 166 0 R>>endobj
+168 0 obj[165 0 R
+167 0 R
+]endobj
+169 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
+170 0 obj<</Subtype/Link/Rect[468.3 670.6 549.6 683.6]/Border[0 0 0]/A 169 0 R>>endobj
+171 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
+172 0 obj<</Subtype/Link/Rect[72.0 657.4 92.8 670.4]/Border[0 0 0]/A 171 0 R>>endobj
+173 0 obj<</S/URI/URI(#NETBIOSNAME)>>endobj
+174 0 obj<</Subtype/Link/Rect[93.6 585.0 158.4 596.0]/Border[0 0 0]/A 173 0 R>>endobj
+175 0 obj<</S/URI/URI(#WORKGROUP)>>endobj
+176 0 obj<</Subtype/Link/Rect[93.6 574.2 142.2 585.2]/Border[0 0 0]/A 175 0 R>>endobj
+177 0 obj<</S/URI/URI(#OSLEVEL)>>endobj
+178 0 obj<</Subtype/Link/Rect[93.6 541.8 136.8 552.8]/Border[0 0 0]/A 177 0 R>>endobj
+179 0 obj<</S/URI/URI(#PERFERREDMASTER)>>endobj
+180 0 obj<</Subtype/Link/Rect[93.6 531.0 180.0 542.0]/Border[0 0 0]/A 179 0 R>>endobj
+181 0 obj<</S/URI/URI(#DOMAINMASTER)>>endobj
+182 0 obj<</Subtype/Link/Rect[93.6 520.2 163.8 531.2]/Border[0 0 0]/A 181 0 R>>endobj
+183 0 obj<</S/URI/URI(#LOCALMASTER)>>endobj
+184 0 obj<</Subtype/Link/Rect[93.6 509.4 158.4 520.4]/Border[0 0 0]/A 183 0 R>>endobj
+185 0 obj<</S/URI/URI(#SECURITYEQUALSUSER)>>endobj
+186 0 obj<</Subtype/Link/Rect[93.6 477.0 136.8 488.0]/Border[0 0 0]/A 185 0 R>>endobj
+187 0 obj<</S/URI/URI(#ENCRYPTPASSWORDS)>>endobj
+188 0 obj<</Subtype/Link/Rect[93.6 444.6 185.4 455.6]/Border[0 0 0]/A 187 0 R>>endobj
+189 0 obj<</S/URI/URI(#DOMAINLOGONS)>>endobj
+190 0 obj<</Subtype/Link/Rect[93.6 412.2 163.8 423.2]/Border[0 0 0]/A 189 0 R>>endobj
+191 0 obj<</S/URI/URI(#LOGONPATH)>>endobj
+192 0 obj<</Subtype/Link/Rect[93.6 379.8 147.6 390.8]/Border[0 0 0]/A 191 0 R>>endobj
+193 0 obj<</S/URI/URI(#LOGONDRIVE)>>endobj
+194 0 obj<</Subtype/Link/Rect[93.6 336.6 153.0 347.6]/Border[0 0 0]/A 193 0 R>>endobj
+195 0 obj<</S/URI/URI(#LOGONHOME)>>endobj
+196 0 obj<</Subtype/Link/Rect[93.6 325.8 147.6 336.8]/Border[0 0 0]/A 195 0 R>>endobj
+197 0 obj<</S/URI/URI(#LOGONSCRIPT)>>endobj
+198 0 obj<</Subtype/Link/Rect[93.6 282.6 158.4 293.6]/Border[0 0 0]/A 197 0 R>>endobj
+199 0 obj<</S/URI/URI(#PATH)>>endobj
+200 0 obj<</Subtype/Link/Rect[93.6 239.4 115.2 250.4]/Border[0 0 0]/A 199 0 R>>endobj
+201 0 obj<</S/URI/URI(#WRITEABLE)>>endobj
+202 0 obj<</Subtype/Link/Rect[93.6 228.6 142.2 239.6]/Border[0 0 0]/A 201 0 R>>endobj
+203 0 obj<</S/URI/URI(#WRITELIST)>>endobj
+204 0 obj<</Subtype/Link/Rect[93.6 217.8 147.6 228.8]/Border[0 0 0]/A 203 0 R>>endobj
+205 0 obj<</S/URI/URI(#PATH)>>endobj
+206 0 obj<</Subtype/Link/Rect[93.6 174.6 115.2 185.6]/Border[0 0 0]/A 205 0 R>>endobj
+207 0 obj<</S/URI/URI(#WRITEABLE)>>endobj
+208 0 obj<</Subtype/Link/Rect[93.6 163.8 142.2 174.8]/Border[0 0 0]/A 207 0 R>>endobj
+209 0 obj<</S/URI/URI(#CREATEMASK)>>endobj
+210 0 obj<</Subtype/Link/Rect[93.6 153.0 153.0 164.0]/Border[0 0 0]/A 209 0 R>>endobj
+211 0 obj<</S/URI/URI(#DIRECTORYMASK)>>endobj
+212 0 obj<</Subtype/Link/Rect[93.6 142.2 169.2 153.2]/Border[0 0 0]/A 211 0 R>>endobj
+213 0 obj<</S/URI/URI(ENCRYPTION.html)>>endobj
+214 0 obj<</Subtype/Link/Rect[108.0 65.2 200.6 78.2]/Border[0 0 0]/A 213 0 R>>endobj
+215 0 obj[170 0 R
172 0 R
174 0 R
176 0 R
178 0 R
-]endobj
-180 0 obj<</S/URI/URI(#CREATEMASK)>>endobj
-181 0 obj<</Subtype/Link/Rect[94.6 722.0 154.0 733.0]/Border[0 0 0]/A 180 0 R>>endobj
-182 0 obj<</S/URI/URI(#DIRECTORYMASK)>>endobj
-183 0 obj<</Subtype/Link/Rect[94.6 711.2 170.2 722.2]/Border[0 0 0]/A 182 0 R>>endobj
-184 0 obj<</S/URI/URI(ENCRYPTION.html)>>endobj
-185 0 obj<</Subtype/Link/Rect[108.0 645.4 200.6 658.4]/Border[0 0 0]/A 184 0 R>>endobj
-186 0 obj<</S/URI/URI(#DOMAINADMINUSERS)>>endobj
-187 0 obj<</Subtype/Link/Rect[505.2 553.0 538.2 566.0]/Border[0 0 0]/A 186 0 R>>endobj
-188 0 obj<</S/URI/URI(#DOMAINADMINUSERS)>>endobj
-189 0 obj<</Subtype/Link/Rect[72.0 539.8 124.9 552.8]/Border[0 0 0]/A 188 0 R>>endobj
-190 0 obj<</S/URI/URI(#DOMAINADMINGROUP)>>endobj
-191 0 obj<</Subtype/Link/Rect[146.2 539.8 240.7 552.8]/Border[0 0 0]/A 190 0 R>>endobj
-192 0 obj[181 0 R
-183 0 R
-185 0 R
-187 0 R
-189 0 R
-191 0 R
-]endobj
-193 0 obj<</S/URI/URI(smbpasswd.6.html)>>endobj
-194 0 obj<</Subtype/Link/Rect[72.0 524.2 138.6 537.2]/Border[0 0 0]/A 193 0 R>>endobj
-195 0 obj<</S/URI/URI(#ADDUSERSCRIPT)>>endobj
-196 0 obj<</Subtype/Link/Rect[427.0 269.0 491.2 282.0]/Border[0 0 0]/A 195 0 R>>endobj
-197 0 obj[194 0 R
+180 0 R
+182 0 R
+184 0 R
+186 0 R
+188 0 R
+190 0 R
+192 0 R
+194 0 R
196 0 R
-]endobj
-198 0 obj<</S/URI/URI(http://www.microsoft.com/ntserver/management/deployment/planguide/prof_policies.asp)>>endobj
-199 0 obj<</Subtype/Link/Rect[164.2 441.8 409.3 454.8]/Border[0 0 0]/A 198 0 R>>endobj
-200 0 obj[199 0 R
-]endobj
-201 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE)>>endobj
-202 0 obj<</Subtype/Link/Rect[287.9 523.0 540.0 536.0]/Border[0 0 0]/A 201 0 R>>endobj
-203 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE)>>endobj
-204 0 obj<</Subtype/Link/Rect[236.3 483.4 508.6 496.4]/Border[0 0 0]/A 203 0 R>>endobj
-205 0 obj<</S/URI/URI(http://www.tcpdump.org/)>>endobj
-206 0 obj<</Subtype/Link/Rect[352.1 68.6 458.1 81.6]/Border[0 0 0]/A 205 0 R>>endobj
-207 0 obj[202 0 R
+198 0 R
+200 0 R
+202 0 R
204 0 R
206 0 R
+208 0 R
+210 0 R
+212 0 R
+214 0 R
]endobj
-208 0 obj<</S/URI/URI(http://www.ethereal.com/)>>endobj
-209 0 obj<</Subtype/Link/Rect[435.5 721.0 544.9 734.0]/Border[0 0 0]/A 208 0 R>>endobj
-210 0 obj<</S/URI/URI(http://samba.org)>>endobj
-211 0 obj<</Subtype/Link/Rect[236.3 127.0 310.8 140.0]/Border[0 0 0]/A 210 0 R>>endobj
-212 0 obj<</S/URI/URI(http://www.skippy.net/linux/smb-howto.html)>>endobj
-213 0 obj<</Subtype/Link/Rect[144.0 74.2 346.1 87.2]/Border[0 0 0]/A 212 0 R>>endobj
-214 0 obj[209 0 R
-211 0 R
-213 0 R
+216 0 obj<</S/URI/URI(#DOMAINADMONUSERS)>>endobj
+217 0 obj<</Subtype/Link/Rect[505.2 628.6 538.2 641.6]/Border[0 0 0]/A 216 0 R>>endobj
+218 0 obj<</S/URI/URI(#DOMAINADMONUSERS)>>endobj
+219 0 obj<</Subtype/Link/Rect[72.0 615.4 124.9 628.4]/Border[0 0 0]/A 218 0 R>>endobj
+220 0 obj<</S/URI/URI(#DOMAINADMINGROUP)>>endobj
+221 0 obj<</Subtype/Link/Rect[146.2 615.4 240.7 628.4]/Border[0 0 0]/A 220 0 R>>endobj
+222 0 obj[217 0 R
+219 0 R
+221 0 R
]endobj
-215 0 obj<</S/URI/URI(http://bioserve.latrobe.edu.au/samba)>>endobj
-216 0 obj<</Subtype/Link/Rect[182.5 707.8 345.0 720.8]/Border[0 0 0]/A 215 0 R>>endobj
-217 0 obj<</S/URI/URI(http://samba.org/cifs/)>>endobj
-218 0 obj<</Subtype/Link/Rect[284.9 694.6 381.4 707.6]/Border[0 0 0]/A 217 0 R>>endobj
-219 0 obj<</S/URI/URI(http://mailhost.cb1.com/~lkcl/ntdom/)>>endobj
-220 0 obj<</Subtype/Link/Rect[244.2 681.4 411.2 694.4]/Border[0 0 0]/A 219 0 R>>endobj
-221 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/developr/drg/CIFS/)>>endobj
-222 0 obj<</Subtype/Link/Rect[280.3 668.2 471.9 681.2]/Border[0 0 0]/A 221 0 R>>endobj
-223 0 obj<</S/URI/URI(http://samba.org)>>endobj
-224 0 obj<</Subtype/Link/Rect[361.0 615.4 432.8 628.4]/Border[0 0 0]/A 223 0 R>>endobj
-225 0 obj<</S/URI/URI(http://www.samba-tng.org/)>>endobj
-226 0 obj<</Subtype/Link/Rect[301.1 575.8 425.6 588.8]/Border[0 0 0]/A 225 0 R>>endobj
-227 0 obj<</S/URI/URI(http://lists.samba.org/)>>endobj
-228 0 obj<</Subtype/Link/Rect[135.5 140.2 227.8 153.2]/Border[0 0 0]/A 227 0 R>>endobj
-229 0 obj<</S/URI/URI(http://lists.samba.org/mailman/roster/samba-ntdom)>>endobj
-230 0 obj<</Subtype/Link/Rect[309.0 127.0 330.7 140.0]/Border[0 0 0]/A 229 0 R>>endobj
-231 0 obj[216 0 R
-218 0 R
-220 0 R
-222 0 R
-224 0 R
-226 0 R
-228 0 R
-230 0 R
+223 0 obj<</S/URI/URI(#ADDUSERSCRIPT)>>endobj
+224 0 obj<</Subtype/Link/Rect[304.2 83.2 371.1 96.2]/Border[0 0 0]/A 223 0 R>>endobj
+225 0 obj[224 0 R
]endobj
-232 0 obj<</S/URI/URI(http://carol.wins.uva.nl/~leeuw/samba/warp.html)>>endobj
-233 0 obj<</Subtype/Link/Rect[331.1 607.0 550.0 620.0]/Border[0 0 0]/A 232 0 R>>endobj
-234 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/)>>endobj
-235 0 obj<</Subtype/Link/Rect[72.0 241.4 319.2 254.4]/Border[0 0 0]/A 234 0 R>>endobj
-236 0 obj<</S/URI/URI(http://carol.wins.uva.nl/~leeuw/lanman.html)>>endobj
-237 0 obj<</Subtype/Link/Rect[346.1 241.4 544.2 254.4]/Border[0 0 0]/A 236 0 R>>endobj
-238 0 obj<</S/URI/URI(ftp://ftp.cdrom.com/pub/os2/network/ndis/)>>endobj
-239 0 obj<</Subtype/Link/Rect[175.9 117.8 366.2 130.8]/Border[0 0 0]/A 238 0 R>>endobj
-240 0 obj[233 0 R
-235 0 R
+226 0 obj<</S/URI/URI(http://www.microsoft.com/ntserver/management/deployment/planguide/prof_policies.asp)>>endobj
+227 0 obj<</Subtype/Link/Rect[164.2 657.4 409.3 670.4]/Border[0 0 0]/A 226 0 R>>endobj
+228 0 obj[227 0 R
+]endobj
+229 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE)>>endobj
+230 0 obj<</Subtype/Link/Rect[251.9 694.6 504.0 707.6]/Border[0 0 0]/A 229 0 R>>endobj
+231 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE)>>endobj
+232 0 obj<</Subtype/Link/Rect[176.2 655.0 448.5 668.0]/Border[0 0 0]/A 231 0 R>>endobj
+233 0 obj[230 0 R
+232 0 R
+]endobj
+234 0 obj<</S/URI/URI(http://www.tcpdump.org/)>>endobj
+235 0 obj<</Subtype/Link/Rect[316.1 314.2 422.1 327.2]/Border[0 0 0]/A 234 0 R>>endobj
+236 0 obj<</S/URI/URI(http://www.ethereal.com/)>>endobj
+237 0 obj<</Subtype/Link/Rect[343.3 301.0 452.6 314.0]/Border[0 0 0]/A 236 0 R>>endobj
+238 0 obj[235 0 R
237 0 R
-239 0 R
]endobj
-241 0 obj<</S/URI/URI(http://carol.wins.uva.nl/~leeuw/samba/fix.html)>>endobj
-242 0 obj<</Subtype/Link/Rect[225.7 661.0 434.8 674.0]/Border[0 0 0]/A 241 0 R>>endobj
-243 0 obj[242 0 R
+239 0 obj<</S/URI/URI(http://samba.org)>>endobj
+240 0 obj<</Subtype/Link/Rect[200.3 157.4 274.8 170.4]/Border[0 0 0]/A 239 0 R>>endobj
+241 0 obj<</S/URI/URI(http://www.skippy.net/linux/smb-howto.html)>>endobj
+242 0 obj<</Subtype/Link/Rect[336.8 65.0 541.7 78.0]/Border[0 0 0]/A 241 0 R>>endobj
+243 0 obj[240 0 R
+242 0 R
]endobj
-244 0 obj<</S/URI/URI(http://samba.org/samba/cvs.html)>>endobj
-245 0 obj<</Subtype/Link/Rect[357.1 577.0 500.7 590.0]/Border[0 0 0]/A 244 0 R>>endobj
-246 0 obj<</S/URI/URI(http://samba.org/cgi-bin/cvsweb)>>endobj
-247 0 obj<</Subtype/Link/Rect[138.6 354.6 283.2 367.6]/Border[0 0 0]/A 246 0 R>>endobj
-248 0 obj<</S/URI/URI(http://www.cyclic.com/)>>endobj
-249 0 obj<</Subtype/Link/Rect[394.3 230.2 498.2 243.2]/Border[0 0 0]/A 248 0 R>>endobj
-250 0 obj[245 0 R
+244 0 obj<</S/URI/URI(http://bioserve.latrobe.edu.au/samba)>>endobj
+245 0 obj<</Subtype/Link/Rect[108.0 707.8 267.8 720.8]/Border[0 0 0]/A 244 0 R>>endobj
+246 0 obj<</S/URI/URI(http://samba.org/cifs/)>>endobj
+247 0 obj<</Subtype/Link/Rect[248.9 668.2 345.4 681.2]/Border[0 0 0]/A 246 0 R>>endobj
+248 0 obj<</S/URI/URI(http://mailhost.cb1.com/~lkcl/ntdom/)>>endobj
+249 0 obj<</Subtype/Link/Rect[208.2 628.6 375.2 641.6]/Border[0 0 0]/A 248 0 R>>endobj
+250 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/developr/drg/CIFS/)>>endobj
+251 0 obj<</Subtype/Link/Rect[244.3 589.0 435.9 602.0]/Border[0 0 0]/A 250 0 R>>endobj
+252 0 obj<</S/URI/URI(http://samba.org)>>endobj
+253 0 obj<</Subtype/Link/Rect[325.0 487.4 396.8 500.4]/Border[0 0 0]/A 252 0 R>>endobj
+254 0 obj<</S/URI/URI(http://www.samba-tng.org/)>>endobj
+255 0 obj<</Subtype/Link/Rect[265.1 447.8 386.8 460.8]/Border[0 0 0]/A 254 0 R>>endobj
+256 0 obj[245 0 R
247 0 R
249 0 R
-]endobj
-251 0 obj<</Subtype/Link/Rect[72.0 684.0 277.3 697.0]/Border[0 0 0]/Dest[501 0 R/XYZ null 798 0]>>endobj
-252 0 obj<</Subtype/Link/Rect[108.0 670.8 249.2 683.8]/Border[0 0 0]/Dest[501 0 R/XYZ null 730 0]>>endobj
-253 0 obj<</Subtype/Link/Rect[108.0 657.6 255.0 670.6]/Border[0 0 0]/Dest[501 0 R/XYZ null 593 0]>>endobj
-254 0 obj<</Subtype/Link/Rect[108.0 644.4 257.7 657.4]/Border[0 0 0]/Dest[501 0 R/XYZ null 178 0]>>endobj
-255 0 obj<</Subtype/Link/Rect[108.0 631.2 309.0 644.2]/Border[0 0 0]/Dest[504 0 R/XYZ null 739 0]>>endobj
-256 0 obj<</Subtype/Link/Rect[108.0 618.0 316.7 631.0]/Border[0 0 0]/Dest[504 0 R/XYZ null 379 0]>>endobj
-257 0 obj<</Subtype/Link/Rect[108.0 604.8 284.9 617.8]/Border[0 0 0]/Dest[504 0 R/XYZ null 268 0]>>endobj
-258 0 obj<</Subtype/Link/Rect[108.0 591.6 280.0 604.6]/Border[0 0 0]/Dest[507 0 R/XYZ null 768 0]>>endobj
-259 0 obj<</Subtype/Link/Rect[108.0 578.4 328.6 591.4]/Border[0 0 0]/Dest[507 0 R/XYZ null 266 0]>>endobj
-260 0 obj<</Subtype/Link/Rect[108.0 565.2 364.9 578.2]/Border[0 0 0]/Dest[510 0 R/XYZ null 686 0]>>endobj
-261 0 obj<</Subtype/Link/Rect[108.0 552.0 315.8 565.0]/Border[0 0 0]/Dest[510 0 R/XYZ null 509 0]>>endobj
-262 0 obj<</Subtype/Link/Rect[108.0 538.8 514.3 551.8]/Border[0 0 0]/Dest[510 0 R/XYZ null 332 0]>>endobj
-263 0 obj<</Subtype/Link/Rect[108.0 525.6 259.4 538.6]/Border[0 0 0]/Dest[513 0 R/XYZ null 768 0]>>endobj
-264 0 obj<</Subtype/Link/Rect[108.0 512.4 236.0 525.4]/Border[0 0 0]/Dest[513 0 R/XYZ null 577 0]>>endobj
-265 0 obj<</Subtype/Link/Rect[108.0 499.2 186.5 512.2]/Border[0 0 0]/Dest[513 0 R/XYZ null 505 0]>>endobj
-266 0 obj<</Subtype/Link/Rect[108.0 486.0 267.2 499.0]/Border[0 0 0]/Dest[513 0 R/XYZ null 394 0]>>endobj
-267 0 obj<</Subtype/Link/Rect[108.0 472.8 295.6 485.8]/Border[0 0 0]/Dest[516 0 R/XYZ null 739 0]>>endobj
-268 0 obj<</Subtype/Link/Rect[108.0 459.6 177.7 472.6]/Border[0 0 0]/Dest[516 0 R/XYZ null 615 0]>>endobj
-269 0 obj<</Subtype/Link/Rect[108.0 446.4 232.3 459.4]/Border[0 0 0]/Dest[519 0 R/XYZ null 768 0]>>endobj
-270 0 obj<</Subtype/Link/Rect[108.0 433.2 232.6 446.2]/Border[0 0 0]/Dest[519 0 R/XYZ null 683 0]>>endobj
-271 0 obj<</Subtype/Link/Rect[72.0 406.8 348.8 419.8]/Border[0 0 0]/Dest[522 0 R/XYZ null 798 0]>>endobj
-272 0 obj<</Subtype/Link/Rect[108.0 393.6 161.5 406.6]/Border[0 0 0]/Dest[522 0 R/XYZ null 706 0]>>endobj
-273 0 obj<</Subtype/Link/Rect[108.0 380.4 327.7 393.4]/Border[0 0 0]/Dest[522 0 R/XYZ null 463 0]>>endobj
-274 0 obj<</Subtype/Link/Rect[108.0 367.2 177.1 380.2]/Border[0 0 0]/Dest[522 0 R/XYZ null 325 0]>>endobj
-275 0 obj<</Subtype/Link/Rect[108.0 354.0 203.6 367.0]/Border[0 0 0]/Dest[525 0 R/XYZ null 435 0]>>endobj
-276 0 obj<</Subtype/Link/Rect[108.0 340.8 195.1 353.8]/Border[0 0 0]/Dest[525 0 R/XYZ null 285 0]>>endobj
-277 0 obj<</Subtype/Link/Rect[108.0 327.6 215.2 340.6]/Border[0 0 0]/Dest[528 0 R/XYZ null 768 0]>>endobj
-278 0 obj<</Subtype/Link/Rect[108.0 314.4 382.4 327.4]/Border[0 0 0]/Dest[528 0 R/XYZ null 268 0]>>endobj
-279 0 obj<</Subtype/Link/Rect[108.0 301.2 255.6 314.2]/Border[0 0 0]/Dest[531 0 R/XYZ null 210 0]>>endobj
-280 0 obj<</Subtype/Link/Rect[108.0 288.0 224.1 301.0]/Border[0 0 0]/Dest[534 0 R/XYZ null 660 0]>>endobj
-281 0 obj<</Subtype/Link/Rect[108.0 274.8 187.8 287.8]/Border[0 0 0]/Dest[537 0 R/XYZ null 371 0]>>endobj
-282 0 obj<</Subtype/Link/Rect[108.0 261.6 194.5 274.6]/Border[0 0 0]/Dest[537 0 R/XYZ null 260 0]>>endobj
-283 0 obj<</Subtype/Link/Rect[108.0 248.4 200.6 261.4]/Border[0 0 0]/Dest[540 0 R/XYZ null 768 0]>>endobj
-284 0 obj<</Subtype/Link/Rect[108.0 235.2 526.0 248.2]/Border[0 0 0]/Dest[540 0 R/XYZ null 529 0]>>endobj
-285 0 obj<</Subtype/Link/Rect[108.0 222.0 500.6 235.0]/Border[0 0 0]/Dest[543 0 R/XYZ null 633 0]>>endobj
-286 0 obj<</Subtype/Link/Rect[108.0 208.8 353.3 221.8]/Border[0 0 0]/Dest[546 0 R/XYZ null 581 0]>>endobj
-287 0 obj<</Subtype/Link/Rect[108.0 195.6 419.0 208.6]/Border[0 0 0]/Dest[546 0 R/XYZ null 304 0]>>endobj
-288 0 obj<</Subtype/Link/Rect[108.0 182.4 332.5 195.4]/Border[0 0 0]/Dest[549 0 R/XYZ null 594 0]>>endobj
-289 0 obj<</Subtype/Link/Rect[108.0 169.2 181.6 182.2]/Border[0 0 0]/Dest[552 0 R/XYZ null 639 0]>>endobj
-290 0 obj<</Subtype/Link/Rect[72.0 142.8 463.4 155.8]/Border[0 0 0]/Dest[555 0 R/XYZ null 798 0]>>endobj
-291 0 obj<</Subtype/Link/Rect[108.0 129.6 202.4 142.6]/Border[0 0 0]/Dest[555 0 R/XYZ null 706 0]>>endobj
-292 0 obj<</Subtype/Link/Rect[108.0 116.4 244.9 129.4]/Border[0 0 0]/Dest[558 0 R/XYZ null 192 0]>>endobj
-293 0 obj<</Subtype/Link/Rect[108.0 103.2 270.3 116.2]/Border[0 0 0]/Dest[561 0 R/XYZ null 739 0]>>endobj
-294 0 obj<</Subtype/Link/Rect[72.0 76.8 402.3 89.8]/Border[0 0 0]/Dest[564 0 R/XYZ null 798 0]>>endobj
-295 0 obj<</Subtype/Link/Rect[108.0 63.6 179.2 76.6]/Border[0 0 0]/Dest[564 0 R/XYZ null 706 0]>>endobj
-296 0 obj[251 0 R
-252 0 R
+251 0 R
253 0 R
-254 0 R
255 0 R
-256 0 R
-257 0 R
-258 0 R
-259 0 R
+]endobj
+257 0 obj<</S/URI/URI(http://lists.samba.org/)>>endobj
+258 0 obj<</Subtype/Link/Rect[72.0 470.2 164.3 483.2]/Border[0 0 0]/A 257 0 R>>endobj
+259 0 obj<</S/URI/URI(http://lists.samba.org/mailman/roster/samba-ntdom)>>endobj
+260 0 obj<</Subtype/Link/Rect[237.9 457.0 259.6 470.0]/Border[0 0 0]/A 259 0 R>>endobj
+261 0 obj[258 0 R
260 0 R
-261 0 R
-262 0 R
-263 0 R
-264 0 R
-265 0 R
-266 0 R
-267 0 R
+]endobj
+262 0 obj<</S/URI/URI(#NTACLSUPPOR)>>endobj
+263 0 obj<</Subtype/Link/Rect[342.7 580.6 441.7 593.6]/Border[0 0 0]/A 262 0 R>>endobj
+264 0 obj[263 0 R
+]endobj
+265 0 obj<</S/URI/URI(#SECURITYMASK)>>endobj
+266 0 obj<</Subtype/Link/Rect[88.2 501.4 180.6 514.4]/Border[0 0 0]/A 265 0 R>>endobj
+267 0 obj<</S/URI/URI(#CREATEMASK)>>endobj
+268 0 obj<</Subtype/Link/Rect[358.9 422.2 438.1 435.2]/Border[0 0 0]/A 267 0 R>>endobj
+269 0 obj<</S/URI/URI(#FORCESECURITYMODE)>>endobj
+270 0 obj<</Subtype/Link/Rect[427.0 369.4 526.0 382.4]/Border[0 0 0]/A 269 0 R>>endobj
+271 0 obj<</S/URI/URI(#FORCESECURITYMODE)>>endobj
+272 0 obj<</Subtype/Link/Rect[72.0 356.2 98.4 369.2]/Border[0 0 0]/A 271 0 R>>endobj
+273 0 obj<</S/URI/URI(#FORCECREATEMODE)>>endobj
+274 0 obj<</Subtype/Link/Rect[358.9 277.0 477.7 290.0]/Border[0 0 0]/A 273 0 R>>endobj
+275 0 obj[266 0 R
268 0 R
-269 0 R
270 0 R
-271 0 R
272 0 R
-273 0 R
274 0 R
-275 0 R
-276 0 R
-277 0 R
-278 0 R
-279 0 R
-280 0 R
-281 0 R
+]endobj
+276 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj
+277 0 obj<</Subtype/Link/Rect[72.0 655.0 151.2 668.0]/Border[0 0 0]/A 276 0 R>>endobj
+278 0 obj[277 0 R
+]endobj
+279 0 obj<</S/URI/URI(http://carol.wins.uva.nl/~leeuw/samba/warp.html)>>endobj
+280 0 obj<</Subtype/Link/Rect[331.1 629.8 550.0 642.8]/Border[0 0 0]/A 279 0 R>>endobj
+281 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/)>>endobj
+282 0 obj<</Subtype/Link/Rect[72.0 191.0 319.2 204.0]/Border[0 0 0]/A 281 0 R>>endobj
+283 0 obj<</S/URI/URI(http://carol.wins.uva.nl/~leeuw/lanman.html)>>endobj
+284 0 obj<</Subtype/Link/Rect[346.1 191.0 544.2 204.0]/Border[0 0 0]/A 283 0 R>>endobj
+285 0 obj<</S/URI/URI(ftp://ftp.cdrom.com/pub/os2/network/ndis/)>>endobj
+286 0 obj<</Subtype/Link/Rect[175.9 70.4 366.2 83.4]/Border[0 0 0]/A 285 0 R>>endobj
+287 0 obj[280 0 R
282 0 R
-283 0 R
284 0 R
-285 0 R
286 0 R
-287 0 R
-288 0 R
-289 0 R
-290 0 R
-291 0 R
+]endobj
+288 0 obj<</S/URI/URI(http://carol.wins.uva.nl/~leeuw/samba/fix.html)>>endobj
+289 0 obj<</Subtype/Link/Rect[225.7 625.4 434.8 638.4]/Border[0 0 0]/A 288 0 R>>endobj
+290 0 obj[289 0 R
+]endobj
+291 0 obj<</Subtype/Link/Rect[72.0 684.0 223.5 697.0]/Border[0 0 0]/Dest[480 0 R/XYZ null 798 0]>>endobj
+292 0 obj<</Subtype/Link/Rect[108.0 670.8 174.9 683.8]/Border[0 0 0]/Dest[480 0 R/XYZ null 730 0]>>endobj
+293 0 obj<</Subtype/Link/Rect[72.0 644.4 277.3 657.4]/Border[0 0 0]/Dest[486 0 R/XYZ null 798 0]>>endobj
+294 0 obj<</Subtype/Link/Rect[72.0 618.0 201.9 631.0]/Border[0 0 0]/Dest[489 0 R/XYZ null 798 0]>>endobj
+295 0 obj<</Subtype/Link/Rect[72.0 591.6 207.1 604.6]/Border[0 0 0]/Dest[492 0 R/XYZ null 798 0]>>endobj
+296 0 obj<</Subtype/Link/Rect[72.0 565.2 212.2 578.2]/Border[0 0 0]/Dest[495 0 R/XYZ null 798 0]>>endobj
+297 0 obj<</Subtype/Link/Rect[72.0 538.8 265.4 551.8]/Border[0 0 0]/Dest[498 0 R/XYZ null 798 0]>>endobj
+298 0 obj<</Subtype/Link/Rect[72.0 512.4 272.4 525.4]/Border[0 0 0]/Dest[501 0 R/XYZ null 798 0]>>endobj
+299 0 obj<</Subtype/Link/Rect[72.0 486.0 242.5 499.0]/Border[0 0 0]/Dest[504 0 R/XYZ null 798 0]>>endobj
+300 0 obj<</Subtype/Link/Rect[108.0 472.8 252.5 485.8]/Border[0 0 0]/Dest[504 0 R/XYZ null 611 0]>>endobj
+301 0 obj<</Subtype/Link/Rect[108.0 459.6 301.1 472.6]/Border[0 0 0]/Dest[507 0 R/XYZ null 783 0]>>endobj
+302 0 obj<</Subtype/Link/Rect[72.0 433.2 325.6 446.2]/Border[0 0 0]/Dest[510 0 R/XYZ null 798 0]>>endobj
+303 0 obj<</Subtype/Link/Rect[72.0 406.8 271.5 419.8]/Border[0 0 0]/Dest[513 0 R/XYZ null 798 0]>>endobj
+304 0 obj<</Subtype/Link/Rect[72.0 380.4 476.9 393.4]/Border[0 0 0]/Dest[516 0 R/XYZ null 798 0]>>endobj
+305 0 obj<</Subtype/Link/Rect[72.0 354.0 208.9 367.0]/Border[0 0 0]/Dest[519 0 R/XYZ null 798 0]>>endobj
+306 0 obj<</Subtype/Link/Rect[108.0 340.8 203.0 353.8]/Border[0 0 0]/Dest[519 0 R/XYZ null 585 0]>>endobj
+307 0 obj<</Subtype/Link/Rect[108.0 327.6 153.5 340.6]/Border[0 0 0]/Dest[519 0 R/XYZ null 510 0]>>endobj
+308 0 obj<</Subtype/Link/Rect[108.0 314.4 234.2 327.4]/Border[0 0 0]/Dest[519 0 R/XYZ null 395 0]>>endobj
+309 0 obj<</Subtype/Link/Rect[108.0 301.2 262.6 314.2]/Border[0 0 0]/Dest[522 0 R/XYZ null 741 0]>>endobj
+310 0 obj<</Subtype/Link/Rect[108.0 288.0 144.7 301.0]/Border[0 0 0]/Dest[522 0 R/XYZ null 613 0]>>endobj
+311 0 obj<</Subtype/Link/Rect[108.0 274.8 199.3 287.8]/Border[0 0 0]/Dest[525 0 R/XYZ null 783 0]>>endobj
+312 0 obj<</Subtype/Link/Rect[108.0 261.6 199.6 274.6]/Border[0 0 0]/Dest[525 0 R/XYZ null 694 0]>>endobj
+313 0 obj<</Subtype/Link/Rect[72.0 235.2 371.8 248.2]/Border[0 0 0]/Dest[528 0 R/XYZ null 798 0]>>endobj
+314 0 obj<</Subtype/Link/Rect[72.0 208.8 131.9 221.8]/Border[0 0 0]/Dest[531 0 R/XYZ null 798 0]>>endobj
+315 0 obj<</Subtype/Link/Rect[72.0 182.4 159.7 195.4]/Border[0 0 0]/Dest[534 0 R/XYZ null 798 0]>>endobj
+316 0 obj<</Subtype/Link/Rect[72.0 156.0 223.8 169.0]/Border[0 0 0]/Dest[537 0 R/XYZ null 798 0]>>endobj
+317 0 obj<</Subtype/Link/Rect[108.0 142.8 249.5 155.8]/Border[0 0 0]/Dest[537 0 R/XYZ null 203 0]>>endobj
+318 0 obj<</Subtype/Link/Rect[108.0 129.6 289.2 142.6]/Border[0 0 0]/Dest[540 0 R/XYZ null 701 0]>>endobj
+319 0 obj<</Subtype/Link/Rect[72.0 103.2 164.3 116.2]/Border[0 0 0]/Dest[543 0 R/XYZ null 798 0]>>endobj
+320 0 obj<</Subtype/Link/Rect[72.0 76.8 199.1 89.8]/Border[0 0 0]/Dest[549 0 R/XYZ null 798 0]>>endobj
+321 0 obj[291 0 R
292 0 R
293 0 R
294 0 R
295 0 R
-]endobj
-297 0 obj<</Subtype/Link/Rect[108.0 684.0 161.2 697.0]/Border[0 0 0]/Dest[567 0 R/XYZ null 673 0]>>endobj
-298 0 obj<</Subtype/Link/Rect[72.0 657.6 412.7 670.6]/Border[0 0 0]/Dest[570 0 R/XYZ null 798 0]>>endobj
-299 0 obj<</Subtype/Link/Rect[108.0 644.4 447.4 657.4]/Border[0 0 0]/Dest[570 0 R/XYZ null 706 0]>>endobj
-300 0 obj<</Subtype/Link/Rect[108.0 631.2 319.1 644.2]/Border[0 0 0]/Dest[570 0 R/XYZ null 525 0]>>endobj
-301 0 obj<</Subtype/Link/Rect[108.0 618.0 231.1 631.0]/Border[0 0 0]/Dest[570 0 R/XYZ null 348 0]>>endobj
-302 0 obj<</Subtype/Link/Rect[108.0 604.8 292.2 617.8]/Border[0 0 0]/Dest[573 0 R/XYZ null 686 0]>>endobj
-303 0 obj<</Subtype/Link/Rect[108.0 591.6 208.5 604.6]/Border[0 0 0]/Dest[573 0 R/XYZ null 443 0]>>endobj
-304 0 obj<</Subtype/Link/Rect[108.0 578.4 233.6 591.4]/Border[0 0 0]/Dest[573 0 R/XYZ null 187 0]>>endobj
-305 0 obj<</Subtype/Link/Rect[108.0 565.2 301.4 578.2]/Border[0 0 0]/Dest[576 0 R/XYZ null 673 0]>>endobj
-306 0 obj<</Subtype/Link/Rect[108.0 552.0 394.8 565.0]/Border[0 0 0]/Dest[576 0 R/XYZ null 232 0]>>endobj
-307 0 obj<</Subtype/Link/Rect[108.0 538.8 386.9 551.8]/Border[0 0 0]/Dest[582 0 R/XYZ null 594 0]>>endobj
-308 0 obj<</Subtype/Link/Rect[72.0 512.4 277.1 525.4]/Border[0 0 0]/Dest[585 0 R/XYZ null 798 0]>>endobj
-309 0 obj<</Subtype/Link/Rect[108.0 499.2 181.6 512.2]/Border[0 0 0]/Dest[585 0 R/XYZ null 730 0]>>endobj
-310 0 obj<</Subtype/Link/Rect[108.0 486.0 189.0 499.0]/Border[0 0 0]/Dest[585 0 R/XYZ null 302 0]>>endobj
-311 0 obj<</Subtype/Link/Rect[108.0 472.8 209.7 485.8]/Border[0 0 0]/Dest[588 0 R/XYZ null 693 0]>>endobj
-312 0 obj<</Subtype/Link/Rect[108.0 459.6 294.4 472.6]/Border[0 0 0]/Dest[591 0 R/XYZ null 463 0]>>endobj
-313 0 obj<</Subtype/Link/Rect[108.0 446.4 287.3 459.4]/Border[0 0 0]/Dest[594 0 R/XYZ null 686 0]>>endobj
-314 0 obj<</Subtype/Link/Rect[108.0 433.2 350.9 446.2]/Border[0 0 0]/Dest[594 0 R/XYZ null 302 0]>>endobj
-315 0 obj<</Subtype/Link/Rect[108.0 420.0 242.1 433.0]/Border[0 0 0]/Dest[597 0 R/XYZ null 686 0]>>endobj
-316 0 obj<</Subtype/Link/Rect[108.0 406.8 220.1 419.8]/Border[0 0 0]/Dest[597 0 R/XYZ null 496 0]>>endobj
-317 0 obj<</Subtype/Link/Rect[108.0 393.6 214.3 406.6]/Border[0 0 0]/Dest[597 0 R/XYZ null 385 0]>>endobj
-318 0 obj<</Subtype/Link/Rect[108.0 380.4 281.2 393.4]/Border[0 0 0]/Dest[597 0 R/XYZ null 247 0]>>endobj
-319 0 obj<</Subtype/Link/Rect[108.0 367.2 222.3 380.2]/Border[0 0 0]/Dest[597 0 R/XYZ null 149 0]>>endobj
-320 0 obj<</Subtype/Link/Rect[108.0 354.0 234.5 367.0]/Border[0 0 0]/Dest[600 0 R/XYZ null 713 0]>>endobj
-321 0 obj<</Subtype/Link/Rect[108.0 340.8 300.2 353.8]/Border[0 0 0]/Dest[603 0 R/XYZ null 768 0]>>endobj
-322 0 obj<</Subtype/Link/Rect[72.0 314.4 272.9 327.4]/Border[0 0 0]/Dest[609 0 R/XYZ null 798 0]>>endobj
-323 0 obj<</Subtype/Link/Rect[108.0 301.2 299.9 314.2]/Border[0 0 0]/Dest[609 0 R/XYZ null 730 0]>>endobj
-324 0 obj<</Subtype/Link/Rect[108.0 288.0 288.0 301.0]/Border[0 0 0]/Dest[612 0 R/XYZ null 356 0]>>endobj
-325 0 obj<</Subtype/Link/Rect[108.0 274.8 307.9 287.8]/Border[0 0 0]/Dest[615 0 R/XYZ null 768 0]>>endobj
-326 0 obj<</Subtype/Link/Rect[72.0 248.4 416.3 261.4]/Border[0 0 0]/Dest[618 0 R/XYZ null 798 0]>>endobj
-327 0 obj<</Subtype/Link/Rect[108.0 235.2 219.2 248.2]/Border[0 0 0]/Dest[618 0 R/XYZ null 706 0]>>endobj
-328 0 obj<</Subtype/Link/Rect[108.0 222.0 181.0 235.0]/Border[0 0 0]/Dest[618 0 R/XYZ null 608 0]>>endobj
-329 0 obj<</Subtype/Link/Rect[108.0 208.8 316.1 221.8]/Border[0 0 0]/Dest[621 0 R/XYZ null 660 0]>>endobj
-330 0 obj<</Subtype/Link/Rect[108.0 195.6 432.8 208.6]/Border[0 0 0]/Dest[624 0 R/XYZ null 531 0]>>endobj
-331 0 obj<</Subtype/Link/Rect[108.0 182.4 319.4 195.4]/Border[0 0 0]/Dest[624 0 R/XYZ null 196 0]>>endobj
-332 0 obj<</Subtype/Link/Rect[108.0 169.2 330.8 182.2]/Border[0 0 0]/Dest[627 0 R/XYZ null 359 0]>>endobj
-333 0 obj<</Subtype/Link/Rect[108.0 156.0 261.4 169.0]/Border[0 0 0]/Dest[627 0 R/XYZ null 183 0]>>endobj
-334 0 obj<</Subtype/Link/Rect[108.0 142.8 252.8 155.8]/Border[0 0 0]/Dest[633 0 R/XYZ null 545 0]>>endobj
-335 0 obj<</Subtype/Link/Rect[108.0 129.6 246.4 142.6]/Border[0 0 0]/Dest[636 0 R/XYZ null 488 0]>>endobj
-336 0 obj<</Subtype/Link/Rect[108.0 116.4 292.9 129.4]/Border[0 0 0]/Dest[645 0 R/XYZ null 768 0]>>endobj
-337 0 obj<</Subtype/Link/Rect[108.0 103.2 332.0 116.2]/Border[0 0 0]/Dest[648 0 R/XYZ null 435 0]>>endobj
-338 0 obj<</Subtype/Link/Rect[108.0 90.0 406.2 103.0]/Border[0 0 0]/Dest[651 0 R/XYZ null 189 0]>>endobj
-339 0 obj<</Subtype/Link/Rect[108.0 76.8 431.0 89.8]/Border[0 0 0]/Dest[666 0 R/XYZ null 686 0]>>endobj
-340 0 obj[297 0 R
+296 0 R
+297 0 R
298 0 R
299 0 R
300 0 R
@@ -513,8 +518,36 @@
318 0 R
319 0 R
320 0 R
-321 0 R
-322 0 R
+]endobj
+322 0 obj<</Subtype/Link/Rect[72.0 684.0 326.9 697.0]/Border[0 0 0]/Dest[552 0 R/XYZ null 798 0]>>endobj
+323 0 obj<</Subtype/Link/Rect[72.0 657.6 402.3 670.6]/Border[0 0 0]/Dest[555 0 R/XYZ null 798 0]>>endobj
+324 0 obj<</Subtype/Link/Rect[72.0 631.2 128.8 644.2]/Border[0 0 0]/Dest[558 0 R/XYZ null 798 0]>>endobj
+325 0 obj<</Subtype/Link/Rect[108.0 618.0 133.7 631.0]/Border[0 0 0]/Dest[561 0 R/XYZ null 754 0]>>endobj
+326 0 obj<</Subtype/Link/Rect[72.0 591.6 277.1 604.6]/Border[0 0 0]/Dest[564 0 R/XYZ null 798 0]>>endobj
+327 0 obj<</Subtype/Link/Rect[72.0 565.2 131.9 578.2]/Border[0 0 0]/Dest[567 0 R/XYZ null 798 0]>>endobj
+328 0 obj<</Subtype/Link/Rect[72.0 538.8 138.6 551.8]/Border[0 0 0]/Dest[570 0 R/XYZ null 798 0]>>endobj
+329 0 obj<</Subtype/Link/Rect[108.0 525.6 259.8 538.6]/Border[0 0 0]/Dest[576 0 R/XYZ null 741 0]>>endobj
+330 0 obj<</Subtype/Link/Rect[72.0 499.2 171.6 512.2]/Border[0 0 0]/Dest[579 0 R/XYZ null 798 0]>>endobj
+331 0 obj<</Subtype/Link/Rect[108.0 486.0 186.8 499.0]/Border[0 0 0]/Dest[579 0 R/XYZ null 664 0]>>endobj
+332 0 obj<</Subtype/Link/Rect[108.0 472.8 253.7 485.8]/Border[0 0 0]/Dest[579 0 R/XYZ null 457 0]>>endobj
+333 0 obj<</Subtype/Link/Rect[108.0 459.6 194.8 472.6]/Border[0 0 0]/Dest[579 0 R/XYZ null 355 0]>>endobj
+334 0 obj<</Subtype/Link/Rect[108.0 446.4 207.0 459.4]/Border[0 0 0]/Dest[579 0 R/XYZ null 240 0]>>endobj
+335 0 obj<</Subtype/Link/Rect[72.0 420.0 256.8 433.0]/Border[0 0 0]/Dest[585 0 R/XYZ null 798 0]>>endobj
+336 0 obj<</Subtype/Link/Rect[72.0 393.6 272.9 406.6]/Border[0 0 0]/Dest[588 0 R/XYZ null 798 0]>>endobj
+337 0 obj<</Subtype/Link/Rect[72.0 367.2 254.4 380.2]/Border[0 0 0]/Dest[591 0 R/XYZ null 798 0]>>endobj
+338 0 obj<</Subtype/Link/Rect[72.0 340.8 240.7 353.8]/Border[0 0 0]/Dest[597 0 R/XYZ null 798 0]>>endobj
+339 0 obj<</Subtype/Link/Rect[72.0 314.4 266.2 327.4]/Border[0 0 0]/Dest[600 0 R/XYZ null 798 0]>>endobj
+340 0 obj<</Subtype/Link/Rect[72.0 288.0 424.6 301.0]/Border[0 0 0]/Dest[603 0 R/XYZ null 798 0]>>endobj
+341 0 obj<</Subtype/Link/Rect[72.0 261.6 130.1 274.6]/Border[0 0 0]/Dest[606 0 R/XYZ null 798 0]>>endobj
+342 0 obj<</Subtype/Link/Rect[72.0 235.2 274.3 248.2]/Border[0 0 0]/Dest[612 0 R/XYZ null 798 0]>>endobj
+343 0 obj<</Subtype/Link/Rect[72.0 208.8 398.3 221.8]/Border[0 0 0]/Dest[618 0 R/XYZ null 798 0]>>endobj
+344 0 obj<</Subtype/Link/Rect[72.0 182.4 217.7 195.4]/Border[0 0 0]/Dest[624 0 R/XYZ null 798 0]>>endobj
+345 0 obj<</Subtype/Link/Rect[72.0 156.0 203.1 169.0]/Border[0 0 0]/Dest[630 0 R/XYZ null 798 0]>>endobj
+346 0 obj<</Subtype/Link/Rect[72.0 129.6 200.3 142.6]/Border[0 0 0]/Dest[636 0 R/XYZ null 798 0]>>endobj
+347 0 obj<</Subtype/Link/Rect[108.0 116.4 186.2 129.4]/Border[0 0 0]/Dest[639 0 R/XYZ null 266 0]>>endobj
+348 0 obj<</Subtype/Link/Rect[108.0 103.2 167.0 116.2]/Border[0 0 0]/Dest[642 0 R/XYZ null 609 0]>>endobj
+349 0 obj<</Subtype/Link/Rect[72.0 76.8 393.4 89.8]/Border[0 0 0]/Dest[648 0 R/XYZ null 798 0]>>endobj
+350 0 obj[322 0 R
323 0 R
324 0 R
325 0 R
@@ -532,33 +565,8 @@
337 0 R
338 0 R
339 0 R
-]endobj
-341 0 obj<</Subtype/Link/Rect[72.0 684.0 426.2 697.0]/Border[0 0 0]/Dest[672 0 R/XYZ null 798 0]>>endobj
-342 0 obj<</Subtype/Link/Rect[108.0 670.8 164.5 683.8]/Border[0 0 0]/Dest[672 0 R/XYZ null 706 0]>>endobj
-343 0 obj<</Subtype/Link/Rect[108.0 657.6 181.6 670.6]/Border[0 0 0]/Dest[672 0 R/XYZ null 569 0]>>endobj
-344 0 obj<</Subtype/Link/Rect[108.0 644.4 233.6 657.4]/Border[0 0 0]/Dest[672 0 R/XYZ null 246 0]>>endobj
-345 0 obj<</Subtype/Link/Rect[108.0 631.2 188.3 644.2]/Border[0 0 0]/Dest[675 0 R/XYZ null 581 0]>>endobj
-346 0 obj<</Subtype/Link/Rect[108.0 618.0 222.0 631.0]/Border[0 0 0]/Dest[675 0 R/XYZ null 417 0]>>endobj
-347 0 obj<</Subtype/Link/Rect[108.0 604.8 288.6 617.8]/Border[0 0 0]/Dest[675 0 R/XYZ null 292 0]>>endobj
-348 0 obj<</Subtype/Link/Rect[108.0 591.6 230.8 604.6]/Border[0 0 0]/Dest[678 0 R/XYZ null 768 0]>>endobj
-349 0 obj<</Subtype/Link/Rect[108.0 578.4 288.9 591.4]/Border[0 0 0]/Dest[678 0 R/XYZ null 326 0]>>endobj
-350 0 obj<</Subtype/Link/Rect[108.0 565.2 269.3 578.2]/Border[0 0 0]/Dest[681 0 R/XYZ null 686 0]>>endobj
-351 0 obj<</Subtype/Link/Rect[108.0 552.0 203.0 565.0]/Border[0 0 0]/Dest[681 0 R/XYZ null 496 0]>>endobj
-352 0 obj<</Subtype/Link/Rect[108.0 538.8 259.9 551.8]/Border[0 0 0]/Dest[681 0 R/XYZ null 345 0]>>endobj
-353 0 obj<</Subtype/Link/Rect[108.0 525.6 178.0 538.6]/Border[0 0 0]/Dest[681 0 R/XYZ null 155 0]>>endobj
-354 0 obj<</Subtype/Link/Rect[108.0 512.4 177.4 525.4]/Border[0 0 0]/Dest[684 0 R/XYZ null 581 0]>>endobj
-355 0 obj<</Subtype/Link/Rect[72.0 486.0 228.8 499.0]/Border[0 0 0]/Dest[687 0 R/XYZ null 798 0]>>endobj
-356 0 obj<</Subtype/Link/Rect[108.0 472.8 159.0 485.8]/Border[0 0 0]/Dest[687 0 R/XYZ null 730 0]>>endobj
-357 0 obj<</Subtype/Link/Rect[108.0 459.6 499.0 472.6]/Border[0 0 0]/Dest[687 0 R/XYZ null 700 0]>>endobj
-358 0 obj<</Subtype/Link/Rect[108.0 446.4 504.2 459.4]/Border[0 0 0]/Dest[687 0 R/XYZ null 348 0]>>endobj
-359 0 obj<</Subtype/Link/Rect[108.0 433.2 455.7 446.2]/Border[0 0 0]/Dest[690 0 R/XYZ null 768 0]>>endobj
-360 0 obj<</Subtype/Link/Rect[108.0 420.0 425.4 433.0]/Border[0 0 0]/Dest[690 0 R/XYZ null 639 0]>>endobj
-361 0 obj<</Subtype/Link/Rect[72.0 393.6 342.4 406.6]/Border[0 0 0]/Dest[693 0 R/XYZ null 798 0]>>endobj
-362 0 obj<</Subtype/Link/Rect[108.0 380.4 187.1 393.4]/Border[0 0 0]/Dest[693 0 R/XYZ null 706 0]>>endobj
-363 0 obj<</Subtype/Link/Rect[108.0 367.2 247.6 380.2]/Border[0 0 0]/Dest[693 0 R/XYZ null 582 0]>>endobj
-364 0 obj<</Subtype/Link/Rect[108.0 354.0 230.8 367.0]/Border[0 0 0]/Dest[693 0 R/XYZ null 484 0]>>endobj
-365 0 obj<</Subtype/Link/Rect[108.0 340.8 205.8 353.8]/Border[0 0 0]/Dest[693 0 R/XYZ null 359 0]>>endobj
-366 0 obj[341 0 R
+340 0 R
+341 0 R
342 0 R
343 0 R
344 0 R
@@ -567,8 +575,38 @@
347 0 R
348 0 R
349 0 R
-350 0 R
-351 0 R
+]endobj
+351 0 obj<</Subtype/Link/Rect[72.0 684.0 423.1 697.0]/Border[0 0 0]/Dest[654 0 R/XYZ null 798 0]>>endobj
+352 0 obj<</Subtype/Link/Rect[72.0 657.6 112.9 670.6]/Border[0 0 0]/Dest[657 0 R/XYZ null 798 0]>>endobj
+353 0 obj<</Subtype/Link/Rect[72.0 631.2 131.9 644.2]/Border[0 0 0]/Dest[660 0 R/XYZ null 798 0]>>endobj
+354 0 obj<</Subtype/Link/Rect[72.0 604.8 186.3 617.8]/Border[0 0 0]/Dest[663 0 R/XYZ null 798 0]>>endobj
+355 0 obj<</Subtype/Link/Rect[108.0 591.6 160.8 604.6]/Border[0 0 0]/Dest[663 0 R/XYZ null 426 0]>>endobj
+356 0 obj<</Subtype/Link/Rect[72.0 565.2 172.9 578.2]/Border[0 0 0]/Dest[666 0 R/XYZ null 798 0]>>endobj
+357 0 obj<</Subtype/Link/Rect[108.0 552.0 261.1 565.0]/Border[0 0 0]/Dest[666 0 R/XYZ null 651 0]>>endobj
+358 0 obj<</Subtype/Link/Rect[108.0 538.8 203.3 551.8]/Border[0 0 0]/Dest[666 0 R/XYZ null 444 0]>>endobj
+359 0 obj<</Subtype/Link/Rect[108.0 525.6 261.4 538.6]/Border[0 0 0]/Dest[669 0 R/XYZ null 662 0]>>endobj
+360 0 obj<</Subtype/Link/Rect[108.0 512.4 241.8 525.4]/Border[0 0 0]/Dest[669 0 R/XYZ null 349 0]>>endobj
+361 0 obj<</Subtype/Link/Rect[108.0 499.2 175.5 512.2]/Border[0 0 0]/Dest[672 0 R/XYZ null 783 0]>>endobj
+362 0 obj<</Subtype/Link/Rect[72.0 472.8 215.6 485.8]/Border[0 0 0]/Dest[675 0 R/XYZ null 798 0]>>endobj
+363 0 obj<</Subtype/Link/Rect[72.0 446.4 126.4 459.4]/Border[0 0 0]/Dest[678 0 R/XYZ null 798 0]>>endobj
+364 0 obj<</Subtype/Link/Rect[72.0 420.0 124.6 433.0]/Border[0 0 0]/Dest[681 0 R/XYZ null 798 0]>>endobj
+365 0 obj<</Subtype/Link/Rect[72.0 393.6 413.9 406.6]/Border[0 0 0]/Dest[684 0 R/XYZ null 798 0]>>endobj
+366 0 obj<</Subtype/Link/Rect[72.0 367.2 407.5 380.2]/Border[0 0 0]/Dest[687 0 R/XYZ null 798 0]>>endobj
+367 0 obj<</Subtype/Link/Rect[72.0 340.8 273.7 353.8]/Border[0 0 0]/Dest[690 0 R/XYZ null 798 0]>>endobj
+368 0 obj<</Subtype/Link/Rect[72.0 314.4 179.6 327.4]/Border[0 0 0]/Dest[693 0 R/XYZ null 798 0]>>endobj
+369 0 obj<</Subtype/Link/Rect[72.0 288.0 245.5 301.0]/Border[0 0 0]/Dest[696 0 R/XYZ null 798 0]>>endobj
+370 0 obj<</Subtype/Link/Rect[108.0 274.8 181.0 287.8]/Border[0 0 0]/Dest[696 0 R/XYZ null 532 0]>>endobj
+371 0 obj<</Subtype/Link/Rect[108.0 261.6 206.1 274.6]/Border[0 0 0]/Dest[696 0 R/XYZ null 272 0]>>endobj
+372 0 obj<</Subtype/Link/Rect[72.0 235.2 255.9 248.2]/Border[0 0 0]/Dest[702 0 R/XYZ null 798 0]>>endobj
+373 0 obj<</Subtype/Link/Rect[72.0 208.8 364.1 221.8]/Border[0 0 0]/Dest[705 0 R/XYZ null 798 0]>>endobj
+374 0 obj<</Subtype/Link/Rect[72.0 182.4 354.3 195.4]/Border[0 0 0]/Dest[711 0 R/XYZ null 798 0]>>endobj
+375 0 obj<</Subtype/Link/Rect[72.0 156.0 223.3 169.0]/Border[0 0 0]/Dest[714 0 R/XYZ null 798 0]>>endobj
+376 0 obj<</Subtype/Link/Rect[72.0 129.6 99.5 142.6]/Border[0 0 0]/Dest[717 0 R/XYZ null 798 0]>>endobj
+377 0 obj<</Subtype/Link/Rect[108.0 116.4 466.0 129.4]/Border[0 0 0]/Dest[717 0 R/XYZ null 745 0]>>endobj
+378 0 obj<</Subtype/Link/Rect[108.0 103.2 471.2 116.2]/Border[0 0 0]/Dest[717 0 R/XYZ null 320 0]>>endobj
+379 0 obj<</Subtype/Link/Rect[108.0 90.0 422.7 103.0]/Border[0 0 0]/Dest[720 0 R/XYZ null 754 0]>>endobj
+380 0 obj<</Subtype/Link/Rect[108.0 76.8 392.4 89.8]/Border[0 0 0]/Dest[720 0 R/XYZ null 619 0]>>endobj
+381 0 obj[351 0 R
352 0 R
353 0 R
354 0 R
@@ -583,141 +621,127 @@
363 0 R
364 0 R
365 0 R
+366 0 R
+367 0 R
+368 0 R
+369 0 R
+370 0 R
+371 0 R
+372 0 R
+373 0 R
+374 0 R
+375 0 R
+376 0 R
+377 0 R
+378 0 R
+379 0 R
+380 0 R
]endobj
-367 0 obj<</Dests 368 0 R>>endobj
-368 0 obj<</Kids[369 0 R]>>endobj
-369 0 obj<</Limits[(aen1059)(samba-project-documentation)]/Names[(aen1059)370 0 R(aen1064)371 0 R(aen1080)372 0 R(aen1097)373 0 R(aen1103)374 0 R(aen1143)375 0 R(aen116)376 0 R(aen1186)377 0 R(aen1200)378 0 R(aen1228)379 0 R(aen1239)380 0 R(aen1287)381 0 R(aen132)382 0 R(aen1331)383 0 R(aen141)384 0 R(aen1445)385 0 R(aen1475)386 0 R(aen15)387 0 R(aen1509)388 0 R(aen1517)389 0 R(aen1525)390 0 R(aen1533)391 0 R(aen1540)392 0 R(aen157)393 0 R(aen1576)394 0 R(aen1589)395 0 R(aen1592)396 0 R(aen1602)397 0 R(aen1627)398 0 R(aen1645)399 0 R(aen1649)400 0 R(aen1662)401 0 R(aen1669)402 0 R(aen1673)403 0 R(aen1678)404 0 R(aen1682)405 0 R(aen1698)406 0 R(aen17)407 0 R(aen1706)408 0 R(aen171)409 0 R(aen1710)410 0 R(aen1713)411 0 R(aen1719)412 0 R(aen1731)413 0 R(aen1734)414 0 R(aen1745)415 0 R(aen1747)416 0 R(aen176)417 0 R(aen1762)418 0 R(aen1771)419 0 R(aen1775)420 0 R(aen1784)421 0 R(aen1791)422 0 R(aen1796)423 0 R(aen1799)424 0 R(aen180)425 0 R(aen1804)426 0 R(aen183)427 0 R(aen192)428 0 R(aen196)429 0 R(aen206)430 0 R(aen209)431 0 R(aen212)432 0 R(aen223)433 0 R(aen245)434 0 R(aen25)435 0 R(aen261)436 0 R(aen277)437 0 R(aen288)438 0 R(aen296)439 0 R(aen308)440 0 R(aen320)441 0 R(aen325)442 0 R(aen333)443 0 R(aen338)444 0 R(aen341)445 0 R(aen353)446 0 R(aen363)447 0 R(aen391)448 0 R(aen399)449 0 R(aen4)450 0 R(aen416)451 0 R(aen423)452 0 R(aen428)453 0 R(aen433)454 0 R(aen443)455 0 R(aen454)456 0 R(aen496)457 0 R(aen503)458 0 R(aen512)459 0 R(aen523)460 0 R(aen53)461 0 R(aen558)462 0 R(aen567)463 0 R(aen57)464 0 R(aen578)465 0 R(aen587)466 0 R(aen598)467 0 R(aen618)468 0 R(aen633)469 0 R(aen647)470 0 R(aen654)471 0 R(aen676)472 0 R(aen71)473 0 R(aen740)474 0 R(aen750)475 0 R(aen761)476 0 R(aen77)477 0 R(aen783)478 0 R(aen794)479 0 R(aen829)480 0 R(aen846)481 0 R(aen857)482 0 R(aen87)483 0 R(aen882)484 0 R(aen890)485 0 R(aen894)486 0 R(aen9)487 0 R(aen904)488 0 R(aen907)489 0 R(aen911)490 0 R(aen933)491 0 R(aen977)492 0 R(aen995)493 0 R(body.html)494 0 R(migration)495 0 R(samba-project-documentation)496 0 R]>>endobj
-370 0 obj<</D[609 0 R/XYZ null 356 null]>>endobj
-371 0 obj<</D[612 0 R/XYZ null 768 null]>>endobj
-372 0 obj<</D[615 0 R/XYZ null 798 null]>>endobj
-373 0 obj<</D[615 0 R/XYZ null 706 null]>>endobj
-374 0 obj<</D[615 0 R/XYZ null 608 null]>>endobj
-375 0 obj<</D[618 0 R/XYZ null 660 null]>>endobj
-376 0 obj<</D[504 0 R/XYZ null 266 null]>>endobj
-377 0 obj<</D[621 0 R/XYZ null 531 null]>>endobj
-378 0 obj<</D[621 0 R/XYZ null 196 null]>>endobj
-379 0 obj<</D[624 0 R/XYZ null 359 null]>>endobj
-380 0 obj<</D[624 0 R/XYZ null 183 null]>>endobj
-381 0 obj<</D[630 0 R/XYZ null 545 null]>>endobj
-382 0 obj<</D[507 0 R/XYZ null 686 null]>>endobj
-383 0 obj<</D[633 0 R/XYZ null 488 null]>>endobj
-384 0 obj<</D[507 0 R/XYZ null 509 null]>>endobj
-385 0 obj<</D[642 0 R/XYZ null 768 null]>>endobj
-386 0 obj<</D[645 0 R/XYZ null 435 null]>>endobj
-387 0 obj<</D[498 0 R/XYZ null 798 null]>>endobj
-388 0 obj<</D[648 0 R/XYZ null 189 null]>>endobj
-389 0 obj<</D[651 0 R/XYZ null 605 null]>>endobj
-390 0 obj<</D[651 0 R/XYZ null 406 null]>>endobj
-391 0 obj<</D[651 0 R/XYZ null 168 null]>>endobj
-392 0 obj<</D[654 0 R/XYZ null 698 null]>>endobj
-393 0 obj<</D[507 0 R/XYZ null 332 null]>>endobj
-394 0 obj<</D[657 0 R/XYZ null 341 null]>>endobj
-395 0 obj<</D[660 0 R/XYZ null 434 null]>>endobj
-396 0 obj<</D[660 0 R/XYZ null 339 null]>>endobj
-397 0 obj<</D[663 0 R/XYZ null 686 null]>>endobj
-398 0 obj<</D[669 0 R/XYZ null 798 null]>>endobj
-399 0 obj<</D[669 0 R/XYZ null 706 null]>>endobj
-400 0 obj<</D[669 0 R/XYZ null 569 null]>>endobj
-401 0 obj<</D[669 0 R/XYZ null 246 null]>>endobj
-402 0 obj<</D[672 0 R/XYZ null 581 null]>>endobj
-403 0 obj<</D[672 0 R/XYZ null 417 null]>>endobj
-404 0 obj<</D[672 0 R/XYZ null 292 null]>>endobj
-405 0 obj<</D[675 0 R/XYZ null 768 null]>>endobj
-406 0 obj<</D[675 0 R/XYZ null 326 null]>>endobj
-407 0 obj<</D[498 0 R/XYZ null 730 null]>>endobj
-408 0 obj<</D[678 0 R/XYZ null 686 null]>>endobj
-409 0 obj<</D[510 0 R/XYZ null 768 null]>>endobj
-410 0 obj<</D[678 0 R/XYZ null 496 null]>>endobj
-411 0 obj<</D[678 0 R/XYZ null 345 null]>>endobj
-412 0 obj<</D[678 0 R/XYZ null 155 null]>>endobj
-413 0 obj<</D[681 0 R/XYZ null 581 null]>>endobj
-414 0 obj<</D[684 0 R/XYZ null 798 null]>>endobj
-415 0 obj<</D[684 0 R/XYZ null 730 null]>>endobj
-416 0 obj<</D[684 0 R/XYZ null 700 null]>>endobj
-417 0 obj<</D[510 0 R/XYZ null 577 null]>>endobj
-418 0 obj<</D[684 0 R/XYZ null 348 null]>>endobj
-419 0 obj<</D[687 0 R/XYZ null 768 null]>>endobj
-420 0 obj<</D[687 0 R/XYZ null 639 null]>>endobj
-421 0 obj<</D[690 0 R/XYZ null 798 null]>>endobj
-422 0 obj<</D[690 0 R/XYZ null 706 null]>>endobj
-423 0 obj<</D[690 0 R/XYZ null 582 null]>>endobj
-424 0 obj<</D[690 0 R/XYZ null 484 null]>>endobj
-425 0 obj<</D[510 0 R/XYZ null 505 null]>>endobj
-426 0 obj<</D[690 0 R/XYZ null 359 null]>>endobj
-427 0 obj<</D[510 0 R/XYZ null 394 null]>>endobj
-428 0 obj<</D[513 0 R/XYZ null 739 null]>>endobj
-429 0 obj<</D[513 0 R/XYZ null 615 null]>>endobj
-430 0 obj<</D[516 0 R/XYZ null 768 null]>>endobj
-431 0 obj<</D[516 0 R/XYZ null 683 null]>>endobj
-432 0 obj<</D[519 0 R/XYZ null 798 null]>>endobj
-433 0 obj<</D[519 0 R/XYZ null 706 null]>>endobj
-434 0 obj<</D[519 0 R/XYZ null 463 null]>>endobj
-435 0 obj<</D[498 0 R/XYZ null 593 null]>>endobj
-436 0 obj<</D[519 0 R/XYZ null 325 null]>>endobj
-437 0 obj<</D[522 0 R/XYZ null 435 null]>>endobj
-438 0 obj<</D[522 0 R/XYZ null 285 null]>>endobj
-439 0 obj<</D[525 0 R/XYZ null 768 null]>>endobj
-440 0 obj<</D[525 0 R/XYZ null 268 null]>>endobj
-441 0 obj<</D[528 0 R/XYZ null 210 null]>>endobj
-442 0 obj<</D[531 0 R/XYZ null 660 null]>>endobj
-443 0 obj<</D[534 0 R/XYZ null 371 null]>>endobj
-444 0 obj<</D[534 0 R/XYZ null 260 null]>>endobj
-445 0 obj<</D[537 0 R/XYZ null 768 null]>>endobj
-446 0 obj<</D[537 0 R/XYZ null 529 null]>>endobj
-447 0 obj<</D[540 0 R/XYZ null 633 null]>>endobj
-448 0 obj<</D[543 0 R/XYZ null 581 null]>>endobj
-449 0 obj<</D[543 0 R/XYZ null 304 null]>>endobj
-450 0 obj<</D[495 0 R/XYZ null 647 null]>>endobj
-451 0 obj<</D[546 0 R/XYZ null 594 null]>>endobj
-452 0 obj<</D[546 0 R/XYZ null 271 null]>>endobj
-453 0 obj<</D[549 0 R/XYZ null 753 null]>>endobj
-454 0 obj<</D[549 0 R/XYZ null 639 null]>>endobj
-455 0 obj<</D[552 0 R/XYZ null 798 null]>>endobj
-456 0 obj<</D[552 0 R/XYZ null 706 null]>>endobj
-457 0 obj<</D[555 0 R/XYZ null 192 null]>>endobj
-458 0 obj<</D[558 0 R/XYZ null 739 null]>>endobj
-459 0 obj<</D[561 0 R/XYZ null 798 null]>>endobj
-460 0 obj<</D[561 0 R/XYZ null 706 null]>>endobj
-461 0 obj<</D[498 0 R/XYZ null 178 null]>>endobj
-462 0 obj<</D[564 0 R/XYZ null 673 null]>>endobj
-463 0 obj<</D[567 0 R/XYZ null 798 null]>>endobj
-464 0 obj<</D[501 0 R/XYZ null 739 null]>>endobj
-465 0 obj<</D[567 0 R/XYZ null 706 null]>>endobj
-466 0 obj<</D[567 0 R/XYZ null 525 null]>>endobj
-467 0 obj<</D[567 0 R/XYZ null 348 null]>>endobj
-468 0 obj<</D[570 0 R/XYZ null 686 null]>>endobj
-469 0 obj<</D[570 0 R/XYZ null 443 null]>>endobj
-470 0 obj<</D[570 0 R/XYZ null 187 null]>>endobj
-471 0 obj<</D[573 0 R/XYZ null 673 null]>>endobj
-472 0 obj<</D[573 0 R/XYZ null 232 null]>>endobj
-473 0 obj<</D[501 0 R/XYZ null 379 null]>>endobj
-474 0 obj<</D[579 0 R/XYZ null 594 null]>>endobj
-475 0 obj<</D[582 0 R/XYZ null 798 null]>>endobj
-476 0 obj<</D[582 0 R/XYZ null 730 null]>>endobj
-477 0 obj<</D[501 0 R/XYZ null 268 null]>>endobj
-478 0 obj<</D[582 0 R/XYZ null 302 null]>>endobj
-479 0 obj<</D[585 0 R/XYZ null 693 null]>>endobj
-480 0 obj<</D[588 0 R/XYZ null 463 null]>>endobj
-481 0 obj<</D[591 0 R/XYZ null 686 null]>>endobj
-482 0 obj<</D[591 0 R/XYZ null 302 null]>>endobj
-483 0 obj<</D[504 0 R/XYZ null 768 null]>>endobj
-484 0 obj<</D[594 0 R/XYZ null 686 null]>>endobj
-485 0 obj<</D[594 0 R/XYZ null 496 null]>>endobj
-486 0 obj<</D[594 0 R/XYZ null 385 null]>>endobj
-487 0 obj<</D[495 0 R/XYZ null 616 null]>>endobj
-488 0 obj<</D[594 0 R/XYZ null 247 null]>>endobj
-489 0 obj<</D[594 0 R/XYZ null 149 null]>>endobj
-490 0 obj<</D[597 0 R/XYZ null 713 null]>>endobj
-491 0 obj<</D[600 0 R/XYZ null 768 null]>>endobj
-492 0 obj<</D[606 0 R/XYZ null 798 null]>>endobj
-493 0 obj<</D[606 0 R/XYZ null 730 null]>>endobj
-494 0 obj<</D[501 0 R/XYZ null 698 null]>>endobj
-495 0 obj<</D[600 0 R/XYZ null 768 null]>>endobj
-496 0 obj<</D[495 0 R/XYZ null 753 null]>>endobj
-497 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 70/Kids[498 0 R
-699 0 R
-702 0 R
-705 0 R
+382 0 obj<</Dests 383 0 R>>endobj
+383 0 obj<</Kids[384 0 R]>>endobj
+384 0 obj<</Limits[(aen10)(smbpasswdfileformat)]/Names[(aen10)385 0 R(aen1005)386 0 R(aen1029)387 0 R(aen1047)388 0 R(aen1051)389 0 R(aen1064)390 0 R(aen1071)391 0 R(aen1075)392 0 R(aen1080)393 0 R(aen1084)394 0 R(aen1100)395 0 R(aen1108)396 0 R(aen111)397 0 R(aen1112)398 0 R(aen1115)399 0 R(aen1121)400 0 R(aen1133)401 0 R(aen1136)402 0 R(aen1147)403 0 R(aen1156)404 0 R(aen1167)405 0 R(aen1187)406 0 R(aen12)407 0 R(aen1202)408 0 R(aen1216)409 0 R(aen1223)410 0 R(aen1245)411 0 R(aen127)412 0 R(aen1309)413 0 R(aen1319)414 0 R(aen1330)415 0 R(aen1332)416 0 R(aen1347)417 0 R(aen1356)418 0 R(aen136)419 0 R(aen1360)420 0 R(aen152)421 0 R(aen166)422 0 R(aen171)423 0 R(aen175)424 0 R(aen178)425 0 R(aen187)426 0 R(aen191)427 0 R(aen20)428 0 R(aen201)429 0 R(aen204)430 0 R(aen207)431 0 R(aen218)432 0 R(aen222)433 0 R(aen233)434 0 R(aen252)435 0 R(aen259)436 0 R(aen268)437 0 R(aen320)438 0 R(aen359)439 0 R(aen374)440 0 R(aen385)441 0 R(aen4)442 0 R(aen420)443 0 R(aen429)444 0 R(aen440)445 0 R(aen457)446 0 R(aen48)447 0 R(aen511)448 0 R(aen52)449 0 R(aen522)450 0 R(aen526)451 0 R(aen536)452 0 R(aen539)453 0 R(aen543)454 0 R(aen565)455 0 R(aen594)456 0 R(aen612)457 0 R(aen66)458 0 R(aen676)459 0 R(aen681)460 0 R(aen697)461 0 R(aen708)462 0 R(aen72)463 0 R(aen745)464 0 R(aen788)465 0 R(aen82)466 0 R(aen827)467 0 R(aen855)468 0 R(aen895)469 0 R(aen942)470 0 R(aen966)471 0 R(migration)472 0 R(samba-doc.html)473 0 R(samba-project-documentation)474 0 R(smbpasswdfileformat)475 0 R]>>endobj
+385 0 obj<</D[483 0 R/XYZ null 798 null]>>endobj
+386 0 obj<</D[645 0 R/XYZ null 798 null]>>endobj
+387 0 obj<</D[651 0 R/XYZ null 798 null]>>endobj
+388 0 obj<</D[654 0 R/XYZ null 798 null]>>endobj
+389 0 obj<</D[657 0 R/XYZ null 798 null]>>endobj
+390 0 obj<</D[660 0 R/XYZ null 798 null]>>endobj
+391 0 obj<</D[660 0 R/XYZ null 426 null]>>endobj
+392 0 obj<</D[663 0 R/XYZ null 798 null]>>endobj
+393 0 obj<</D[663 0 R/XYZ null 651 null]>>endobj
+394 0 obj<</D[663 0 R/XYZ null 444 null]>>endobj
+395 0 obj<</D[666 0 R/XYZ null 662 null]>>endobj
+396 0 obj<</D[666 0 R/XYZ null 349 null]>>endobj
+397 0 obj<</D[504 0 R/XYZ null 783 null]>>endobj
+398 0 obj<</D[669 0 R/XYZ null 783 null]>>endobj
+399 0 obj<</D[672 0 R/XYZ null 798 null]>>endobj
+400 0 obj<</D[675 0 R/XYZ null 798 null]>>endobj
+401 0 obj<</D[678 0 R/XYZ null 798 null]>>endobj
+402 0 obj<</D[681 0 R/XYZ null 798 null]>>endobj
+403 0 obj<</D[684 0 R/XYZ null 798 null]>>endobj
+404 0 obj<</D[687 0 R/XYZ null 798 null]>>endobj
+405 0 obj<</D[690 0 R/XYZ null 798 null]>>endobj
+406 0 obj<</D[693 0 R/XYZ null 798 null]>>endobj
+407 0 obj<</D[486 0 R/XYZ null 798 null]>>endobj
+408 0 obj<</D[693 0 R/XYZ null 532 null]>>endobj
+409 0 obj<</D[693 0 R/XYZ null 272 null]>>endobj
+410 0 obj<</D[699 0 R/XYZ null 798 null]>>endobj
+411 0 obj<</D[702 0 R/XYZ null 798 null]>>endobj
+412 0 obj<</D[507 0 R/XYZ null 798 null]>>endobj
+413 0 obj<</D[708 0 R/XYZ null 798 null]>>endobj
+414 0 obj<</D[711 0 R/XYZ null 798 null]>>endobj
+415 0 obj<</D[714 0 R/XYZ null 798 null]>>endobj
+416 0 obj<</D[714 0 R/XYZ null 745 null]>>endobj
+417 0 obj<</D[714 0 R/XYZ null 320 null]>>endobj
+418 0 obj<</D[717 0 R/XYZ null 754 null]>>endobj
+419 0 obj<</D[510 0 R/XYZ null 798 null]>>endobj
+420 0 obj<</D[717 0 R/XYZ null 619 null]>>endobj
+421 0 obj<</D[513 0 R/XYZ null 798 null]>>endobj
+422 0 obj<</D[516 0 R/XYZ null 798 null]>>endobj
+423 0 obj<</D[516 0 R/XYZ null 585 null]>>endobj
+424 0 obj<</D[516 0 R/XYZ null 510 null]>>endobj
+425 0 obj<</D[516 0 R/XYZ null 395 null]>>endobj
+426 0 obj<</D[519 0 R/XYZ null 741 null]>>endobj
+427 0 obj<</D[519 0 R/XYZ null 613 null]>>endobj
+428 0 obj<</D[489 0 R/XYZ null 798 null]>>endobj
+429 0 obj<</D[522 0 R/XYZ null 783 null]>>endobj
+430 0 obj<</D[522 0 R/XYZ null 694 null]>>endobj
+431 0 obj<</D[525 0 R/XYZ null 798 null]>>endobj
+432 0 obj<</D[528 0 R/XYZ null 798 null]>>endobj
+433 0 obj<</D[531 0 R/XYZ null 798 null]>>endobj
+434 0 obj<</D[534 0 R/XYZ null 798 null]>>endobj
+435 0 obj<</D[534 0 R/XYZ null 203 null]>>endobj
+436 0 obj<</D[537 0 R/XYZ null 701 null]>>endobj
+437 0 obj<</D[540 0 R/XYZ null 798 null]>>endobj
+438 0 obj<</D[546 0 R/XYZ null 798 null]>>endobj
+439 0 obj<</D[549 0 R/XYZ null 798 null]>>endobj
+440 0 obj<</D[552 0 R/XYZ null 798 null]>>endobj
+441 0 obj<</D[555 0 R/XYZ null 798 null]>>endobj
+442 0 obj<</D[477 0 R/XYZ null 730 null]>>endobj
+443 0 obj<</D[558 0 R/XYZ null 754 null]>>endobj
+444 0 obj<</D[561 0 R/XYZ null 798 null]>>endobj
+445 0 obj<</D[564 0 R/XYZ null 798 null]>>endobj
+446 0 obj<</D[567 0 R/XYZ null 798 null]>>endobj
+447 0 obj<</D[492 0 R/XYZ null 798 null]>>endobj
+448 0 obj<</D[573 0 R/XYZ null 741 null]>>endobj
+449 0 obj<</D[495 0 R/XYZ null 798 null]>>endobj
+450 0 obj<</D[576 0 R/XYZ null 798 null]>>endobj
+451 0 obj<</D[576 0 R/XYZ null 664 null]>>endobj
+452 0 obj<</D[576 0 R/XYZ null 457 null]>>endobj
+453 0 obj<</D[576 0 R/XYZ null 355 null]>>endobj
+454 0 obj<</D[576 0 R/XYZ null 240 null]>>endobj
+455 0 obj<</D[582 0 R/XYZ null 798 null]>>endobj
+456 0 obj<</D[585 0 R/XYZ null 798 null]>>endobj
+457 0 obj<</D[588 0 R/XYZ null 798 null]>>endobj
+458 0 obj<</D[498 0 R/XYZ null 798 null]>>endobj
+459 0 obj<</D[594 0 R/XYZ null 798 null]>>endobj
+460 0 obj<</D[597 0 R/XYZ null 798 null]>>endobj
+461 0 obj<</D[600 0 R/XYZ null 798 null]>>endobj
+462 0 obj<</D[603 0 R/XYZ null 798 null]>>endobj
+463 0 obj<</D[501 0 R/XYZ null 798 null]>>endobj
+464 0 obj<</D[609 0 R/XYZ null 798 null]>>endobj
+465 0 obj<</D[615 0 R/XYZ null 798 null]>>endobj
+466 0 obj<</D[501 0 R/XYZ null 611 null]>>endobj
+467 0 obj<</D[621 0 R/XYZ null 798 null]>>endobj
+468 0 obj<</D[627 0 R/XYZ null 798 null]>>endobj
+469 0 obj<</D[633 0 R/XYZ null 798 null]>>endobj
+470 0 obj<</D[636 0 R/XYZ null 266 null]>>endobj
+471 0 obj<</D[639 0 R/XYZ null 609 null]>>endobj
+472 0 obj<</D[582 0 R/XYZ null 798 null]>>endobj
+473 0 obj<</D[480 0 R/XYZ null 698 null]>>endobj
+474 0 obj<</D[477 0 R/XYZ null 798 null]>>endobj
+475 0 obj<</D[540 0 R/XYZ null 798 null]>>endobj
+476 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 85/Kids[477 0 R
+723 0 R
+726 0 R
+729 0 R
+480 0 R
+483 0 R
+486 0 R
+489 0 R
+492 0 R
+495 0 R
+498 0 R
501 0 R
504 0 R
507 0 R
@@ -784,1096 +808,1129 @@
690 0 R
693 0 R
696 0 R
+699 0 R
+702 0 R
+705 0 R
+708 0 R
+711 0 R
+714 0 R
+717 0 R
+720 0 R
]>>endobj
-498 0 obj<</Type/Page/Parent 497 0 R/Contents 499 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 17 0 R>>endobj
+477 0 obj<</Type/Page/Parent 476 0 R/Contents 478 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 11 0 R/F9 12 0 R>>>>>>endobj
+478 0 obj<</Length 479 0 R/Filter/FlateDecode>>stream
+x+ä2T0
+ä
+endobj
+479 0 obj
+94
+endobj
+480 0 obj<</Type/Page/Parent 476 0 R/Contents 481 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F6 9 0 R/F7 10 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 57 0 R>>endobj
+481 0 obj<</Length 482 0 R/Filter/FlateDecode>>stream
+x…ZÛnG}×WôÛf›æ\È!,¶o XŽ7bà}‘#™19£}ùûœSÝÓ}FrvÄÖñqwWU×­küß‹ÌÍñ_æªÜK·=^¼Ú\¼x³vùÜmîÀ,«•ÛìÜ|6ŸãO¶?ݼ¼~õÒ}è»?šíà^wÛó±i‡zØwíß7ØÒ¬ôKŸÙ,Çâ°fÓÔGþ•Ÿ7ØÍ-‹Å¬tåªÂÏ9þïwç¯\–…Ãçål99~Sß×ݹ«®pð)í= ¤ËøËoÿºÈðƒ[¬ç8äèŠr¶àànü1ËxÌbáo©–ÙÌ…eåÑ•‹ÙJ¶xtÕrV 'ðèÖË( x„´€”¤b°‹l¶·cZ&Uû{êñT…_º¯nèÜÛö4Ô‡ƒ«ÛÛ4§ÁÙŽÊ™\U…k:ºEE PG·\ã'Ê-(\'ÊÑ©l‘Óžq©bª¾â¥EªÃCÕÊœJ<rhÜüÒýÖÔ;7|jܱnÝC}ߌ¾Q˜–ËbŽZHZΫ9Ôd>+Ü"’ÄÐ,¬Ìò%<HXÁX»,hÚ¸6h²\L|î†zd—îÕyØíÛ{ÓåÕ¾­ûý#Us˜mTÅ@R%p^öÈ <ºÕŠ.9u^P­H*[®©fbSÍjOŒlPü(…PÑüÒmpWtÍýñ¡ë‡ºÜ ÌÄ5‹
+~7jj i8¯ZäR›œ—IÅ`3s°Ä
+[¬é׉|DzÌ‘U ;ÁN‘ –(V²™]yqé®ú¦»ðÓñÖm»önî-«º»ý¡™M¬’—Ø}´Šd•Ày3DN vNoŒœ@Ú¤ ^‘T ¶,è:‰ v9ÝX1ØUN›¤µ‚a1ü9ü.²Áb9k„&f³X ßa*ûÞû`,³’ûº>Yâ~ñf,"?¹õ¡îÇÚã³å¥Ñ„’ çm9Pf^1sER1X¨×I¬`° +,Î!ÒZÁ`×–I" 3½x32fÇ,Çê'[\º›¡î‡1«ÀÉvVZü\«b.×+ü
+á1Ð.!NÏ„T )¡PV0Xœ²RV0Ãf‰ŒŸŽ…vhKÊõúÕ¢Ò]ßݾm†ÝŒ¡3QhUZ®ôH
+Χò2’Š!òrA¡+˜y Ÿ°Š©PFcĵŠéóŒ&aƒEq„™ÓZÁ`—ËÉÚ`ª”§×;s/CÓ·È(_šKäÙà ûÁÕ'W»]Ý}‡îÌ"¤¬˜àB„x#dä,$'E†™;qéA…·¸©b°h¹ xbûëÐy=#†Yææ}q­bopøxbaðƒE;§R)‹†¾×úU§ ª%¨%TÿÝö§rŸê¾©¿Ôûƒïa[Ÿ¿Ü©é¿4½&øOLð$ÛÎÛ
+‹ABŠkƒŠb¢ÿÇOõàÞÞ¡†wŸðŽnÿ6¸]ÿùŸ“ê…>’>ŸÇQÌW¼ÍÈâD–Ílý¨¼Þ×÷mwb8áýŽwôq|!ùÚ?g&Åvhma5Cv˜`°¨ÑÈ’‘ ‡Í—óà¶{hÜÛד#Š5{ÀqìÛ4²Em…Œµ»_aƒµ¤“X/^ò?M3WŸ:o æXcè¶ÝÁ½k¾4½€¢b7Fé-y‹QÆ\YÁ`N“µ‚ÁBüJ×
+‹&y­¬`¤
+¦ Œ¼ÄAJƸ
+ò+ü¨wW(òõ–»iâh
+®ç°
+¦×1¥ƒ--nâ¹0gÒ¦ÁÐÆYO ð®n¯1×áëýÆ}¨O§¯]¿s?·Ûþû§x
+†L–8óÈ*‹ ‡Ù{dƒÄÐjš¦·]û¼ñÐì0úô±1V^ïeò.àv¹ó^vÍB­ùŠIÅTš}nbƒ [Nã‡S=ÌLŠe4s<æl krHr.œIÅ&‚
+‘ rÓaêTŠ«îˆ¡ð8éðÉý¯
+k€°‚áx•"Ò¢HŠÁ¢´Áã#ÔÏŸ Y›ÁŠúù!dEÔôÓù“Vçs)ü½êèV­è” M\.$1@ãଔ­SµÊá7Ó€*bµ’:™¢Òva R«ñ,Å`樉 ¹©Òµ‚qä¦ÓÚœ† +lÉ:)¬àxQª‰}¤š=5Ð/Ÿ Ôîz¿í»Sw‡oi˜ôûÛó€~ƒ™¯»ùŽyøÑ }ƒ/^¡¸i,ek?Æ
+CÜ( »` ·RV0XLù'¬`°ö ƒEŸ³Ð3ø8‡Hkqô9Ì=¦®;š½v‡º¿o\{>Þ"y¡X?ðñÒô£C[jg*¶YkŒTÙRÆÈ!:”™‘¬ùù€»ˆÑñFFk ÚJpr›®;œšq&å );„+àvq–ÕÜD*kßÒì3ÿÁ,aŠ²LFˆÿÜbcaÀ®mp€8Å^<‰Kns!ëäí19Æu^¸Õ㩃}Ûò3»*÷ºÇ ºG ¿ý,iÍbÖcÂ`ìíg³ÓS`8zJ EUã2/&”ÓÒ4¹´ÉèÕ$ÀĈábØÏQ‚Àd%ßë‘ l:9/ÕvU“À•÷øüC[3;¾™ÐÑp`DÅŸ)EBBD&!È€§†?ã"´Ð·ž¸);g‰KÞ0Å=„ Çæ7› $tæg¨Ç3†ëý}øš‰6Äæ ãSm>ûÆqm)‘ú³4XaaM`ûu Åtì°ˆ5%­F÷A÷ˆ;%dÖÄ“ŽçÙmÛ bs0aG*ÃØ+@X“tY&–fúŽë&bKcðHîSx%¹àw¬Qd¤ÎØ›ö©ò/Þ 5Û?—yŽßžÛŽÿï锈â5Æ ø§9Yp»_ü peÙendstream
+endobj
+482 0 obj
+3042
+endobj
+483 0 obj<</Type/Page/Parent 476 0 R/Contents 484 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F6 9 0 R/F8 11 0 R>>>>/Annots 101 0 R>>endobj
+484 0 obj<</Length 485 0 R/Filter/FlateDecode>>stream
+xZÛnÇ|çWôS özw.{ ”dÙ $Q–¨0‚Ñî{w‡žšÖߧêtOwµi'ZÅbßνOÏ/g 7Ç ·*\¹tÛÃÙó«³ï®Îæ³9~Ï þxÿýY¹œÍÝrÍŸ·ZÌÖì݇3·®gµpn1_ÌVB*[nfeƒ].fKeƒÝT³RYÁWÌ×q÷Ü0ù»·îÛWK·X¸«Jb¹^¹«‰`ÏþÑwÇîx뚣{{å^ö‡¦;ºÇn¼sšÃçƳ⫫Ÿ(:/¨U 0 Ïk€ë
+„ V<mäR»ŠÁÖ5å‡*¦(L‘Åay U‰1z$¿ñæ¸s×Ýq×?ž &èڟ픦Þ@ôW¯)c<@;i%N:A;)Çá¤ÄnuüKNª˜rXñ¤q¨b°«:Ûb°ÞôÒXÁ0‰ÅšvÙ ¥å'U)]ß}qÝÉwøñ¹ÇvÀ¿a§vû0tã÷7üsøµþ$¶0ÍUKœêàÊŠ‹xbwf°;È¢Zá¯uÕåÌM
+H3\ezÓ <¸M9+d)EQÓÖâ@Å`klEYÁ`—ý. v5§‚+˜Bžg›R ¶2#‰cƒ…ëžÿÐgá¯O…÷CÿèÆÞ½è7ÝíÃÐ&ýæš“kÜ»¡;4×Éñ—ãÐï÷í0 Ý‚]I‰Âz7<¡ Cº4[d*{Þl¾ú‡ã.›¤ l¡‚†`€“„ %"©lµ ƒ$V0åO×V0dX,gPŒ¼@”“Ø6 Šñm¼›ÄbÜŸÈf¾„P,†à±bk‹ ¤b«ÎYÁ`×kN+ÇšÓ_«˜fežÇ*‹=ꮃÝ,rV0¼ë"
+‹ƒ“ÆEƒEÞ(+˜,óO䀬œ­ë»ft=,kpwíþÞm‘Ù.Üm;º)yõוb …µŠa“ –4wO¤b¿ÝB†bC(9ëºÎÔòñýk¯‹SwèöÍŽý*fÌäEjÈ›‡‰xbKXÙ°bfî„ošnO|ÝÆ\ãÅÊü‰ò…n Ù2‚½|¡aÍ*§±^0‰Œ³`vIcƒ…t!˜8V±O‹ø4aÆ'f™4V1ز hâÌÁ&`s¹'¿¼|s~ñöß/.ß^½¿|=Ý_c‰˜ŠßÜ_|z 1ɪŸzQa%”+% Ø
+†B
+ÂÄ*¦2M=q¬b°HjPWd3ùؽ Õ!*œ§úxìnÚ{ÝßöG+KÛö¨:bùøöâ_îáD+Gÿ5~–7pcuƒkÌÜ@Ъ›†”Šóϧqh¶£NQaÿVÛ°âõ MQ­7™k_°ÄÚ=lÇ®?f“¬*sk‹°•N"*Àv°B$ƒ…s/„õv]án»¼Åº æ©_»] öa*K\®â„†¸Å`QK×Âb9D²Êªb5â«f`ýxŠ‹ØÍ°²¢w© g1À5¢XdDKœ@.¿‚)'2œ¶ÚÀãtyÁÓa¯ûáç)Èù“–µ)Ÿ^‚]²“
+ÆR5mCXÁ°^(¥V1ý¢æ6ãÌAJAnWoºíПú›Ñ½oýØR1ÛvǪýE³ßç».hÔc|eÈë'a°XgJ¬`°KÞ*öU”™ðÞ6”Á¸Öu[ü×üí]°Y/>ì–Š¬°® ÙFc)TØHb{á‘ ArË­öÝþáö¶AMåΧc·EõˆJë ¼)U+¶¯7Ö‚ˆP ç·%»²h›HÅ`qÛÈPÅc†ŒLƒà½>±þD%VÏó <b°"÷{Ü–îÝÅKw¾ß÷þT*årMê0´ÒyäÕÍàY4‰jaêkV¼êïÛÓÃ~„Q±æ¾ÕT¢ú ÷<Ld€ËàÚ7AîW´D*‹‡b¢%®Â¹±_O#ŒÚë!zºyÙo²=¡~£©£ß†‰ pOaâ:ïM½F±4Ú“»X¤ñ÷‘i»œÈȬ¹¡a/Û=ÒE Ï–ÊË‚±Åã‹a’?Jå%ª¯\Ùë˜ÊeX(û€i:&†äma®¥,–X++˜š`»DÆ
+»a ¬`z$m&±ŠÁ¢„€Æ])‹Y(*ÉGRùSY–~ׇîDÙ»ç]¸^_ø¦*.\ ÛÓ‰ÖÂ6ÅÓšµDEIO±é'gNKœ@Ê”wÔD*»dÐV0¥fÚ²pQÅ`‘àtYÅ”)kÝ4³bÊtN]¦™à kuÏŠÁ"UéÌÁqÞò¨ðÏ®}dDgÜ¢­wK`*¹*9…"Š÷o(#uþv]³ïosŸ›ûž‘¥óÒ
+l_ýã±NwÝ}¶\¬ßÅbµ0ö8¿päbVR¦ŠÁ¢ÿ[È´ŠÁÚí1 g@+àù)·ë†v;öhsŠ-‡CY¹P,}ëÈš‘˜
+k½aÓ[Öð´Äm•¿ï¼ |ën¾0Üx«ûïúòÃ]ÓŠ^uyÑô²r‚<;k‰T Öî.Â
+‹VS¥có` i¬b°Hú®b°x°ZéXÁÖ,.(ˆ¬È{C¸@¶¼2IÚÃã1ê©ã®v!~lÙZmÝ¡9ýìÜ}3 ŒÇ É½EéÉ^jÌ:Lˆ B‹¤â(ÄÄz!Nc½Ð+8
+1²Aˆa,;A°Ä
+¦-–%V0Ø ï$il"j©<Jü?b4‹lÆqè>?@œçý}*š­.\l(0¦a(ÖƒRÝcÿ²®6—Ç‹Mª Ó è ³ÔOÓ ¤i3$'LkIõt±Ë…ót÷ÃåõÕ¥Föâƒ"b %<ŸóèóêüÇÉœ,¶1j1ØØ›«.G‡§°øVX†RLsbZOCƒ]ò6+¬`°ÈzÙÌ‚aVŠiNLiÂ
+‹Ë „m§ãÓØh¨Â
+¦M°ÖL¬b°0è8άlÅ +¬`°(ë²™ƒE˜Í,,t¢{VÌV%³OZÆ…<ÇǧeŒo’oãóâå‡o wÝ ÷¬Ðȹ®œK¿­ü£ãÖÞrÜ H{zÏ:ì <¦3¶{Ã1ì(pÁn"©8ÚQb½]Mc½Ý$Vp´£Äz;
+cƒÝDV1lÁ:=~ÿf)‚Á¢~€ÓXÁ´#vt„ áE¶Ç*‹”
+M¬`°È0º®b°Ê°²4V0X4à‘‰ åX6³`ÚmÒØ`GuÞ e1üçVTºOÏŽ=zÞš>}õu°&„š¯ñANIû*ð–ý'¦d.S²¸bÀL)A(™‚¤b°8XÁ`í aƒEß$+
+G÷IYÅ4sฮb°ÖbMë*†Z|vˆcƒE†{'V0X«… ½U¨4 ÖÌDXÁ`Qf èıÁìà íN£ßÉW¸7Ñ/áA <M>¢éçƒÉ§g$ñ© Ÿ¾rü.åá„w
+Hi',Ü„L;á­RXÁ´sÁ4³`°è@À+˜–À7…Ä*‹t¬b°(6$âÌŠ¡4†uÏŠ©M~Æ}!eåå xׇ§Òû¡cmêvCåà÷Ç}ßìÜ#Úî,ðÍO-x&%¥ò%–J<5:*k¼§°›Êð£¸á½ëÛW8³}ŸÆBŸìáË4ùŒãÃù›ççìŸÿÄô²ß>Ð.Ž­Åoü¨oü°gÿã¯+äÎ >MºÚ=›>lûñì?lé
+endobj
+485 0 obj
+3339
+endobj
+486 0 obj<</Type/Page/Parent 476 0 R/Contents 487 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 11 0 R/F9 12 0 R>>>>>>endobj
+487 0 obj<</Length 488 0 R/Filter/FlateDecode>>stream
+x+ä2T0
+/:endstream
+endobj
+488 0 obj
+129
+endobj
+489 0 obj<</Type/Page/Parent 476 0 R/Contents 490 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 104 0 R>>endobj
+490 0 obj<</Length 491 0 R/Filter/FlateDecode>>stream
+xRÍŽ›0¼ós¨T*5ŽùI€Üv¥mÕCUuà ˜`À»`Sc„"õáû¢ìî­B6`Ïø›™Ï‚œžYŒäˆË<–Áþ[˜£lhç˜å(kpÆ9­\³“#ø ÏRÔpÄ 4FÑÊéKùBÌQ´1wqÎbâ†å{j59«ªÙÉ‹rÎ?p1Ú ¥Þ¸ ¦Á<Éfî¡tc¨Žpî{t²á Zép53&',Ä€_ð"8vQ²•®þìðªÍ‚Ž­×}×ìh8{&3H×)Ý¢W¯ò´¹¡dînŽ,õn>aÛŠn[¡¶¦i°ógNCU³1+WÜSøèÖüù¯çïA\d¬À! ; )
+Æo=Î[Þb<ä ÁÞ·à‰¶¤w¶¹Få3²ƒpÊh*<¥}¼dÕuíÒY •À"+LÊɯkLuÙ!:çÆÓ~¿, ›<ƒÛzì«!‚Ó‡,¡9Í3šcT½Ùä÷èèÞü÷JsNÑxF˜Þ
+ÿþ‹Ã¼”endstream
+endobj
+491 0 obj
+399
+endobj
+492 0 obj<</Type/Page/Parent 476 0 R/Contents 493 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
+493 0 obj<</Length 494 0 R/Filter/FlateDecode>>stream
+xTMoÓ@¼çW å@ˆ§i›r¬j.=nìçx©½kö£!ÿžYÛ‰Z ­¢HQìyoÞ̼÷s’cÎOŽë.®P´“Ûõäüó s¬+>¹º^a]bžÍçü§˜ÞéÄmÔM©Í¡Üj£œÿ~ýƒà%ò|
+ðš”l´5¾§S(1jÓHjB’ò‹Å4×˸µêAÄAý'dvºiP8QAz'7c2|3ôE‡w4#…x_ÅÑ„¶Ó”G–ÑÜý_µ#ÀÚz’_yF Ê”h•Ivj+>Ã=­MrQÐNÑyaVNAÏ¢(¢•š‡êë´ÍäùrŸ•Å“Ê|µ½Y Žr­¸_±ãö»œö@¡sò¨môxç™*ÀV%­B«·u@£i…~0vG•Y1ËÍQý1x²i¬ñÜ>?cV[†b§CÍîg‹œ1²ALê>˜Ô»´µØ¨â!µMÍþâ™*¼B8Ž+.œm”ªÒŒO:a‡ I¶Ô^ñN¸7©í§õ„g‹›Ël…åê:ýæ—
+WÃU]OOéKnêr5ÏnxŒyC.ÇNß'¿q¸¤endstream
+endobj
+494 0 obj
+621
+endobj
+495 0 obj<</Type/Page/Parent 476 0 R/Contents 496 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
+496 0 obj<</Length 497 0 R/Filter/FlateDecode>>stream
+x•‘ÍNÃ0„ïyŠ9‚Dƒã†4á Žˆ¼€“¬kÓĶ êÛ³I wYòÏÌ7›ÝϬ€à¯ÀNb[¡Ÿ²Ç6»}n ZÍ/Õ®F;@äBðMõžh†¼Gkja§Ù‡¤\Bä—ëöƒÝ%ŠâìÞÈ:—ì¿zHHÆF©=á䘎1ASêÍr ‘F ô^k"ø
+endobj
+497 0 obj
+307
+endobj
+498 0 obj<</Type/Page/Parent 476 0 R/Contents 499 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
499 0 obj<</Length 500 0 R/Filter/FlateDecode>>stream
-xu’OsÚ0ÅïþorJgcÇ@O%ýè$-žéY¶6µ-*Éeøö}¤”d2l¤ÕîþÞ[ýŽ>³ÓUÝÑäÓi‚bÍH>ÍPÔHâ$áNu½Z~»_âÑè­ª>èjìÕà¤kõð¦Ø†TÁ Ÿz;Kâ9“O9…’½?ò±ˆX ww‚Ñl>ãÿ”?£°>¦yœ?<£Êy(}æZ–ÖY¹#D!Né<N=DÑ´¥Ö¿À¯D¥»Ž
-ˆ ½Æ—‡ŸÅ·ëZÕp+Ù—õÿê ÿ(×(”46ÆW8sð‡Õ`GÒ»F:È®ó/¦Ç¾’¡j4†.Ý ¬î•k{eC±
-;e,á*.{ÙÒâvˆ‚ý{míªXd²' ŽÏþrª„ýø ‘DzLªG*fÞû°ê°ò3O¸LñÙÓ'ý¢ä|ô8Ô Ê ÑW>÷0\7ÎíÞN&ûý>¶ÞÀX›ÍäòlHðg©1迺¸BWØÉ¢ÎÇNI«`Ž»Z:o—>ËCƹ&”2 ºÂâIÉ 0jK·x«Œ9¼ûù
-cöq›ú¼BïE»o²O,ߣ¿"çRendstream
+xT]oÓ@|ϯXñ”Jà8mÓJ¼€(êšTPQ„ÎÎÚ>z¾3wgBþ=sgŠUx Qœ(·7;»;³ß&sJñžÓé‚–'”דÛÉìâŒ)m œœœ®i»£4ISü“O7žZžÓKËÂ3ùŠÉÕåF²l­ðÒh*¤âähûH+šÏ;¤g‹u²
+Ü?Ð
+1y[³+ãæêòã—Í«—7×—ÛÛ œÈçÕv‚ULËãž«õ)ž |
endobj
500 0 obj
-461
+789
endobj
-501 0 obj<</Type/Page/Parent 497 0 R/Contents 502 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 20 0 R>>endobj
+501 0 obj<</Type/Page/Parent 476 0 R/Contents 502 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
502 0 obj<</Length 503 0 R/Filter/FlateDecode>>stream
-xV]sÛ6|ׯ¸¦‰:cS¢>,Éov§NóÐfë¥ Š¨H€À(šéïÞ‘´å4êÔeK{»{ þ5JiŠŸ”V3šßPVî·£ÉÆfSÚøæfµ¦mNÓd:Å'Ùø§R5Q{JúÅ):zoCTUEÊæ´Õ!Òãݯ÷w?nÿ”:颫s=O“*Ó[£nhzKµÊ)–šje©Q{º} JÓ~ßlÅ»¶çk(7!z³k£ÎéhbÙI™³QKT¹ÈÔ]´[8œ¢"h©«†ïu¤“k ð=*%Dï þ€!Lé:w€sgßF:Xt[v{Fý„˜ñ[ŠþD\­ciìž*sз]/`÷©—›täã¨û*í¿[®¹f¨wy²¦¿©v^˺Ÿ·#¦_4
-&ê+¡é%.¿§1•16·“ÉñxLïHœßóÚmHCXŽ¿´\ÌñºX¯ð:Ã/N/öYN7¢Æ³a§ÞGé-Ý·¦Ê™wöÒ½±Ê›ËVr”³L¸¢ÂxÖ·Ðïö^Õ½8ËAœdcfßözLfÇ°–ì숄/½Î¢ó§„¶¨O¡tm•“j£cj3Œ \òTM|6ZÇ/d`zröØ„¦Â)D]'½=©TŸ4µ¶ ­ªˆ¬Öy`VÌ\«\J}u>ûŠ½sñû/mxÞéõµÌIW`hc1ë=ÜQ‡S‚Ötäá
-Î ¹†]NGk«v•Æxm¤þ¬³–Ûz´ZôE,2ÖÆ2j‘c×; ¡6Ódâ[hÑf°z@tÔ©ào
-w¢BLøïøØ.k)­‘šÿ¬›…ÜIçÁ:ïƒuvË#K|¹›ºq>*‹)ÇÕýoQå’¾‹(ŒÄ^wiÔ"^ ³’ßú «P‘€EÔ€Äìyʽ±Ù …h궒ìK莂L³çÇ ¶
+x¥’QOƒ0…ßùçM|X†øh¢ÉbŒ1ò:¸°:h±-3û÷ÞÂ\â³!M€ö~çœ{û¥HøI±Í°Þ ¢Ç*º{.‘%¨ZÞÙl T ‘$ü§Ž?<ÈP‘ó8›É¢6ºUZÕ¾•?
+5”ç0}^qÎ`©7²¡ŽìIÕäD
+øSñpp_–¬[~ÏxñÉv™eqí?ð“Ì‹D”|#8Eq~~
endobj
503 0 obj
-1091
+334
endobj
-504 0 obj<</Type/Page/Parent 497 0 R/Contents 505 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+504 0 obj<</Type/Page/Parent 476 0 R/Contents 505 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
505 0 obj<</Length 506 0 R/Filter/FlateDecode>>stream
-xWÛnÛ8}ÏWÌö¥.ÐÈ—ØŽ`Ún[E/Û8Ø šÅ‚’h™Dº$•Ô¿gH*vÕ¤› Žc çræÌæÛјFøÓé„NæT4G/WG¯WG£l± ý‹­ðLj¦Ëy¶ éâïOù­•´†í>î_’í|±Ì¦Évû`
-çÃ7KOiµFØùl–ÍiU†Ó#Zƒq6ÍèÂË-œÑ++…—ä7’\“SaôZU­^MkUËìÙê+Ni<Ž'§p7Xm$ ü8ÑlkùÀQGJÏò{0qD®ÍKeeáÝuOKå¼UyË!3:‡MUIçigZT$JvÑp#:ŸdŽ^ ðº­ë9 ¡ÉIIsBš-»sTò¦’pa9m­(¼*$€5—ÝàäVT@ÙXu}x<°“9pŽE“S\.òk§ð@ÝtgÚº¤\¢^Ó ¶ÒÕê†ã)wÑ’ñÃù,:§ôõ¥ªM.꺒AŽÝ=Æï;co*kÚ-ýNï¯Þ~þxù)OÆ¡Ù‡Æ_6ÈÁýÂV-dnàO›ÇãÂ24Äh
-ê–Ýa˜^Fé“ÑŠå™·‘*ÚZ`ÜY†Ðˆ°ŽWr9ÊØÓ—“X}·pAþÆ–Q²"Gâ¦ã‰Ô|ÚõÂP90 ƒ kLT°ƒÕ±T€sQÞBJø*ɘȕûV1-{@Š÷Ì~fü€¹+Rë¾H㺋*,ÜÖ€®VÕÆã†dþ[«Š›º_ ?•V^‰p…K—öo|丫!Ìs¾RÊxÑ|‰ƒcœ‚e
+x•WkoÛ6ýž_q“/s±T~ÄΣû´aí`K»ÄCQ À@I”ÍZ$U’Šã¿sIÉIUm$1ò>Î=÷Ü«ÏGSšà{J3:;§Bý¶<¿¹¢Ù„–þs~qIË’&Ùd‚'Åè.Ȇ¯è.”YQXKò:/I˜’ >¼X~‚…9M§ÉÂËÙe6ƒÑÛ’n} bm­—,y¶òåu’
+&‘ðT
+©­ñdUÎjJ¦é‘22 Ü2úÝšŸ·#öPZÊmX½Nvw¶e3z9=KqÂPÓâÊZjR¦óPb#<‚›¬°¦ú2µQLy-î‘
+_ÉÈ’¬¡Rj†ƒòÝ÷Ä|Ê ".âH$Ñ è!„ÜaAÁQ*¬ŽkÄÊÆd1–¡»"«m!êA"ÝɘÁ
+5b%=U0SÊ T(ÒÐÍ "Û…Re´  GÑÖÂ!'Kí¤
+mŒ,j¶ò¹•>
+h–²BJµ@…DMϮơh2º®È@O8ø'Ǹ¸Ì*\ Øƒ ?["3¸ä_%Ó'âØQ“+ë_zÊvÞ¾ ¡ì{¥z õå.ž]ŒÛ²‰°ùµmë’¢(6@:ÈÁ|Û3t¶³ô¬ßùH–èßg¡}Ž©u¡°µ#OÞj™ äá  ]õÃcžZ—_Oñ-¤Ð„ú 6[ð¸ùiÜz7Žr7ö,ã\™qUñW_žIdøh`j”
+XÊ•ƒy†øÆY
+â ìX×ëJw¶èH>ˆ3oýy`ùIhïÇM$èó(Þ §@û\†­åZ£$T·§<xH '”“KÏ'¡vÖ(Fô©wpÕªR›ˆÛ]ŽuNHÔ¬á»D®Þ|¬\‡ÕÀŠ>ŽÐi˜´î hÛÇÇ¡LŸoÅ_ ê(íÝè‹,üƒ,$ƒãô ¨¡š‡àÔ,¼úƒ©q¨·i,¡®>HÝ"±Û5Ö3.(¤«Äë„ÒÔdl@ɸbĉ×ÈBUoœ¿~Dz‚áE‹ë– Zø ³(6ä£éŒnÛðý@S/1j•pèɧUlh/Ì`eâjƒVJšÃÈ%†lGè›$Â1~Ó;y"x‡câ$Åj!3‰·t,Â¥ ´<%(<UqïÀ”ƒFôïwß @ü÷$`
+‚9´D@ƒ‚k)Ð_\ $ò\$f•o˜K{EàjuËXÜOáªÕhWì©nÝýxY/œjÂi<»ß=®ÓÀû½Kxw¿ŸW·¨/ú)Ïž*÷÷Sj¤[c¨Ó'~Uð’×h¦ýùï»8~8ߔպæ)I‡q¨ {X<oG{aÝ{;ðr2â3SÝõê s0uÃ+[Tvlu[Yב(Ý5ŸczÚ¡.÷#¯M?üþ4¿œdWxûÂÚtÅÁÛ?GÿTË#²endstream
endobj
506 0 obj
-1450
+1465
endobj
-507 0 obj<</Type/Page/Parent 497 0 R/Contents 508 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+507 0 obj<</Type/Page/Parent 476 0 R/Contents 508 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
508 0 obj<</Length 509 0 R/Filter/FlateDecode>>stream
-x•WaOã8ýί¸×ÕÒ´iK[¸O¬v¹Cºe9èiµÒJ'7qZC÷l‡¶ÿþÞØM[²ôX@
-E±Çã÷Þ¼™þ{S¿1zÔRR}˜}šu£ñ˜v3Ã?]÷¢1 Æ#| ¢I–â¿áîM¿ ÄÂKÄß>§suNñ€&ŽŽñ!õï»4IZq4Œâˆî\Й¸Àaœ*g”]*¥K£D—Ù»ÉÃQçj@qâ´{#ÄiÝ|™|ú&sd¥ó\/yçRå9M%¥*ˤ‘¥#•­uE••ts}OÚðŸ÷ä4YgÔ´r2%+Í“J¤¥B,lÄ'v©ÝâÖ8éO­I8Žc(d}6­ŽtI§Þý<ÓVDôuŽ}ÊR*3\(å( mÅýóŽK]gTj7çä÷–‘›Ë’DŠ ”c#r“UÜzœ6Ù‹pb¼‡Í&g 7UÚ¶­-©>íyz{´ªP¹0ùP¬uªtáa³s]å)ÍÅ“$Q5kŸÌë'—¶Žtðܹr$Sõ?Ð’A é
-á…) ‚³Y®ý2P_J,.×à‹
-뫱kè6‚HlhŒ ¨ÒI“ ¸× é…Sš bMz÷äµv!•­ýúë[®#­m€ÁõÜ aYEÞìv¡#º«jÀÏjóSû³šj‡FiÚP10_öÞT—¿:zD-Ñ’ýÓž-ÒD
-¢a7—@¡`¯8Ä ]rª§‹§L¨Ü a“تü^­L<nxâ¤õ]ˆO;yYßl3:e”àê©÷îpÓšœTã’ê‡Fr||üõòîæúæw|¢ÏLo¨7$óI"HÞhΈFÁ÷ò™3l‰. ŠÔÞ pP{hE$Ô ¼ÆŸgšXWvÁjÚz„e½ë"ÃYU@¹ö”«`·ßod£îÔ¯µÜÔ™ñÆÑa àå^H­où[4ˆnÉXâÈ?±õ”ÒÌÑ×éëÝJàçEBü}ë;0ßÀ·8U"jžs£F³CGT0¾'àÏEµµÖm¢Þ›‰ò]KI]­¼`OÅÐê#)Þ×Q)K™çþv~ëR/b¤
-sWÓ–»0\íR±ŸÍšÃT¯¦¦]æM)œz’ä¡ò2…ºÀ!¥Bº|ž9Ï¡§À0jÖü` övíóÀÀá͈¸áó… m£k
-Ð=1Ð̘€p|íÞ{ùÓá_ÏókmŒáõ^þËqhÍóù-ùpCoôÂâœÞ²×SºÙ»›XwÝÚK÷
+xTËnÛ0¼û+¦èEEk=ù‘Ü$zè3B)y)I•¤Üøï³åÂvÛC+A$rggggùc’!å;Ãr†‹*9¹)&Éý%²%Š ¯,VŠ5Ò8MSUôà¨Ã¼ŒqÝ:2J¸fGW°NרG4ÂB`-Hjõ¦xb°cx°él/.*t« –ÌŽÌqöº‡­uß®QŽÀ˜¶2Mç`µ$Wûdm³%Fh,´¢wèÈÔ¢³¨DÛúe&p}ÙE<óÂV–§ £øpy œÇ¹ß³ëõ«¤lTbkÀ…ei¼úÓ¾¤·&i5SJ¬¥Q²\cz‹ÿ‰UG±'Ò^Ì}~ÖSA
+Ö…;AÏTõN”-ágãê!_r?ÕˆªZê5ðö9ôâ75|¿¡üïÜJ(ß.Ó«s¨¿È‰rÔB­¡ÍÈf ¶1ZŽ‡ÞD ¹*1U<ˆuÚ–#"lœmÓ¶¾:KŒ+§m•háô`¨Î芬%{N^½Sìž^ø÷K–â|ÛàŒ#"?wWx¿¬Ú[ïCÂ÷¯9‹¹gÁå)î­#T6J±]«Ñj½…p~5¤?Háí4Ú”ž…ìZ²‰Ý™|:¨ÜwçŒsÁÅð>ÆÓ7j„s"C wÅ„‡ù|áß«%¿güÂ&ÌþjôG¶XÆþ\à±?žÿë7×ølôU·ºê%)ÇÇ@˜öiˆš†°?-òe΃äSFYê eº_&/ˆQfendstream
endobj
509 0 obj
-1365
+567
endobj
-510 0 obj<</Type/Page/Parent 497 0 R/Contents 511 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F2 5 0 R/F3 6 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+510 0 obj<</Type/Page/Parent 476 0 R/Contents 511 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F3 6 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
511 0 obj<</Length 512 0 R/Filter/FlateDecode>>stream
-x­V]OëF}çWL¥V q’‡J÷SºÒ½Ð6iQÕôaco’%ö®ïîÈ¿¿gvíKH€>´ ÀÁöÌ™3çÌìדõñ= qJç#ÊÊ“·ó“ÞÇ! 4_áÎh2¦yNý¤ßïÓ<ëÌ mUQòä¤ÎIÄN­µ(ÈòI•5™tN::ß"ÜE®Cº\æñmŠ „9xÎ?–ð#}ꦣdD«ëù‡)}ZÑÎÔT;Ïþü}HÎï
-IJ3Äó²ä[šÂƒ¥ØQ¡¶xÚPaÌ–„ç»1=xhªîΓ”³ÈQV…t=wg‡]ç…õuuX€Ë¬ªÇP)z&Ê¥ Ò+AŽ$Ôða~6it>JF4œŒqâÇJZEò/i€
-ùý4™<¡ŒšyYÑhJsËÅ8¯ô:Tï6‚sq'T!–àÀh.ÚZeï¤=ª2åÞv~lØ´]ûY¡¤öÔýÜÜ;oï…€ã¼eC[ÛɽæüÅYÝÆÔENkéi)2PÀ’YáÎ1Ј4MÚ¾æFÿ¤É™Rú —ªˆÍŒµ2óÅ®‘EÛ0'Ñ „èÊx–Dh/^àwMN™Ð$
-gh)Y39÷ÌII÷ü`ƒŠ€í)‡
-±ôYè/B‹5.#;î õ¢ãêlCÂÑÍêf½8=Tl£Õlc äŠô–
-y' Èj«ü.ê”õÌ2])ø"–eå×Z:S%œ»76G+¸ÐÚ=»’ÕÀQÅÊÀÊ µâö3v‹%E…´ í
+x¥SM‹Û0½ûW¼CK³‡8¶“M²=(l %^–B.Š<ŽÕµ¥¬$'äßwd9K7ôVŒÁÒxæ}ÌÌk’#ã'ǪÀ| Ù%_Êd¶y@‘¡¬9²\­QVÈÒ,ã9Ùz:bù¥½ UÎ+}€o®–ÄI¨Vì[‚Ѹ˜ÞÞ•¿“ ÓbÁU&Žì‰†«Ù†Aó1-ÖiÂþžmò14qÝ^¶Š´ÇôqŒÍ¯±¡zcœ×¢£˜·ø«ä21æfú¶Â<öB¾@ Ìaê²
+#RMñ­gTFòA¨†3ù&èVJKc-Iß^F¥ù<Šqäûc
+ü0ž8Q„lN¹¦‚¢u{B拓7 I8‡G/ÁŽ¾7Ô0‹G¡¿ -üÝq7л‰ëeáð\?vwé/FSFM²1Æ ð-¨e²·Ê_¢Ð »ÔJWˆ¶¢Û XzíÉyî6ŽÂ¹³±ë¨ ÓUgÕ¶Ñ`f{Ã,*cW¶¬5ŒMˆÏ6÷צ¾5<Þ_:aš±FAEž§Ì¥ØMÇÁL¾—<ær¨>yVìyïßѽm—¨ªë(›£W<½Ó§¡+¥4¨¸°¦eèã R–kì øèh£§Ñ¡8=nwt|-^Üg<“‹õŠ¿ ~Ù­:nÛúmnyÅþc×0Nm
endobj
512 0 obj
-1189
+533
endobj
-513 0 obj<</Type/Page/Parent 497 0 R/Contents 514 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+513 0 obj<</Type/Page/Parent 476 0 R/Contents 514 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F2 5 0 R/F3 6 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
514 0 obj<</Length 515 0 R/Filter/FlateDecode>>stream
-xWÙnã8|ÏW4ò²`+¶ã\ƒ=à\‰'3öÂX /´DÙœP¤G¤âøï·š”r(³‚ŠE²««««é{êãg@§C::¡´Ø»˜ïÞœÓ`DóoNÎðQ?é÷û4O;ƒdÐOh±ž&9Í×ʬ]Y󋧅-ÿ8˜Çþ qoxŠý¬5ÖójÚb™#a2ÚÙŠœ¥'o‰_>Òþvmi[Z/‰?q´QZ’Íɗ­÷ñ™44!W­VÒùpBfqˆÜÐÄJ(CœÍ0úÔ%CÞ<WZ‡M©Ðevk’zåð$áD;sÀÀ
-µZ{*¥È8(åŒãj2þ<ý2›ÌÿìC
-üŠnÆ_fƒ·‰R‡q¾J#`_îÂ!…Pš)Ð
-ØmÙiäÖ­J[m‚¶ö‘ Ÿÿíz|uwM¹-)“G¸‡ƒ„f¢X
-Z GK È $M¥sy¥õ;Á«Ö2#ÔɯmåÀ‰còÒµ£":ÛªLvÉY*Än‰¤œ-¤5’¤v2„Y«ÀwI›Ò.µ,Bþß>É2ÅjR>¡¿ÀAj+ Ó*ìæ$‹E+*#á»TZ
-p¥œ«d@É;'Ø˺]¥ES¥\=‡ãL÷·×ãÙ59 y'AÕ&H:Š ™e6­
-i¼ðʲ\À«³U™J
-Êg†Ѯ耶K6lº·Å= ÐWñfÂÙÇò%t¹¶Qà :ö6µšnå“ÔïųŽ“bŽ…³» ÖY\ÌS(¡eêN­Ê¬ *µ(\µÙØÒ;:î¬ïòË·ënø{ûç¬K·ãéÝx:h³?Æì@O烶Ñ;ƒ?¥œ‡¤-ÛB!žUQ¯Áp €ώɽ´
-™¤Öäïsî„©ÂÚ•/"GÁG=\+øÁ‡–<ü¸ÄLë“À?…ønKåw/ßÎdbÈêL–·v0¾à³qˆ°háúÑAr[Õ–f$ €eÌ”2™±V…ŠÊ”Y÷¶¥æ Á ÑÂ:®X˜V°m™A‘!=c·ØëÆâ£ÄŠpcŠ:ÛxaÞ›¦œŠ5z׊[J [à ²'´®XÁ»0ÿš"¯@Í,†1a—.­àÑèw¶÷E¾X¡ÄÒÉò æ˜NXÀ!áz*kÒ0°Q°F»]FòyNA}£AªŸ†¸„jc‚@Á£
-I[vÜ’Œ(ÃVùu#8˜Ã •«O¯–ÖnÄEíÕÓ9êTþ=?æ{Nps?›ÉxŸh:ꡃU€k*Á¤¡ÊŒ¦`ÆêËR;½).—ŸhþÚ³›RÁÚT²ââ³4TrS„ ÿªÉè¶ÑÖç—÷‡“{By¹ ›1Õ¿U©¨€ «„n€1 ›Š—G-y†O¥_ÊJµÏåkZbO¸WBf?nM+räv¸$ðκéXÙU!–è7µ¾¬VªÃ›³úv089Mønð³ñÝŘ-ü;<7þ7w(Ž×‹‹{§C|MÈþ×ׄÑY?9ÇW ,?æ#p›øº÷7¡‚ñ¡endstream
+x“KO¬@…÷üŠ³p y; KÝÙÝÜEÒºGŽü{«»áfîøX˜É$„¢¿sNUõ«#â_Œ<AºCÕ{w¥>Ü ‰P6\ÙåÊQEü¦òŸ&: ¿E9,¨´RTMR=ã(§SK˜•|GÕIRÓeùÂ(†Çu•AÂ0ÿ®¯%ì÷îÈZH·ÂpÑóÐêqR¢§PŒ4¼ÉŠÜùì½ 2ƒ.—ƒ¬D×-ÖŒû,Ùh§¨ÿ >ŽzîjìÉž3ZÐ}6Ú8¶4ø<¤'æS½Z½Þààõ5@É-9sñur4F¸ŠS×&¡¬y­t+Þ55R±ºT' ·›F<•æÌٛᙙ`f,lHÙXôËÌ!-_àO«{ÿ²4V+°”Ãm*'¿Ñ Ö$É:•=€ÞEèN‘=˜E±Í•#ö¢ßKU;~æ|«ÃÍÀMóݦå@·Ÿ,mZ?,WZÐò à¾ôx±q¦¼=Y‘ósÂuãîAñoÃxù ²<
+¾L¼ q²
+?zе
endobj
515 0 obj
-1513
+417
endobj
-516 0 obj<</Type/Page/Parent 497 0 R/Contents 517 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+516 0 obj<</Type/Page/Parent 476 0 R/Contents 517 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
517 0 obj<</Length 518 0 R/Filter/FlateDecode>>stream
-x•W]oÛ6}ϯ¸ðËR Ñl'qÒ‡>8‰‹Kâ,v·Pб‘H•¤âêßï\Rr\µ0‹¼çž{îÕ׃ ñoBçS:™QZ\®ëƒq2¦ÙÅÛä”N/Îñ<Å+)ç׿¾K“SZç¸8;;Kf´ÎÆcZ§‡“d2NNº·J{¥Ÿ(·¦¢wþ&oHÐU©¤ötõfý¦Ni2‰¦Ž§ç0t¸6Ô8‰ƒ5–|!<)GâE¨RlJI/Jཫ6ÇádFä¤}ÁÉàIP£Õ7*ŒóÔš†¶ª,IKƒûÔTµ‚_Hv?¦ãÉI2e·°–ÆÈjkž¬¨ú„Û8¨w·•v^À~$—ZU{¢.†HG =H/xÉm“ze4ž9Òp„rc©2vè;“©¹„º˜¦3àÎP˜sê¥cèVŸV’ó-èÜl2#UMZPŒLTœ CŸ"Z$ÞûO\ë^úàƒ†Kíö#u »ïj6;CÅÿ»ög'“€Ý ög ݘôþÿ¥ÂKòZ)h[(íL%½ªC*PyGÞš†ËŒÄËh(D†b} lßòm[&ïOwvûšo$Q--°¯€Å¦e o/;Î$)Wl¿‘•©±Yoi4 I  š-ŠBaÀ+Ž?X¡Ÿ$G²i=BBé™ ÊAº„‚/:cgÌ”Q&u NdÒð˜ÎY¹Z¦*W2ûÁ?l‰`ØÛb³ÕÍÑÔµ±þÇŒÐ\Ì ö§Ú—‡obÇ€^VHðÀ>»È=|ªª.e…¾‚Ñ€­ÓpÒ B =Ž— C’¡‰M*#²ÖìÁ¾;g!c³C@@)¾Hè£FÁ|£…—%
-xì/ ÌB¾6
-±»&e®æM9,ÚÊ[•z$¿/ä
-Ó”¥…Dó3˜òöð .È@Aè\Æ1ÑÖ²Æ{ 6ñ|jP¸@«­h÷ºuk,Ü@áY15Çï HÁI…ƒH jf¹ë¾çdOä8MÊ@Q¶´äÜ…mþU”9ôp&º@NéLB aŒM%že/œQz(¾Þ£€Õ-ç¤^5[ Iƒ¦†
-ð„Dª„.[Êd.šì‰T1ºs¼çÐåòsX…¹ç¾Ü\ŘÒ­óž0H›:Š(û.§wÔF•fAôq±xÍ:ò€Û—k áÔ?eÀCž· .c¨J¦\ØpУq–t0,.¥ ZØ ð¨õÊ„å£l´"ÜI*š¢nÌ1Ô¯Ìè_ü®­z{ r|(}<Dgܯi†]Î=¾“4·a` \Äbä @䜕¾±Ac¬í æÆ'T—W¹£Y˜ ¡yà
+x­’Ákƒ0ÆïþßnØTS©ÖÃkWØ¥eTðâÅêS\5º˜Ží¿_¢Rc0ÊòÉ÷ò~|o– GO>Çr…¬±#k±[ƒ;ˆ
+}³òD9æ8ú$›uBDòY+eª%
+Ù6H±=mÄE\êX‰õ‡}½ZæÜÓÌôÑ>²a®øÙÆá¸à6HeŒ1duEBùbçÁuÇês0nRM¹¦½ˆ¡X^õçžÊpÔkþ«~ņR›0Iâçýö“ä£Ît3A
+—ž‡HôèI¾“iCã¾ÊhÊøN2½lH:Y $ÿÁPwÊ ñ“£kÛÚ€i˜»(QT5™Ö~ïhC5dªÈF+Ñ“È¡å)N—’ºVª;CðYÚð‚å}¹^’PŒ¦ ®ß r»eŒ=þ`Ï÷X  ªÍá.'¾ë ´–Ç)endstream
endobj
518 0 obj
-1666
+332
endobj
-519 0 obj<</Type/Page/Parent 497 0 R/Contents 520 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+519 0 obj<</Type/Page/Parent 476 0 R/Contents 520 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
520 0 obj<</Length 521 0 R/Filter/FlateDecode>>stream
-x“_OÛ0Åßû)ŽúT¤ÕKš6i‰4¦fo¼熘&vf»|û]'tƒJC(Še+÷ïïœüš¤HøIQ,åPÝ䢜|¾Ú ]¢¬ùK¾æM…D$I‚RÍR‘&"¸‘}¯Í~zrFväÏÊGN\"MÇÄù¢àÄÙug»G#„J×592ûc¬Ah·—ÒT{£ŸÀrñÌrGh­ÝA†!fz,NöÓØ<Á<ÍÄ"6µ}ÐÖ`K4Dûî^(kj6è塶©[/bö×rÂ3"Ï2^—ë‚׿Ž#O‘¬6›¡Í ”Bà;ßÖᲑNªÀ»-…pé½o©óŒ%"­uKRüÖ¡TŠ‘³QÇÂzÀÖánÖjf~#ÇÓ}ÂV ¬;²U XyÐÌà_-üÝÙúšV¶ëˆ¥ˆ²½!~­®†D?FÆñ"áFeëí ×I÷·ê ¥â8,‡ÚEEÆ‘@O²ë[òì¾K°îùµ>«lõ}Ö/ÎKóBD;³[_Ùv{~sqŽ[g¹&¾XµçƒŒ6‰Yó1í}“/׉ØðŸÁ>+^œócòp›ûendstream
+x…VÛn"9}ÏW”ò²D" ä2£½ˆÜVH&3°B+åÅtðÄm3¶;„¿ßSvwHzvwA·í:uêÔ)?èS}ºÐé9ååÁÕìàäî z4[âÍùÅ%Í
+êe½žäùZ/i¶VfåéÆš_Í­{úãhö ;‡Ôï§ÇƒËl€½¬66ðzÚb¡'a
+ÚÙŠ|.P°Ä/Ÿèp»¶´u6Hâ'ž6JK²K
+Nøõ!žICcòÕj%}ˆ'‡È H¬„2ôØÁÙ ¤GÇýÓ>¾y<¢ ´Ž›r¡K*ìÖdõÊÁy6d 3ÀÀJµZrR”–Œãf<úsòy:žfá%ÄøݾdÌoN‡ñ¡ÊŸààvñR(ÍhìÖµ@¹õ+g« RÐÖ>’áó¿ÞŽn>ÝÒÒ:*dÀþñ(£©(‚ÖÂÓB2(Éséý²Òz‡àUkY*Ö¶òàÄ3^é[Q]lU!»ä-•b·@RÞ–ÒIR{ìUäÛÑÆÙ…–eÌŸãÛgér¬&2úä¶Ò‘Ð8­ÂnNb>Ÿ·¢2.¼Ï…¡…
+­•YzwF«¸ã›Œš6Fßsm…‰æÄ*p0süB"˜kÕ@F¢åÀZ£úcE¿F¸¿“ÝD¹á¥)E·Ûó³ØQ„¯¹VÐgF£&§‡kŸ"4b2u—@æ2 [ „aŸ…-Aîl½Pz²o[cæ[ØÓÓŸKwð¡-ÝëµMÂe`o°¹Õt/Ÿ¥~/08ó –ð K§Ÿ®X]i9;J)  „–yð]WÎÔ£–ƒ¯6낧³.ÁÉÙç®?½íÆÿ÷M»t?š|MúmžÓcŒ
+´ídÖoûJt/ØQΙHÚ² ”âE•U¹Gnk
+%–^ºgØFd:`‡l„÷覢=7ã|FÁív!Éç8õ©þ6ÀÌÕÆÀ€‚15
+ë:Fô.¹*W÷fÖnÄyíÒ“êä??œñµ¦N¸¹ŽMeº>4õØÁ*À5•`ÒPeFS2cõݨÞwÉ4Û÷ìÆ)˜ú÷JV\|ö‘†JnŠ8Ð÷šL>› }výp2~ ”—Û°PMñ[•J
+ˆ²Êècj±©tWÔ’÷D†…¬Tû\¾U0 öÄk$döoÀ­áÈ'w—?^ºÿÿž>¼f—¸ÝãÒÛòê_þ¼CÌAendstream
endobj
521 0 obj
-452
+1448
endobj
-522 0 obj<</Type/Page/Parent 497 0 R/Contents 523 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>>>endobj
+522 0 obj<</Type/Page/Parent 476 0 R/Contents 523 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
523 0 obj<</Length 524 0 R/Filter/FlateDecode>>stream
-x¥V]sê6}çWì#™)66ÞhÚLïL“¹í¥s_ò"ljlɵdÿ¾gå0é¶sÃLléh÷œÝ³úkÑŸˆ1Í攣7£Ÿ7£i°\Òå_µÇ,[̃%%˾Ç1¾V’v¼/ÓÿÃòðéâ)mv@Ÿ/–´Éü{<IÇQ:YQÐ'íä¾Né==¡¯JgæÝ’–îÝTo–Þ•;ÜmþMi'
-8]|ßX,µQŒ‘‡OÔþÎM*ræ“úoÿÖ4ËÄþÊÚ£<`>Í—˜Q ÎVí·æ
-ùÀ#r©÷ý½¥¿ â8Mw.9/l)Q‹Ø *1Aw¦®èuœ¼ÞaÎ¥ª@æ¤köãE¥Àm ;¶g¨–AŠ×1‚,e¥Lözç‹™|q­Q›w%àd.=
+xWÛnÛ8}ÏW ü².hc'Ó‡>äâb‹Ímcw»´DYl$R%©¸úûž!%ÛU»ØEQ@±È¹žsfôõ`BÇø7¡Ù”NÎ(­.—¿¿;¥É„–9ÞœÏh™Ñqr||LËtìL%ɵÎËÊ%Dï=)Gµ•®©ÄªlIÐÇüãšVÍ:yµür0_à*ÍÎ’)žÏð<Å+)žÞЂ§“7É龬Ò^é5åÖTôáîý?ä <\•JjOWìa?Ø£é,9ƒ‰ñÒPã$ŽÖlBZò…‘Š¡J*éE ¼wÕêh%œÌˆœ´/8| j´úF…qžZÓÐF•%i‰c 5U­`Á’8¦£É ²ƒ[XKclµ5k+ª„>á6êím¥°†É¥VÕžh„‹!ÒQBRÀ ^òAÛ¤^gŽ4¡ÜXªŒúΤGjèIÓô,Ts¼,$ª&‰ÒqñŸ“ó-è܇ÚdF:ªš´ ™@›}ÁÅO-ïý'hþKÂO†Kíö#uû]}zþŸ]=™ º~cÒgøý×ÞÞk4ÖJA›B!\¤W¢OzîÈ[Ópƒ‘rM…˜Ð¦Kä7†|[ã–ÉûÓݾÛ+ITK‹ªW¨ÂŠ¾¸½ìÐ’ÊK¹²À ü¬LÍzK£<bÀ(§Ù ÔAˆâ8ñƒz-9’Uëš.ÈÔÀN¸lìËÁƒÎØcd”IÝ ™t#ü
+W Û³°Ö+€^hW"®9'SZ)µýÚH‡n®¥–% 8~¸êˆê:™„ ýÑA¨p‘P±,²@Jd÷‹Jò¨ëR¥]AŸÆàþ*Q?º¿™OxÍ
+.T¢. …xò%bWx̦Ùnk 1=¦ƒ¾Áß–öû¡’ÐCÖpgöMðŒ²¿p1`úðµQˆÝ5)c5oÊaÓުԇḓr…iÊŒÒB‚ü †¼ƒ=< 2@:—qL´±ìƒkȈ$Ÿ 5h\€ÕF´{lÝ 7ÐvVLÍñ;RpRá ƒša GRí0Ù9Α2€@”°í€-9waÛÔ*Ê8¤‰……Ç-*§t&¡@0®M%že/œQúRp øz_0T·œ“Úi¶‚¤†
+HÒLÀ@¸ˆÍÈ€ˆ9+}c5‚ÆXÛ̃Ç:¡»„¼Ê-ÌÂLä”Nîÿ22ÚOÒ´€úÞøÇfÍþh cF£·¼ æ;‘‹sÙòLåáÎ#ÐÄŒ%MÚJaƒÁLëíè5œ [0çTÀ
+-Mã
endobj
524 0 obj
-1213
+1689
endobj
-525 0 obj<</Type/Page/Parent 497 0 R/Contents 526 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>>>endobj
+525 0 obj<</Type/Page/Parent 476 0 R/Contents 526 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
526 0 obj<</Length 527 0 R/Filter/FlateDecode>>stream
-xWÉrÛ8½û+ºr¥Ê¢Û’œ99[Uª&‰'Qj.¾@$("&
-ñ$Ihúx÷†D–Yé\BwΙT /3:*_‰ásò…„+•8ÑN’Ñø±/·ß/æ4]\%KŸT >Ü·'Jœ¹ ›”£OŸ ‘”Â+£]¡8Ä¥ÔìE¿WÙ¹ÙKeI®N Ω½®¤öndXÀ®°;åb6–2åR+ÙßPš´ðµ•ÑsTä`'œJ©”O² 6ºd¥¦ªj­Òè+yñ(JN^í”ÞŒrˆ‡ }U+ùnŸˆ˜uäm_š: ü¨%¢CÀ{©¥ w­¬„ÒŽrõ r„‚§‘Áƒ°^¥u)lƒ+<» qõ"“2[…0œÔNåÖTÈsKJh±—œY:Hë2õêI&#»^_
-f „sH¬€q“‚øt`yC=ð2V€ÐGZ>-B°Í›Ô”¤ªC’ˆBÈ,86¦fð•ýzÑ¢E%_°/
-¦!¸É×›Mù„HàÊyU 4'4hÂ
- i¬‚p­’¾0ð‘b¾9úööž&ߘzo…{+*jO~xÉ€£09j+¡
-8‹)
-íbY£.Íc’ø?14]^Ý€–ÿMÐå|FísŠ^ýš¢œÞAÛæ4"A;A,jéú|(ãfB«$‚cÉðÏI~¾çÉk\àfxOyŽaRf }S˸{¦V&Æ”0X ¦™[b›¡‘ö¾Œ«Šm£—¥2CgnûÓéÊ` ¸è¼­S~/€v‡úc±¿e%X E7qj¤æ+Ú ÑåNé¬= ïo\aí²ª.½B?Œ¸·Ùœò«ø’„¤jÚAËÚvÁê««fº/¥À¨neÎC_(âýqé¸Òá®òÚâh¼ûH4ŽÒ…†Ö0k}Ý¿Qž)ߦQŠÅjðë)‹EO­¯w_ßñ˜ò¢\Òš‡‹Ð¶8¼iÜ5Û&VŽ‰À+¯7óä6*Ñ-_í¿/þ0WÈendstream
+x’_OÛ0Åßó)ŽúT¤5KBIÚG`câ©Ù/ƹ!¦±Ùnß~× ¬êÃEŠ•ûÇçwί$GÆOŽªÀy ©“«:ù|³F^¡nùO¹ÊQ7ÈÒ,ËPËùežðÓ“3B“?«Ÿ¹a‰œëbâ¨Ò’[æ·-^íØÕ¶äÈì}°¡#Ü_{Ó`<ìŒzWìÉÅ3Wˆ-A ·v ÆšÙa´fq=/ÍÏÓ".µCPÖ¤À†h¬öú1•Ö´\l0ˆ'Bk
+Bõ>Ý_ë„Õ¡,ÖéËUÅß¿Ž+a\¬‹QÛ;Žï|K‡ëN8!m(ü‘ÁÙÇž´g g«zqâ·
+„” ‹˜Š<ŒöP#0‡y¯˜J„÷ëú„f+;Xw„c#­2b¯Xýû,FüÃÙ„ø–¥J«µ&v!:öì½èU3vú0á7ùË5z'zo6Ÿ0nõx°r͘4^„zò¾L°îõ£5©ÕIkVo±ËË*æˆ~Èêæòîê÷Î>óL|±rǃˆ ‰·]L]‹©ít²—Õ’WDZó¼|KËäCøAendstream
endobj
527 0 obj
-1684
+445
endobj
-528 0 obj<</Type/Page/Parent 497 0 R/Contents 529 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+528 0 obj<</Type/Page/Parent 476 0 R/Contents 529 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 11 0 R/F9 12 0 R>>>>>>endobj
529 0 obj<</Length 530 0 R/Filter/FlateDecode>>stream
-xWÛnã6}ÏW ܇zÑD¶¼Þ8»oIÛè^ŠèK€‚’h‹‰TIÊŽÿ¾gHÉV”¸ÛHli8sævføÏEJsü¦´ZÐÛkÊë‹»õÅïë‹yrsC§?v‹/sZ¦i² åÍ
-Ÿé
-Ÿ­¤ Á[è9þüìã{J—´Þ@ýõ >áýœÖùt‘,’eBoÖß/fÓNl:“>ŸiçöÊçe’½‰KJÓ¨çj±‚žéºTŽ6ª’!oMåÈ—’Dî[Q‘µ.gªÖ+£É »•Þ%´†L<æÊEU¨.Êî¤%“}—¹'×È\m ÀÇ Ç0æt•¾…Ã0¿1UeöîCD7§÷ .¥«Å»„ÝœR÷ó½î«BhŸ‰ö&ÆÏé {s/íNåøBÃ^oÔ¶µ`ð(9w¾{¾H“롽F ÌŇ)4Öðç”Ðmå¥Õ0·“$q%c)¨1¶ Ñ"Úw1#aeˆÎkžÆCGÛÑrp‘F^«B4´W:Sº8È•¢0ûÿ‰~kMÛœdŸ»:ŽKiœwa.²«ÐÇ2x‘£sáam/Êñ?cóÜ~´Ë!0Î/T¢®UAEÖùq ×9tZú½±G§8ÄG½gªC"™öx‚‚õpæL>k¼Éц]äŽ6ÎÈÛ&ÄøÇú],ÿ^ýs<³=?\q^ÇýºA€Zëä%I‘—d6LNR-óR
-´Mî ´1òàË„qLFXa1¾0;PD§¡<¸ôc &‘ò&À§LÔ ž0ü`3˜Æ!H·ÜÆ ¸Æ(íIyNê1Ç°1Ω®VŽÐ‡a}Ô  †“ äçS½ cñî%×feø42ÊÒ¿N¾Ò£ppΙŒÃH
-M°/È)3¨~éBGõj8¶ütP¸ý«L²áÐaY‹ëØM¿š¡ûÅl¸†¥/Ö°·I\0ëœiò=ïè ñz^˜òq/
-99îvL­­/#ÚôÚ—#WÂ\(R,l…0Jñ Ô)âä@E Ì,nYÌî¨ZNzŒ*ÏõÓ&w²"¼À[w+tŒàÈøÐNƒØr‘¡ áìqôÑ8–,Bd% p€ûq
-ò6Ò<ÜC"Ì‘eø†Ed§˜'ÁA!»qØÍBìx¯‘‘x- l³Ýçˆ3ó="ØÀâ%¢¿ÌÜt¬Ÿ^¯’׶4^Sîo?ßÝÒ7kÂýè7“‡9bÇȯ¢øÕjÛ]Ñßî^¿ü,WKè r霃¿þ¼ø&wÂendstream
+x•ŽA‚0E÷=Å_âhk¥¸ÕÀJÆ^`˜P°¨·wÐ;3»ùÞ›»P<
+Vcž¡jÅʉ´\BK¸ '™ÍájÈDJÞTÑúJýxÐ 6ä·äA¾ÆÎaOÃðèBÂWáÕMçgî&$bm˜5GjOÄ—Ï)HËJ}%q¶øtþãh¬Irþ˜]ÊN†Â‰ƒxÐv>endstream
endobj
530 0 obj
-1574
+154
endobj
-531 0 obj<</Type/Page/Parent 497 0 R/Contents 532 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+531 0 obj<</Type/Page/Parent 476 0 R/Contents 532 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
532 0 obj<</Length 533 0 R/Filter/FlateDecode>>stream
-x¥X]S7}çWÜÉéÔÆëP ´3@œÔS ›Ix‘we[aWÚHZ ÿ¾çJ«µ³™iši°¥ûqî¹çÞåËAF#üÏètLoN(¯.“ÅÁhxvF»»Æ/#úåô ¯Çg§xÍÆüŽ•´â+øvºœ?ú0¢·´XÁö l-Šðñˆù!µÿîµúÒHº–þbz3§kQI÷ëëÅçƒ 28Ç¥îlº3;¿ücz=¹>ŸMÞF¿Óo4—öIÚðMå’”#Ûh­ôšŒ¦½ã?bø þ(µ´*§™È7J#NÄG‡)\_^ÿ€Õq÷Jè™Ð)j‡àÿOÔŸnîþüxwsû.[rÌïM%ÒΓ k¶ðÐÆ8Ά'û~´¦©ÿê;7£¯  X¹VìN´|!Q–TÉj)­#³¢îæw€êνËò½D.öÖ”%[;b¦”f²Æš»ÿn³`›W&e›°!ÙÆT#S-}dÃt¦û‚•£Ç”eLùAFƒñÉpÌhO=¹iJ€#I”üFø€S¢Ræ¶PâˆT–ÌV1Ï G5*Š÷I,Í“Òbªó—¦'”;añ&ºÍ8¼MÞÐâòöhzK8é<Ê#¼2ÚÑvƒ’ŠßÀ/Á¼{A1+E¥4êj…7–¶
-e¥B"y¼.Óáì‘ôùÑÆ8ßÁغǕöÈûë9‹¥p>‘yLˆ¼ çL®ƒ²U~C@BEa¥sÃÄÜ“á1cyÏ«ÆKµQÚ3ÃòRXµRyH«õÏ!L6Ãz«søuÔ»²ÒJ•Js‰$qäVæÆŽ
-õ£Úš'UÈÖ|8•’“#ÿR3D+c«ì!ñÙœ>)] '´’Úî¬%ÜÒ¨S ~z܆¹`É%}àû=¯•x¡À)) Y é\“|U pÑ·ìˆoD 7¡äé}ÑVp8» Rf)é9íÇQI;$p{…„¢³j‚×Ö‘!—@a@Ñ öz P›ÁbÑ€Á<B˜Ÿ” Ñ á¼´F9þðšp•¤n* ®‚ÉÁ«Pêª
-tÝã+>En<¤o Ej‚Þ)ÑSáŽåÒ éÓFù$kÏw›€¶¸he æ´a€9Ž€T“ÁcêìJ„ÁòM -p"dýjkìãšGÀ+~¯b¹_ÁCP‚4`AFVcÓxÁt…´10Ù
-ŒœœZëЂ|Ĭz€!¡;a$°1¢óÆ* ‹ëeÌZîÊ}ŠBm9VV<
-4ΣæÉ‘1ÿãünB³¼$“¯CDuóM; ¢þ~•r‹PâœÇ9ÇÛY+óÛaŠðˆÞK­ƒ Ž § J/dêÐ3:ÚtñðFâALmm\„ éÆ–½ŸOîÂûIè”÷Ø~Iö
-Êêßp7~i”å<ÀX]Î&6ë•€XxÞòÖ”`ìÏž=ñÞ&0.jl?i8v¥J­Û<&
-hÆP²åKÏõ5 ‚ó#ª†b«¿ì1ºl—¸„‰£>(ßäï÷bÁºÏ@-â–Ä?òsXÈ0ºû—&èši¡rüz†–[ì%©0dP#S6a(W’AQ®Â´£y&[\„HF}VeKλv»¶
+x}R]oÓ0}ï¯8ÚÓ¶¤¥Í^‡@BbÐHÓoí›ÆØÁvòï¹N'T!„"[‘ïõ=>?Wrù
+ìJ¬·Pýê¾^½ýx‡2GÝHe»«PkäYžË‰ºþd£wzTÑ8û¦þ.½Ź÷¶¬²Rº¯ŸMl[†æwnèÙF¸ŸÉ>¥#{Õx6V»)à±”ëŠæÐ1
+ar^ƒ­òóÐ8=õº‰0!Aç¸-Ög@ë&Pº‹èp¢ÎhŠŒ1rÖòB7ÀXð/R±›vzÆD3(
+¨;:/õ•?ÂbÅÔR’F —=ƒd™Åâ ªu.{ÄÔrjf7Š±W„‹^q'Ëœ…Ö†gÒÉ1%ãš±ëæpX’qKx䣘çƈÀjfbˆ¼ŽÔþrùêË·§ýR{ÿô¸¿Jíéqc>Ô+ÉÞíÖ²oªì¥,Ñœ#Uý‰‰äè?Úì6Y%Á‡‹*É_W¿ÂÖ.endstream
endobj
533 0 obj
-1999
+420
endobj
-534 0 obj<</Type/Page/Parent 497 0 R/Contents 535 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+534 0 obj<</Type/Page/Parent 476 0 R/Contents 535 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
535 0 obj<</Length 536 0 R/Filter/FlateDecode>>stream
-x•WïOã8ýÎ_1*Ž•hi»,¿´:©”rW ºÍÞj¥J'7q[‰ ÷×ß;i §À-H¥$¶gæÍ{3ã{=êâ·G§}úxBq¶wí¢½nç쌶Åÿt©ßÇÇñÙ)~:ïô©´àx‰c6X~t}L½E œ~rvJQâßw)Š„Nh‘–v%ñ·0¹•¤XÄ+yÈ_5‘Ð$œ“YîÈ’ÏñJè¥$A™´VàÛ“r+¬Ž2ìSšŸ¤)Í%Ùrþ·Œaã‡èï½.µ{ái”8•É¶)%2kÛ!%/hì~±¤E&IYRz×k`п*¤5ié”k©1eÌÙ2Ž¥LiŽS9ˆÚ™XèWƵq@ËæF'ŠV0†5ì/(­+„SzI SPiea©íÏTŽÝ„ø ;Y(ëTLfá­å…q&6i§²Õ?és <¹Ò7¥ód Ž§Ê­\"Mù™|™Ò0ŠªÓ&Ò]Ž¿L)„ìÓÁÆcì@žZzÅÞKšŠl.^…(”êQ¤R»p$6¿8 ›ìZÞ_O2p£×Ev§˜]5£Ž®Ï©‡h˜?ŸNC`[õ;Èiðäæö÷/ÓhJ •Jvh—xí>xÀ~ÏDDkä1!ç;XM":†Hõ»à´òy<º†D*2oè4¼˜Í¾'“h6›~ŸF£ÛýÙìê~üçè~:›¢áKo@ê„b£PÈ0]Æw4HÐ9ÆË]Jj0ÊAÉ+¨s¡
-˜3¬ÔþP…Çkã>ü\`Xf©Îµ·Âƒ'¢ò$yÎ\4…B*eòš]cP}+æ£h,¥êA^ÔŽœsÒzÔî
-l¤êgŸ†&_j¹r4;ˆg¨w~~F·*.Œ5 ‡×E^+Î8u›Í5
-Ë båÊm4zŒX@攬a³7¶3-„JíÏ‹d´*¾ N­ý]†µP–)a­‰ª‡ÝˆX@ksZ *ÊŒŒÕB…T³—ë ÷.()v–VæéÍ“çf7`Á%05Koü÷¨b`<—+ñˆG×:–úQFsÝáIÁÔ(7ºÍ™dé„7¡&¡n0$§C
-S©–°kz
-h Rž–“„6CákÕ3Ž—²ße|7©‘ðsnú„¹¼vH‰Ô¡]-WlÑÏ÷`K£ÿ<û@MO|…xÉK>ýQIt¡ŸgÊÔ'nÍÅ­µÿßzR‰sº[½¿næ+4ã˨YÒÄsÏó¸ 5<ø¶LÙV-Ÿr/
-ÆBલð È7¤ÅnÚÙ)}ŒÂ¶e ú:¶ç‚uÆ¢:Üè8gsc&·HÕ?ØTuŠ0Y#
-/=¿­yüOqéã‘°5)Ót
-Í¡»NÙ–õFL‘ HF'mu 屑 ]ŸU——ÞÉI§G'ç½Î ÏÖÓÁíå€î
-ãïËW&.¹Xø;!ïk÷NN±¼}ÚÇ¥=9xãÊu|zŒiݯêõy+îvìý Ì£Åîendstream
+x…WËnÛ8Ýç+.²I8nì:¯Õ`Š63Ú
+-6Ò’Ô•}Ýye4)GÎtrh„'§:Õ
+KÞзÇÏ?ˆvÂ98­ ¦´l$9i_à§w,h­ZI•Ñ^(­ô†3¸¢ËÙûW5Â5²¦Ñö’Ì&°´gn 0%¸E*øWY)<¯^É‹-ÜyDÌ-bxùÛ¦ªÄNyÑ*LJ•Ÿ”ñ5òWðaáÉöºž¢ÈÙQ<J0îêº|<ÀŠt߶ñXN2™¥r2r«I8òƒ¡ë›"ü
+À|üôD[ùŠ&·’Є³NlTu†ì61¢Ï ­í8A³›ƒ/hhTÕp—ÈycS—öx]Ñ«VIí§ôEz´†ƒ•¤­6ƒæ¬C{ODñÓir4¿™.˜=ß•®Íàèq™+HìÔ }4÷W ü+u²j„V®›“Â)ú ØkjÒôõã"p‚@@Aß´ªL-‹ÌÁ/Ç!`w€ÿ;óåˆÖÚYS÷U bn—“jõLmn™6úÒÊàwÕÊ76’“‰ £çƒq™P.°Ðw Ù_Öô;·N÷×Ì¡|ìqù|Aƒçâéµ'QÔ÷$º• Úª‰h°‹?>&+ém%Ÿ/&<ÙkeÇÃ_½tžGÕ²
+ ÐIËñ
+sƒ€ wěʴø„âñ¨žªdÓ4ʃ͑”>ëàÃÊ]‹4øÀÍK±ÃW1Çd¸‘ZÚ™½‰ÝNêjº Ä-§Ñâ”é(as½#@ⳊÁ"ˆµ½¸®˜Ÿ©1Aˆ#“ùÈ)È׶Roäi˜×7•ç¯Ù²Vëµ´ì‹‘%æÆkfÀ¾Ã%S–“ˆˆš»Û^Ì`Ít S‡.ÖÒUV­X.Væ% ;†'Am®ôf‚é,pó•C¬*£¬LH
+È&eÔ‡ Ijí;“ I ªÍ<*bD§ˆ}Üft‡áF—Ó±,‰>O_?@˜Á)üýáQvÒ÷»èʺf©EË[ Yõ–¥ƒ1q²±e&!ïäÆ’ÑÜ5–ØÞàìÀÛ$øÊæô9¢E^VïÅ4cËÔÇ,r”zØzÑ Hã8w!•ÈŠ€4÷¢ê[¬HZ žÑX…šV;&kèH겚‡c9iŒ×›ÚÇ"ò¥þOh£^ÂbÃrÊÕG:–È-Qía±\¾æ™ËòÊíxSÍügÿ)T€•’&y\öl•ç NHÑ·±ÐçsìþšÖÁV|îÝnCá*sN®[…³aÉíï8çñry0]h´´`+{ÚSÿh)xlå†?,òEuk HdÐT ·²Ú‚e4‡¹T¿£.³zgì!ð0ŠÄ8:WÄá„kÖÿÜ’È͹Ï!0öGÒ™…äoQùö5?ÊjböVË!r»2ÖbÚÆ­7Ñ[ÄF¹F™E¦ãðjã1-+Ùš!u³å›ž—4ž±æUXÒí[cû·yÕ
+›Ì@ØXj"ne~
endobj
536 0 obj
-1741
+1404
endobj
-537 0 obj<</Type/Page/Parent 497 0 R/Contents 538 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+537 0 obj<</Type/Page/Parent 476 0 R/Contents 538 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>>>endobj
538 0 obj<</Length 539 0 R/Filter/FlateDecode>>stream
-x•W]OÛH}çW\%›• $!å£o@Ân$HYânµ’¥jbÉ´öŒ;cù÷{îØqZïBiilïç¹çžü8Ò
-;Í/œ?¾Ð lŸÂVûÇ
-¢Õº´”$–©¤ÂÀ’ˆ©XIJ³•q…£Dá+£H:—”iºîS°RŽ¾Ë5á¿RÇÒþ|;ÐÑ‘ÂÃŽá0ÌD´RZ†¡[»Bfa•ÖJ]DFÖ¤Nx$í“‚ý0L…΄ækiÃ0Vd²O4\;„ Œv+a¥kõ©´ßÊGå
-‹p*ËÓ5‰8¦N^.Su8SŸ$ŽPb_ZÙo³ÚvµÔ½šþ1›%3Ýé|òõò6˜>Ì/ƒ)WéÙØØ‘HSóLY™*GA»³ùõíçÉ´Õ®+Ê…B9Ž z´¦Ì%â4’cíÓ¥^“Súq¯?¤t”–±l5ü¬Ò”"Q:´±{³ì·XÆï¯ÀÒHn}HÚè£Ü*] &ŠÐ$qïàLs2[Ê8FhP&ò§-×­&Ê¢9páþ°MŽw.‹«Ù§i ƒ-ý( *Ũ8äçšJ. l5†ƒ­nõ¢O>—‘J€ZÉzi‰2׿NêýU
-{bž|À$HÓ E«=BÈ$9Z#_
-©=Ø?¶åÑvŸ†ƒQÿø¿g~Ä-&Ðl¦º÷SêN>Ý}Ô²
-
-ÃÉÃìïéÃ" §çÿm0=?ÍÄú.Îîé2Ž!Ä0^•|"Üb͸YÍ™(¢Õv6j×¹À^ïÓ¬™lld²\WØൣ&-y©#‡Ä
-lÈ2*Jn¯ÞÉ÷b™£1~áì
-‹Ç7¸¾?žÝoZY»•úIY£¸Œä’¨G˜Œk9»©0<„ú\Ó³¨B’?JEÀ/Vë™>kõr|«tùBûîË":öºy¿›½Ÿ@3\@,ÿ7h†g§?AfܧÉ|A·~äö@ï@&¹XªT^¦oóån«6.Êœ RlÔª€šyyE‰ˆ¼5´.!©y²btþu™A@†õL%Ðv:éPG‰)&.¥„`€#G
-šG ßcùy¥@+ÊUý\y›5=Õð•ç¹‰Ñúu{›¯ û†Îƒf¦í98P&ñ}ƒ!H´\Z샨£°
-²ôyòMÍ‘ðwŸŽ—ªÇ5uWŠÈ3*Òå,]¹ü&#!¨J†yE›ü>óUõ-¤nN¢?÷*ÏŒ+}¼õœïhÆÅaÍ'<‘·w· ·Pã2úÎXGïÐq–¼;…8¯¥³Ø”à•KàýU9xøV•¾ãÙ¨”´² …—a|Ï,yÁÝël—Ooc=ÜÚìzbAcM™ió:ŠÅeÞ¥ß-ì{^óÞðô¬Ï߬ñ¥wçÛïâòîê’î­ñ]™˜¨dnðXçôª·Žª×z¿dëñÙ3Ìf{Ã~ ᯃ§Ç•Ìendstream
+x­WMo7½ûW z©X²´V$¹—"Iã‡8h¤Â(š(.WËh—Ü\)ú÷}C®>¼I‘¢(lÒ~pfÞ¼÷füùjBcüLhžÑíŒd}õzuusGÙ˜VîÌæ Zå4Ǹ"uc]&У ÊÓ«µm-•l‡«Ox{J“Iz{˜-FÞ¬JE­Ñ_H˜œ–ï^S#¼ß[—“2Òš ­¡ diôçÇz¥jòºÖ•pD|øÖBª­JGÒ]D%í¯©´{µSîšSÓpr›[SÈoµ¡\©†_í!/KU+
+‡FKQñSÊäžd¥2¨/ᔣ'‹“c
+בö–ö¥2D•Ýl´Ù6£^ܘ"²\‹<å¢/jí¢ι‹Ì%¦ðÏ¢_O±×@\Ê­ò½¨>X‡’pÐdFëCÀ¥ð¥Êi'*ÆHæÚo;‘Ÿ¨¼MI>•‡Ÿéµ’¢õÏèN8!AôâþpnççV#–2á‡ýa[’‹d•Ó»t.Îw?z:ÁK…³5']_—†O’¶­rjÀ1tlÏó*ïEFcÕ6×…F•€Oã
+–6‚oI©¼ç¯ ;`ÝU¾Ç;…lQŽ´Ækd(ÖK4'hkì¾RùF1nkUŠªè…·ED[„ 䌭ñÔ(W(@ªÆz¯qìˆ"¾ŒCÙ"+§D¬–|½Ž
+òã‹qv7÷/;/̲ ø°F”ž„3ˆÈϼ]]±»F‹M>üÊWhúr6ZÐt1ÇçÉì L]&>:lFÓÛñhöÌ¡Ù—Q=¨…tr»÷ô¸¢)ÎXB
+™¼µN¬%Ñ(Ph
+ôc6›w9važ&æ»%ýò~I* ›ÎQoA cDn-¼–ozÄQ›ˆ ø
+§°Š`ÃÑéL ˜ÑÍ›‡ûe7êàbmÃ+Y_ª;-b«xÛê1ô &ôFÝ|P¾ÁìSTcõFû„õÒé5Œ¾ÌZ|ËZ`^®F=_àU$-–‹¨´¬T¬uÅ»—à =OêF8 Œ—[y–s¯ (—ä•4™ÎÁè䌷ã;`´F6ÍÉí_Ó­ ßq£8î´“yÚJ'ã ¹Õ¾ÊwXiņ7¤"î§oOkiêБ
+q¡fóhºƒïié›ÃŒ‘‡`,x˜ÔËá1¶VÖðÆÃÈ‹ý½ÑEyÙmUŸ0Ì9¿áÅÆ %ò^}¶¿å3à<!β´ =/ì9¾è\$íòÃlÒÍùïþ#0O3þkÈYº÷ÛÕß½Ûïêendstream
endobj
539 0 obj
-1654
+1450
endobj
-540 0 obj<</Type/Page/Parent 497 0 R/Contents 541 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+540 0 obj<</Type/Page/Parent 476 0 R/Contents 541 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>>>endobj
541 0 obj<</Length 542 0 R/Filter/FlateDecode>>stream
-xWËnÛ8Ýç+.ºrD¶\ÇN t‘ôhÓ ìA1@6´DGlhR©8þû9—¤YMÁ4¨a‹ä}žs.õë$§ þrZLéÍœŠíÉÕêäÓêd’]\ÐóGs:ÏgÙŒf |ŸN³ j$m°+‹9~Æ•|Ša¶°‡~KùŒVø_àKÖ'´*FÓìMvžÑë›%}µö¡­_¯~žŒ?Ï(Ï㉳é'F—qÏÝè‡2¥Ý9º6^6Fzº[IKÙ<Êæî59|Q…$åÈW’ä¯V=
-i<ÙMx@ͦÈ'“|Œ)¹Zj£dI7W7Kv=¡³üM6e—w£鯮¿/]d”baW²!çm#ë±8¦¤ë[e‰‡¾ž*ÔÈ{å7®÷$(%3p\hÅ“Š!¯>ÜŽaÎIßÖT Gk) Ý«G|®–Â!=#c…b%ØÿeôŸ%ëÓ9Z‰´V–
-k6ê¾E@K±] ò69nCJ‹«·±ZÛ2÷T‹©!r2R–œm<R–Hßywì°:7rÛuÆŽâ㮡#Ú(-ßu{ßr“s:›žÇà(ýƒSG®­kÛxzOÿHwlæŒÏÌcŸ^N¨uÿ1#ô …y!eB.]ðÿ+ÚËÁ2’@(.ùqV6ïééé)ëýÿs‚»
-ˆIåvåíd+ǧGþŸaHzMÐäŸÐlñö™ê=>÷Ù;›gs$Ôçï,£/vGë¤d¤lZSxeÑ>¦A…%À£”µ¶{PE¬5Ú‚~$MÉ¿»b±  XKm°zœ*›Dñ£mbmå)}[v”¢­(*e@¾ŽsÜWÕPÇéHUº)ù.´< ^
-ÿýñv0(Jxõ­¸+
-eÉF?¤|ÚBC®Ö˜G§Ô Ù§®<0
-*©!þ!ÖMdÈõÐûald˜q0
-l8åÛ
-$„*†ˆ1:²ÞZ/û C²;Û<€B‘©ŒíWi›0ÆBä«çÉq÷zØß¡›Çc'UëôeøÒN¡›,íèˆf·‰æÀòòL¦8 yÆŠd´ä¢Ö¢xÞQ! —¦±-W ˆ“¯Zñ`ñe#ñò
-zJë–™éÂM×\ÆbâQ(-ÖJ3ðL›R0HõùaŸ˜¤xñxàë~÷¾1î d§»ú_šýáîæ J7ˆ5ãáw‘ÆǨíºÐ0§
-žª\Kù='Ûð;I!8mĵ«ƒ*(Aø…€öÒs×’eWáæ«€MÉP‡ÞðJ‚—º(ªãÏéœÏYNóyß–—ß®.鶱<Ìè£-Ú-Øòä`Îâö³ÅožåÞ<g‹n¡aC>ãS¸ÿuò/9šë©endstream
+x•TMoâ0½ó+Þm©TR #h·ÒºÚU#õÂÅ$p1vÖv ù÷;æÔCWRðxæ½™÷&;1úüÄÈ R›Î,ï<=ÇÈ«p”Ž3ä%úQ¿ßG^tߤþ•£4äô7%×/ÔZê%¼€#»% ø•ðûK Ñ×—H¶­=•¨…s;cKá§ÇN*KUãˆ3ÍCþÞ飢„±» kvð+:U—ÕÍ?¡œÔàŠ¶¤Àw‹ÆJßbcJºÀHí¤ó0µ5›Úï™séz\»Ç9³ Y$Š
+£5^ýˆÝJò‰tà¾[­MË5#ä\”TË5øÀ¡5
+¡yxaTΛ:DÜ(âh˜ÄÕÄ(B¸ø#ï°Hi”b8Îø=áŸ%Té&ˆY°ŠEM&ÑøF»i¹Ú‹%9˜
+ÚèÞ'‚”§çâè€dÌô’ŒÑX‰y’f{‹dŒqVªV‚EðôáÏ#cm˜œ6kª}JéÖ‡n.8½}$†_Ááé88±¡3 *©‚c›X4Z~Ø­,ÂÕ†â 2Kæ't‰Ê×·þ eè‹-´ –X(K¢lY·à§‰ þ¼{bàIiò'
+ó‡£{1§«éûºw‡ Ë6«<‚M2Þ 6¸æ°wǶ±K”$Tte áhÄÂ}f ñQù8Í¢ð]à­¿Zÿ×éËlŠßÖ¼³ýñÝ͆ØRaBõÞ!«wHë~ÙpÃlÈtT7‰4ÿtþN gendstream
endobj
542 0 obj
-1693
+582
endobj
-543 0 obj<</Type/Page/Parent 497 0 R/Contents 544 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 27 0 R>>endobj
+543 0 obj<</Type/Page/Parent 476 0 R/Contents 544 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
544 0 obj<</Length 545 0 R/Filter/FlateDecode>>stream
-x¥XÛnãF}÷WæI,Ú”us€}¯g’Æž$V0»À¼´È¦Ô1ÉVºIy”¯Ï©ê&E3Ùd± ‚l6ëzΩjÿz‘Ò5~RZÍèfIYuq·¹x·¹¸NÖk:¸~¹Æ!|Ì×+|ÎfÉšœ¦‚_À3Xé?púêýœÒ”6Œ/×+Úäòüš6ÙäIU[E¾=¬k<)*´jZØjöª!U–öÅSa]¦sò§:ÛÛÚxÕ[Ù‚¶Ï5•ÆóË™³Þ“³mƒÓµn^¬{öÔzSï`O³ùå⚦éM2C “7NW¶ÑÔaóoè œªt£™š_"_m“ÌÖ¦Ô möÆS¦Z¯=…ੱ„Êy¡´™*©Rž„
-³cˆC¡»ô–ð òz­«’dêFï
-äÌÖú’¿f¥VŽýÐo0""GÞT‡ÁD‚&ôaH§Ui~Óù(Ó +šôôpG ˜Æf–6ð ²?ÔÀÁn~ÖIR$<ÿP*ÖCáë®nÀàìÈûDé”õa” •k¼ Š;µL€›|ò…=[ï t
-HÑá·F-S°\³Í"¼ÊÉ?þüñ#óÀaÀiˆê%ä >X+)ëbI[üíþÝ=ëja»Ò“¹zS©Á¬]‹:ª²Åd•’µ%ôxG)ìqô¢²Üª~Põ.n‡¡¾¾A­â2’òFòÓwéõž™³ŽT(Ñm²Š¿•ôÄûËp[¹™sg†2öoÛvÃÊé‚ùb¥ëœ!ü íÁúí:Y¾¶~^Œ$ lG]@cO?t"ð.-
-ÜÙ€|ƒ 7"7àñûOŸ7Ÿ0i \aèð ª,(”ëF™ÒCÏ%jS×Z”u¢è1È›«Rl\WÚ”Þ. 'z
-’MÆr’=Sz9Tx¸õ"î7É×
-¡Þ¡ q/ª_'PÊY(Àu¬b¯ÝÄÙ«#ÀËA`¹³‡üÓÚ
-ü“9 qâ ΋®™˜^Sejì¶h_?ã¼ ñ&$úÉdõSM£«æ•ëÈOØXž;,Ž¼·Ö#¯ÕTâcÁ<<ºÙ1ª«¯®%'zÙ›, ñ ÄÅÊÀ`µU[,µ{›9 d*ãß3{À>Ô·«ó¸¶’áƒáµË C
-qÆnœÑÁx¹äÐ)®7Îuå‚Š[îA粟q£,ûX‚ŽVZa_‘z½°úrœÞat'ÆfÀE¡ ×ê©®‘ºô†]Fjç
+x­W]OÜF}çW\E•0Ò~CAU$Ò6JÚ²i¨B{vwŠ=ãÌŒwc©?¾çÎØÞ]%R /`ß™{ιŸþz0¥ ~§ôjFǧ”oçãw¯i6¡ùoN_Ñ<£Éh2Á“4™¯$¹â®Îm2Z¨\Íÿ‰šNã‰áìl4ÙäR“±™´´0–®Eq'È*…õ*U¥ð’”&ûÄYK*­ñ&59‘òTTÎÓ¿Ê%ŸÊ¹§ª æÓSº«qz%ÜJf´y%£˜Ðpz}/ÕZjT9ø×¢#¢@|¥á9¯$\¸íãûË€€—‘r$rgpÞhIQ_D‹J§^M·‰ÂÀ©úŽUQçTÛJo•9¦™æÜå7Of0¸CG[ï5ÛTLm•¿=^râ±nÜVÿæ©Ñ^(­ô>@¤U+ÈÔéz/K?¢¹¡¦…rA~€.m”_ãÃC¿á€5Ú°37 ¥ôžo7•ï‰¨®Öé bn ¿Bn$4–>‡ ³ý´IHè,œëér­oÏhÄ!ö*W/[gÅ}wväV½ãŽ12n­2¤7üzGÄ¥Ô2(ͪïe;-¬)ðô1zÿÂŽÑŽBx™ŽN¸@ 爃þ˜§ÚT¶aÖɸã§yÕV_*’³>h¹0yn6¬Ô+|uh¯ÚóCsÕ´Õ/~7^ô7í+Jô†Æ•³ãܤ";.ðqiÕ:î¨ìë¾ãïrAàFÂJ²•ùŠÂ‚ܵó²
+ƒ<0PicEY‚ÌJZô³Ë.üTXž©<1¥ö¶&Ä1WºqßNçÐÔö=Žn"ê ½n÷ˆ“Ø&yLò?¯Tv~óÌÏó-–Ɉ7›„šŸÏiŠúD>Ö¥ür~õÓ|øc.œ¦+¡—rèU!ßœ_4SÁ¶}Ò¿äÛ.rä^blë¼™ gmWmÉìŸOÚéÕÙÈ>kóŒ7. Ï=8»¤{Ö_økƒÆåÙ;M}zW ¾Ã¾„u
+mÞ©¥V •
+ˆª€òb‡|B"6Ë`l‹©Éä¨ÐŽKdšhtqÚêùÇåüâêêϾc^ìgOaxÎW®ÀãÑáÍ!!¨V¤^ZNl¿á܆MØwÏ÷^7° õ–Í°AÖJÃG·éÌBmY`ŸÊsZ•s§Ã¦2^á„®C™(L¸
+:ª‹Ûå‚EØÕîlìa
+«n¦\0fVW¤©t¸4ìù@ÁžGP6ßÜÖÄV £(ƾWŽ
endobj
545 0 obj
-2036
+1512
endobj
-546 0 obj<</Type/Page/Parent 497 0 R/Contents 547 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+546 0 obj<</Type/Page/Parent 476 0 R/Contents 547 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R>>>>>>endobj
547 0 obj<</Length 548 0 R/Filter/FlateDecode>>stream
-x½WMoÛ8½çW |r‹F±ÇNÈ¡Ý6ØštÝ´DÙLDQ%©8þ÷û†”äXMŶ-RÙ"çãÍ›7“G)Mð7¥Å”Nç”é£Ë£OË£Ir~Nûv8vzšÌiv¾Àól–ÌÈJ*pŸ¦i2mß„Cá lá%ô?`èäjJiJË~çç Zæáý„–Ù¸qÒVBK*å“,ß,ŽN®fíé1ÕÂâ—–”#+¬,w„sURæ2Oøü„Ž§sD¶Ìǘ-ÞÚw¸çÜÖØœLEwןÿ"·s^jG¦ð¸­Å£$xÆGÒêYæ” |Ê6p—Á›Kˆ–¸ÔRTŽüFxRÁ ")Œmݦ§@
-Ö—.ÑV®@+kŒU¬h&umÍ|£«`ƒí±óåE/;¶F]¬Éð!j´ ²7¢]ŽPZûSÏe&—¯5¦FuìAô‹ÞÐ8äï€ÿÜsH À ÂSl®hV
-g0³â” ÚYËùÎ
-¯è(öÔǵ5M Áq¿@¼ôó•[}÷´ÝwIo!(-s$*‹¤ÑÛ†íºÑíz:Efg‚︰®2câ"cãÉì-æhƒî¬áâ ¬s d¸8ÒvÈšóÞ²U îå®—ÃîùübùŽ<Ço<Ca•ñ ¦#©Z<ø„àôÁÀ8{~IêŸùÅKˆNŠ.DL„H"×ÎÚóv'Nç‹$¥ùü4ÜÛ÷_>¼§¯Öýûh²
+xm•AoÛF…ïús+ H4%Ë’* »I€
+2ÌdêMÛ‹ô'r'ôû˜z¶XÆK$èð Þvž$ÛÏ_èîæþþŸ/_ßýûÖ³}ëåé»í÷oÏ1‰~lÿú3¡¼ðlo9ûÍQÙCV5z{‰¬>¸J3Ê|A4»º•K¸#ÕjRÆp_Û}ÀàxH/$rne 9tÚ“œÖ-qo Ý4lP)ëåæ¾~Ò’>¡Ùü*^HZ!íè Õ¶ö5$ DŽ%î@“eO•z‚ þh¢ÇV?ÕܹcJê+m)¯”Ý‹|\e‘ÕýYÞc»w‘„nµ¤m¡‹ÝEL-Á
+H"f,¨ !~1^œ½˜ä5ß*yߪ†šÎyÊ@7ƒ‡/gkuîÏtšßŠ^œ.”nØ’=Êžík_Õ‘HLïí˜PtS6*ŠÀ%˜Úmû\Z³X¾µb¢gNŽþ A»×N.tßΔùS來:.-'FÁå8A»(`„¢¾B›§ÊÍu¹¶ª­™pôF[îZ]êõ Ó3lÒœ\y-Íjé`\E….Ugü±
+áži˜ƒÔT &Ý=õ—\ˆÐ$a†BLøôI·ñ`u\0GZŸÙ·‡Æ=OW”Jˆ°5\ö
+¥QŠ>„4Ðì+ÌUÃØ8¶#)³‡ÉÂÜYnöÈé Ûúסz,ä°~£KíóËqu¾6Nò˜ïÓ ¶3-¯7pÝr³Æçþ‘¸—ùæm¾ZDzè±ÇOúýͧÛºkù'Ò;Î;L±Wâ=I9¿5¿†vÀc¯¶¹\Z®—ñ?XG‹+yMOþiûUendstream
endobj
548 0 obj
-1525
+838
endobj
-549 0 obj<</Type/Page/Parent 497 0 R/Contents 550 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 32 0 R>>endobj
+549 0 obj<</Type/Page/Parent 476 0 R/Contents 550 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>>>endobj
550 0 obj<</Length 551 0 R/Filter/FlateDecode>>stream
-xVïoÛ6ýî¿âÐ|ñ€Z²äŸí–I“´»›C7 ´DÛl%Ñi;þï÷Ž”,ÇHö¡ àXy¼{÷Þ;þhEÔÅoD£˜zCJòÖõ¼u;ouƒñ˜šr…‡.ûAŸú㾇ø(%-±´KñÉ›¨‡}þbá-8~ Pxק(¢ù’ŽG4OÝ‚.Í“ö´ »–t?£/ªHõÞÐdN©Î…*(Ñ…-u–É’¶F+rKg²Üá?÷¢+üiJ‚r‘¬U!I$‰Þ––ºäÅ¿Ì¿µºÔ‰zAŒSÛ3‘/ ~Þ%UnŠ¨þGÕû:w~݉‡À&òѾ&ísÿ¤Ší#™ƒ±2'ù(“­•o«Ýƒ*z›L¾Øcö)uJú|óîßÉÕý-u¾ÑÍôþêãÄ=>“@JÛϤӉǨé˜Ðƒ‘¤—(YÊuêÄV%Â*¤šjiÐ¥[….â jZH|ÆŠ"eJ…z<àgôC—)¾X}†*ªR«Q¶*&‰‹~ ²‡H¼oÒ‘)-®™¥Ìµ•ÇÞß¼ ˆæ\DÝÈDØ~vâ"ÓÉwAþ›RîP$ez¥ œt Ò\¢cç ­’La[”Š•!³Mք쌴–Ù…õªØ‰ U˜µÌ2.¹âPxÉ8
-Ÿ°)”6 }O}ãjª´ '•‡€ÿë¤U+"bYüù¾Õï ƒ74ŽÐÂœú£XåŸ2š± »xäþž*å
-fV–Ú¹s½óÀsêo £Qkˆ;f˜Ÿ‚È“>—ù¨xî
-Îå~-Jª"ä.†~f¾P^)ó’ªæ&ÑážC¶“É}ê0Ñ`ˆ{]~?
-í©*
-)¡X^J'8¹Î!$î÷×,Zõ›:ÛêJq2a&ó0îÂàëˈdCjcËmbÙ‚æn§§c,¼hpÕô‰»žéçôÀ¦Ïé50(ðÊ•tœ«Î©rqÀÐ;… ƒ 5úC)n‰Õå3Po3 jè½Bç¼ '–Æb<Ãí&{ØàâˆçÔˆ#™2 ª ^Íßʱ(<sÏå]óñÂÃW¿Ž¡ó)\³¦NJ!W¾bÙ¨ôuò:Ÿ3FÃ'üm¬^úÂ:¢[ IÜØx5Lð-ý¶Ùÿ^-®%ФurËôÓ¡ý¥p/?;ïpQutˆpƒà›<_B̮ès©¿¡“t£“-´mÝ%óîø]¿­ýsó±?ê#7w9F)ÿÑúÕa¢Åendstream
+xVïoÛ6ýž¿â> ˜ Ä?ãÙn1XÖ(кÝâbû/´DYl$Ò%©hþï÷Ž”dEˆ±¡ÐDäÝ»÷ÞÝñÇÕœfø7§õ‚nV””W·»«éý[ZÌh—áËj½¡]J³Él†¿$£].É•û£p®NéwS–B§ovßqiIóy¼4^l& \œNâi*…Ò?Ž<¢ùÚÐÍ‚ö'/)„56¥LÉ"uDJ‡3猙*ä„>ft2ÕÊåä §ŸÑx~“–âI’òäT©
+aq Ĩ´ú‡"Ò_¤£˜p€DÆžŽ±â—•â¾5+JwÍPEÁ™:³’Ñ´rvZ˜DS'ʽ˜î•žƒ=ŽŒå¿õjA•–aôÀ÷÷„=Qª¬L¼±§Ç7“æÊb5Y2ç["}.< G&kîÍ'o'óÍq‰/ʵ°”«åço;Ú~ÙÝÞÑÇíÃî·OŸî> a:é+•’5ÆÓãˆ%Ô²Ž‡Zb{tÒ Ã$&•$ufl"Ù €e¥óV%^MÎ0“‰Ðiö’lÅVÀ¡Zœ`"‘$*•Ú7 Lï{É[..&צ¦ÚØ'ÇZ J
+…Hc'í³´T22ªsiƒ·&>º5hȲ¯’\è³-©ÂåŸ]£EkÅÎÏ(H!
+ÉE‘MhÇ•äHjcKS9|Ñ2ã3cÖ-3Eaj´Þ'@¡­Æmq‹ÕºQ°m½õdsxÒ†
+ 6¤nðÙWq 6õŠ EÁ:GXI{%
+œN*«ü‰³/d Þ†µÊý¦…—é
+É5"•?*˜Uâ¶öí A°¯V•Ü 1L@í-Ä·*%°M0†Òæ—âáaºh™nè5FcwïL0þYJ  §-!
+ߧï`úÓQÒ»ÈX;sPWËùOMæm£wñ.^ùR¤ôðù¶÷nâ×Óàس(*I¡[`$ÌÎk1$,LŸ1 ¤p=œÔ|»íýE([Y(_yç`9\€‚!¡¼o ¾BÄŸò(1ÿ;¢•ãP_tÐh=r±‹Ø1g&RƒyÆS«>Á~b¿VÖ²"Uƒ[bÇ*|òš™ã³¼»´ŽRüÖÅ’"É™§žg ó{Í7ãªìÅvÄ6j¦gT±3_bWúÙ< F*¼
+zã‚ Þ‚Ž!Hèì6t # ßz}dzŒe‡M­›…Óê:\O ‹G9Òq¨°DB¼Î’  ßx‡3ž#/x]u¨JpxMî(•¸»:4Z”ðXnœd« (j¡ôß ÔÌî Ѷ[˜¡ÿÌAu¢b
+:±Âë\¡WƒÛE'/äPaŠ­¬•WÐ!\•:‘÷»Ý^Å´YNV´Ü¬ñß~
endobj
551 0 obj
-1421
+1284
endobj
-552 0 obj<</Type/Page/Parent 497 0 R/Contents 553 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>>>endobj
+552 0 obj<</Type/Page/Parent 476 0 R/Contents 553 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 106 0 R>>endobj
553 0 obj<</Length 554 0 R/Filter/FlateDecode>>stream
-x•Tßo›0~Ï_qêöÐIÃByLÛU{é-H}©49Æ$nÁN±IÖÿ~w’(ê4 $ØwßÝ÷Ýç·Qc¼#˜Å0IAÔ£«|ô-Y–ÁñѬñc ÓyÆH²¾O&,…FBI¸ˆiÜÞÎ!Š /1{šÍ /ºõ1äâ2fS6a1ƒ»%<)]˜½…ûî¸Ø(-a!„iµ³_ò—Qx›ÒqŠèyq™o¤•À¼‘o­jdFWï°ßH K^¯8( ­Åÿ܇ÂÔ\i
+x•TËr›0Ýógé, ¼âÇLÓEgânšÎ´f×t!‹‹£•ä¦þû^ pgÕ1žÁ={ô+Êò/Ã*G±„ì¢Ut»Ý OQ5üf¹Z£ª‘&iÊ+r±#ç”>à8`'º½€ëaÃЇOB?
+-dnªQŠ8/¹vñ ¥9 NõÚ/ßnKdÙçë$÷ŸTÏÊ‚/ßdNØE j²Ò¨Pˆ^ã¹ dä˜ÛÎÜgòAXûÒ›t¦Kà ó;²L‚”l\bþ8+FjÙwƒj B×PÚ:Ѷº°8Ú£h=HìKf”ü-
+i±g‰›jÌrØ–2n·Üæà{ÛíÙëæu?ØŸ êÚ·×=Z¥i*½›K'\àßãDö‰I¯òf«ßm¿íwX’ó8^+Þ“†„£ Giå”h¯Ý°™`¶¾Ö0·
+§ÏçÞ‡•I&Ó.”#AY¤¼qJ¦I‘óßšñÐXŸ÷5Ÿÿ}dàõ1Q®ÊdÍçùÝ4–/Ñ_ØßT5endstream
endobj
554 0 obj
-736
+585
endobj
-555 0 obj<</Type/Page/Parent 497 0 R/Contents 556 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+555 0 obj<</Type/Page/Parent 476 0 R/Contents 556 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 11 0 R/F9 12 0 R>>>>>>endobj
556 0 obj<</Length 557 0 R/Filter/FlateDecode>>stream
-xW[oÛ6~ϯ8@6ÌùçÒ{h»õi:Ä{ Ñmq•H—¤â¸¿~ß!EKV4,›
-(5ÅsûÎw¿Íi†sº]ÐÕ åõÙ‡ÕÙ¯«³YvwGÝËnñcF7 ¼–w·xÏ—ó솬¤ öÎh±¼ÊéÓõ"[ÆOP†¯°p|AÓôÓ[ZÌhµá›Û;Zá;VòÉÇRì¼´t•ÑG£7jÛX¥·ôåýgÚK…rÞªuãeAx¿Yýu6£ËÅ:&¹ÔÞŠª:ÕB‹-¶ˆÆ—XU¹ðÊhÞͶçØζ/¯æð’WÙ<£{Q¯ ]°±¸uIóy»uqËß“nê5Ü3úC«grçeíèa"·ïè¾Ñto*a•{xsAÂÑ^Vÿ…DÏx>ÜÿBQ+xɦ~Sºy¾ möÔxU©ï’·¶aÍRXýR5Û­XW’ÞŸÄCôÙM%Ù<|~xÍ9”øyC;kžT! ˆ p¸ °`¬úp žXéLcó¡íÜ
-˜fíÒâÌÌCÙ…(
-LP-óRhåꈊôÐ2÷àHT‚«‹‹6ÖðvI.¤­¨æÝÓ"òÏŽšJo¬@̓a•`<RŽ`7ôÔ¸TÐB–Ö4Û’ŒFKRUàñôSb Š=USË:cò#¼`Z¯~ <_HÊsRºP¨¨FTÁ@KŠU ®(ݦ'™MD­³a††H¯€ÐÆT•ÙS@[“|õUÑ9£È›XÛŒEF´*ZRX
-´FÞì¸l­¥ äè¡ÔèÜÔ5z'‡å8Ÿkt :•GA‡fÄ}Myr^ä_·Ü›f°¢NôëÐ}bH ;Ú‡Û4vqX¡c e ØÀT a±M–ÈèW縉‡ÖÎn÷¬ä€i-ùX`—
-â|µŽ3ŽPV“i<"ÏåÎæPÜ™ST{¡ïDý¸Ûë̵{ŽôIcR½åSaŽƒç:ÖÉùàåå<›¥`prrýœw8›Û%%´ŽöÏîO©ÅU ~syPïiÛB{ÊPzhCààZ^#®Mðè¥ðy87’%J-öÄv<5»—ÜC-õü®…ª^J¾Æå6_ä@mœ¥uq=€ ®ç¹i´oÍØœò8–ÃðyUËó'rãA÷èÒÃÚ½|¦g,Uã’ç C_v ¬
-myzéðùñ<†ÇÌæE[)æ8²èíáç«`éL~…óÔ»Óø’Kä¦bиQyfïÂ@€sØÊ]%òÐJê8Çd(ÃÓˆ>
+x•½‚0
endobj
557 0 obj
-1567
+161
endobj
-558 0 obj<</Type/Page/Parent 497 0 R/Contents 559 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 35 0 R>>endobj
+558 0 obj<</Type/Page/Parent 476 0 R/Contents 559 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F2 5 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 113 0 R>>endobj
559 0 obj<</Length 560 0 R/Filter/FlateDecode>>stream
-xÕXmoÛ6þî_qÀ0ÌbÉvœØ)°)²–¢[¼o6Z¢,6’¨’’ï×ï9R²d¹)‚6l‹¼×çîžóçÑŒ¦ø›ÑrN—×å£7ëÑOëÑ4X­¨ûg¶ø0¥ùÕu° Åj‰÷Ëë`EFR‚³Sº¼¹ æ_|r5_áàð´àTÿAEø–ÌhÀ¢ëÕ’Ö±{>¥u4.Eþ‡Í7¥°6°úÕúÓ(|»hNiŸª(¥ÚJKU*éAäA‹Jl„•ÍãH•P…?r¯"£­N*º¿[,"s(++Øk³†)Mf—pkSaSiZ§ÊvrñÞVÚàš*H*¨6äMkSX[f:YhÙ¬°4j'*6Þ쪞3§zF„²Š!Ï^&mؘS°âx5ˆŸ×L±,e«bKºp‘ô¡Cåe&s‰hV
-ç¨<èÚÐï…z
-QEýDö`+™s¼ä™-_Oe®ã:“„ЖFïTŒànÔ¤t'…Ê=ó`ÌØñ q5½«(m$E:/UºÈ¤çÓ06“É©›À,êÞ¶`ó‡;¤é’}¶$
-QÓYL"³š[¬Óʹ\0D}#QÄ´w§ñ´FÓä‚ვ¡m QPNz”Šb‹®S[®³žŠVÇÿ ï£(Ûg
-ð·Ïƒÿ½®äk×Rj˜i‰èÑQ“¡QÊ%ãDÙ ÃíØóÔ.í  f¤æ~8ê ³A9dzÌ@ 0p¸7l¤J®·ˆÍX/äSÕ>ÃaÆ%Ÿv&ô!“Ì:LÀ›±ŽêÊ4(G z3Â(úÕŠ%ìÎ,Äo…q\ÕÛå™ ¤A}J±Q¦Ø°NœaÎFåæIOÊb§Œ.Ø,”¹Îe3˜XéÑV®ZÀµecÎWŸµ#Çu\€³s>ŽÚ U©¨|ù».0p~Φô[–äص î
-¿|ÎY¥:&î™–¡< ³í
-8®§¤ôTùø¢9}¤áÐV@X|¶€ñÜò—Û³½¢1öPDüÔÇ­YaÁɧôÛÏ£Å*¸¡ë%"™Óìj\ú=ðbÝqI0ú%v\G&»hÒDZ•~aêc'Ûñ8­ªòu:7¹m¶!ÛÒvïøôÇW>šÇ™Kíi“)›rmsgm1a7ÊE!0h/(î’É’y÷Xv{0¸…só;rG+\MðÎÕ²œs{CßáòãXn_ûþËÄž÷§†& #€'ˆ²ÌÎÑìÙαNµ0†¹€3Þíw©Ø1ãhi5œ(QÆpMÄ;Ôܱn„*Ð.D!¦Gp¾ûà6ª$Ýa½‰°Í—˜†=ø} ¹¹½{€í(aTa&°Æ5îc\@æë*o†‚
-YáW„Çá B)'hÒ iY5 á €™ÑõÍÌoy·÷onéƒÑŸ`Ýõ‡Ëˆ?>YÎñÃH<~A.– ì‰îôÜ­Ž€î¯£¿|[’“endstream
+x¥WMoÛF½ûW ÐC@’EYòG€°›ºÍ!(Z;Š¨‡%¹7!¹,w%Eÿ¾of¹¢Ä4EƒÚ›är>Þ̼yüë"¡~º™ÓÕ5eÕÅÃóÅåãÍgô¼Æ“ë›[zÎi6Íp'½©o·™7¶v/ž?âì‚’$œÌo§sœ=š^4éÖëœM©éé༮h5²-½^»Õ jZ»3¹v¤¨Òªvd×DN7ªUÞÔò0SÚÉTI;£÷ü| Sx¡Î)7­Î¼m–@f4I®‚{_(O[§[Çæ4­[[‰1•ù-l5ÅÁ‰ÑÒfð„LØ2¼9M­vvÛfðaky‡jí÷¶ý4¥7žTYÚ½£5R(̦Ð-CpâYí”)UjJãcr•µ°Ú’C˜j£In&Ž ‰©œRUª:ã\µÏ¦ô»•m5™.*‰Tj·ž#¸5¬yË^z¾à¢He(áÿ~ÿ™ïÐõì0T´¸ž&ÝEIO'—*–L—'Qô±vÃÅOf‚h_þ·&k­³kO¹Í¶•®½)0£S00šR‡ÏüzºaÜñM†£Tèv¬ðÇbN•|‹º¡ŠÞÕæ3Q¥²ÂÔÝÃØãÄDí€ÊJƒpÞRÚ¢4mµu
+§6ÖÔžxØ:^“.t¸ôgU5¥FwKà=ŸY’Ö»|<–˜>nkÙ&“$ó—W&«•`Ÿ°±¾®#ó¤2}bàvÔLÀ»…ŒvãÐÇåð¾Ð5èäÈ Êc;5ž“Sø?XŠV…1?÷K«ƒg0¿ÁN#ÉÇ¥®’®6Ãõ”hÆ´ÂÏ0×Õ‹m$L΄¹PÖ‘pñ2
+T„mt’I¤ÂVÕÞ(aí½7uÎ+ënÉqαŇ.~Ñ­þžW*øX*(ÕïÈcÛtsÑrˆô $ƸœwQ,ÓGÏŒI7À²¶_ƾ˜É`Ž>Vúsp›ºìÝÔXG5(‚^ÑÓýÛ‡û¯•Å‡pôpTs& ’ùÚ}ÍO£Àê¯èÛȶþ'™¾â©ŸÎÞOßPWKö÷&ÐÙÀæQ²hl4ˆ¦!¨ ‚Ï8f–Îg+ʨB8®~|à0v
+ý]7]I$Ð,ÿ§¼¾á}læ:pâ —oŒ£¨lN7Ëåÿ §¬iâCFž¸—9b¿…|þ{‚g¥£ŽÇ¡Å<ÞiÈüTõvâ†7‹+ì¶Ìcm™ÝVÆ±è ²€B˜•‡ÚågÆ“{Âb²ŽÜ6cÝQkëò;³»Ç]&
+š—EAÖj¬·16]‰ýJ¢+s³>ˆÃÐÄÂëX¥³T[
+.ÀÖüDÆÎÅ| 1@6Ϻe2›bÖ¡ëJS™ Á$PÿPß œBí ¯X~‘ÚY“ƒÎ’$È‹³gYUj°%¼´Ál ]9pŒ&WdòG¼Q–"txØØÙªUVVGÑQˇ¥ï耊íUÍŠ ΫևP£«8\ïÐ
+BÁàãòd´kè× ?%
+
+6oH¿“fÈK:Š!Y­0ú¨,!m©ÊhÔCq ùaŠ½²/ :B5V-wKì |
+Åm¶Ô0yõ ·Ck„ƒÀ¬&ZÛ´†¥¬ÛøÙ3ˆàœ}n;z9aŸágáâf’Çc>šß°1¨Íß.þ/©aýendstream
endobj
560 0 obj
-1691
+1588
endobj
-561 0 obj<</Type/Page/Parent 497 0 R/Contents 562 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 40 0 R>>endobj
+561 0 obj<</Type/Page/Parent 476 0 R/Contents 562 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>>>endobj
562 0 obj<</Length 563 0 R/Filter/FlateDecode>>stream
-xTMsÚ0¼ó+Þ­d¦VlÚé4MOé¤Å3¹ä"l•‘%W²Cù÷]ù#¸43í0ai÷íÛ}?'…øD´Œi–PVNnÒÉ—t²’ÕšÍi¾ZâwŒ?+hï¯ïÖÍ)Ýãb²X°„Òœp! )ͦ36cô°¹§ÏFï塱¼–F“ÔäÊË°y•>÷€Æ5Šüׯ“(IXLI¼Ä“%EëÍú•¢m‡<§(ê‘ãÕrZP”Ž¸&S]¢RÆ•9õèã×KŠ#_`‡ì±Ækœ&![N¡AËûLÞh ÉÊìĉ*^B>W[™y^Γ8?ÑþÂSF„"ho”2G©¾˜½5%ÕØ5:PR *„ªð/›²}(è ƒhõÒ|z®}û¸I?¶XÄ š‰ÓÇBhÚòrÇÑÔØ#øžøF ª ÍwJ´ tMU[ÓÓT2ÁZá®ïЭ¶S
-‚£¬‹
-Ù²_õö±ô‘Ç©ëWG~r¸kÛã9_EȼS2Ž²Ì~°ú ¸‹5bÕ±ð¸ã5N“Õ+Çöt´Æé*FÎwß ÂPæe%°VfOU [8w46wô‰NâY°‚;?>Ю^É xµ»Ÿ5¥É%`e®½‡ç¶b>÷ú ®À
-ٰПý-EVp-]IZˆ3¢×±Â öZ^¸g{C¯u …Á]JÂsÚn;~èÓ³ÒóæT€ÚôfÁLÀè]°Õ›xÕ¿%Kæg7&ïho7÷7z°æ‰ [“5>!­—ýë˜þVÐ]ûÏ=_ÎÁÅãLã¨çø}òšAÂáendstream
+x¥SÁnÔ0½ïW¼‹DB’¦IöØRzˆÔ ¯=éºMìÅãìjÿžqvQ)•HVòæÍ{oÆ?V%
+yJ´®èiuÛ¯>ö«"/Ðt›¼Fݵr®ä „!ý~¿AÙ¢¤°¹®ò½z½þì#ñÛþI`e™`U—WȪvA®¿WM‹3 ¾
+Ùéß–ûÛͧÛ| þIìãÎëy’y©4œd%;Weç²—«P·µlx¢ZW]ŠŒ¯«Ÿºì>endstream
endobj
563 0 obj
-766
+488
endobj
-564 0 obj<</Type/Page/Parent 497 0 R/Contents 565 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F2 5 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 47 0 R>>endobj
+564 0 obj<</Type/Page/Parent 476 0 R/Contents 565 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 11 0 R/F9 12 0 R>>>>>>endobj
565 0 obj<</Length 566 0 R/Filter/FlateDecode>>stream
-x¥WÛnÛF}÷W Ї*€D‹º;@
-ØIÕä!(Z«ŠªKr%nBrU.)Eß3C.))M‹ à˜ÜÙ¹ž93üë.¤1þ…´œÐtAq~÷´¹ûqs7V+ê•{<Œi2›3š­–øûa…?KM;¾C¨é~Aü~ý@“1mvоX®h“È9Þăש:Tº¤Y@o­«L±'EïM\Zgw½1®*MTW:¡µÉô‹ÍÇ»1&3(<Ÿ]¥sªJ­Éô¬òH±
-ó™(Wqj
-MÛç#uRHTœø
-†gLA׆»šzPôa{¯¯kŠØe¢ç0Šûµ§‹q§çš©Ë4ÍÖ$ü)|2pypøµ¸ àz‚lÁÝù’³&OmžzÝÈØbŠãËœ1uô»­ œcö…ª8i.e)&!^‰–m$•nN)ÓG}‘½ àÎj†^¹r§þËìMÑË­“$©7­]þ5=vÞó506«ïÑså™Y­ÁžÊÉ­ÌŸœ/Ó¡;ç‘ÍLLÍ©pêÁš¢"n¶–×…®!.ýYå‡LÝâxoüJ“@ï~Ý•˜>Ö…Ì’ÑùË–+ÃíVr²²¾®vó¢2}`àvÔLÀ³…ôz}Ó{Šþê‚ZéDU˜ƒ‡ŠƒS1ø¿ÑäµH†¬üLŒ—R7–Á|ƒz’÷C\%¨6·ã)Ñ i‹ŸÛX·/¼·ž09žÍ2Ž„“ˆ‡QCE˜F‘x*,U±ç‰ÒŒ½¦Hxd=ÌÙÏÉx<¾5ñV—ú{©àc© T¿%úÐö…_T‹Ð 3(ãr>ðb«`òÓGÎIÛÀ2¶_z\`b‘?Vúóæ5µ?˜»‘±Ž
-P½¢çÇ÷O_•ÁÑ4AôÜmî6•ìÜ×ìXýÝcÙ²º‡$sÀW,õÝÙÛéÑ9B¦²½køìFi·³œé„äh0Í°nŒú>³tÝ\~ñk;Ö÷ïqíle¯¿kÛ+ô 'ÿØ7ÜÇh.R¼‰åýHs›Ðr>ÿîd\C‘ž(¥‘˜Ä%…íöê æ¿t¥Q ýÔ)6ݽQ¹Ÿbx´¸ÔÖYâk˼pÐeno}ÍÞŠ„b3M *u—%®HL¶÷žÆd¹:æÅ[­-²³‡f»ívà TÔ,½¼Ä¥Æ|bÔe°$‹ebvg1Ø Xˆ“#s–
- ¡ÆèšO¤ïœKØæÆ2va]2›hv,v™ÉM³‚JðÑõœ“ª#,þ® u´&Ÿ%H°GÏ
-°gå‘ÁD–,áÒ½pE ó¦%›U nd~Ú²Í7~ùoOjâ7[ÎÀMø¨J“ ¿ÀÖñËÝßgc!uendstream
+x•ÎA Ð=§˜e]ˆð%…n5ºÖô_
endobj
566 0 obj
-1534
+130
endobj
-567 0 obj<</Type/Page/Parent 497 0 R/Contents 568 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>>>endobj
+567 0 obj<</Type/Page/Parent 476 0 R/Contents 568 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 118 0 R>>endobj
568 0 obj<</Length 569 0 R/Filter/FlateDecode>>stream
-xuTËnÛ0¼û+æVˆUKvý8&MskÑ¢.zñ…&鈉Eª$eAß¡$'¨‘Z0 ˆ\ÎÎcùg’cÎ'ǺÀbYMîw“Kä9vG®¬6kìæÙ|>ÇNN§S‡ #š±Ô]up'#q2ö% :ÔÎؘ^Ò2¬Ž­ó/¥ð: s Zaã-„UQøˆŸ¢:ˆìf÷<™cV¬²%1§¿‚öÎâáf¢e1äÉh¤°°®ÅÁ»6膛½&+n&ûôgí!"öü…„³ß«cÈp'¥ÁØ' èù"+z"#à|¿xÀ~Ú–F–u­Ï PÆk7ä4RÚÛß
-qáúªÅ˜íåvËD¿—mZÙßFùj¥›*Iùv#ý¼ûz‡ïÞ=sñàdSÑM‘¬K\gCÕl(›^ÏÂr½dzsŠEÚÏn~Lþ©pendstream
+x¥•Ko£0ÇïùsL¤Æá {ësÕUÚf «^rqÀI\M±IÕýô;6Їö°«Hàa¿ùÏð2rÁÁŸ ‘~Y9ºHG³›x¤[< £Òâ8ø$ß
+]˼É4—b’>£m
+UÍ…6nJ–í©àªTÀ˪`%šå&¾S×o£8¸K¦«KX9aĺMVË$AK–CÅ+¶ž€UÍ\6
+¬VXŒ¹…./)Š·>9|gIÅÇl>„ÍhQ(Ò=ôB)–LóœL´€m#,1Zpý†ŽäçèxóÖÎ^1r—fǸȊ&gê[K9ë([ÄÓ>ÌÚ #h ú6D$>!IZÀ°•5 TQHšž,Ãg5¯¶¼`
+´<Â_Ìg‹xvŸÎ<Ó÷¬à\ASI9+©ÈI¶Ïkjã~Êë:éXý€k®¿×#.ÌÝS-!˜Ÿî
+HZöÕ &ç®q=Ô௪¯[ö¾l'ªÀîX
+êè<ϱߨ%¬õ‰ÿ¦uŽ9_=­'€`Œµaˆ¹sÁÌ"£Ù6O“ÙðOã,§88J­wЗú±„ÛÒæm˜ËÓ6ƒÓûö
+ߟÝû±ñþ©õ¦Ânººù°ÑÀÊÅží*H4­õ•Ì:Zgp-šò‡Ü¨õx=9¦3BpxÖã„!bôÛóC$„þ—9dÞÝlƒÛ\?&ÑàðKjØõ œ¿ëù]ruÎ3ú¸(Pˆ&ôgbc+öRÖ Gu_¶Æho(àrñ½ã$Ãùê5ÐÐô×J>-:{Þ/á„¥eS
+.¥Y“,¹Â±A­].1`<ÊPnžY¦Õÿ„6’\#ýÊ0SÞûiXÃ
endobj
569 0 obj
-687
+810
endobj
-570 0 obj<</Type/Page/Parent 497 0 R/Contents 571 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 50 0 R>>endobj
+570 0 obj<</Type/Page/Parent 476 0 R/Contents 571 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 128 0 R>>endobj
571 0 obj<</Length 572 0 R/Filter/FlateDecode>>stream
-x•XMoÛF½ûW rb
-Ñr®eÿªÅ?ÆÇLy½íJ²÷e®ª½Cç4‰X5r[¹–"®i)Ô|g-Çàì)GëÛçÑ´¦,Émônñ‰Û±5¥¦C§`¡Ô\I„§z»¤òÊX Á«UÍ”åBIZ·'Œ:ÍùÓ×'‹õ,]ÓòêºZÑâjÎû«’î»3\^I˘ýh{o¡« Qµqh™ë­êÊ–žUÙé˜>ÕÊ«J3Ð9O„2vUÑÅâ"½9_ãîêj2†uœ‰¢ó»E˜Ó4l²¨SVRÓÕµó­|0#¥3Ì ª¡Ö–„+:§-Z̯ßâ‚ø³àl€ßV•ì
-É*²ÐµVm  .ˆ5§1ÒÁÖÕŒ&ÿp™dx?Rôó»¦)ÝH]¤,ˆ\¬ƒÚ{ׂëF3Å=þ‡ž5§SÓ_cä'É‹GéºË +ø‹YO&!ÞYí›ÂÔ“‡_–üE?â&ÂNËQž@£X{ U¯êIÓ5xô£Ó  G5Àˆâ[”ˆÅ¿ÐeŽÎ…Ñ`&qœ£n¨ºÖÊ“ Ã
-~Þ
-2䧦$àîq‹ÐP
-{¶ílÆÂ¥ÊIúBüHbQ‘@#¼ØšJcþ7Ζ{â(x²ŒŠÿÐöËÈÑëá¼Gíä¶`iñÈ’íõ¥¢c„ÄÆ9ûƒÒ3ÀíXN˜‹«ÿÓÅj9—éÅaÕ
-zö:|ñâ…]àµtß ð
-1p6¦=’™6²é²d»Ìá]áÈíl¨ô$ÓJ󹕀 îh?)ÅÈÌGmúE»ZE¿÷ƒóè¦7÷·_ÿ¸ýúø(PzL~cub;o'±^‚LcP›qˆ'ÁÐ4_F ãQ·ï?~¾˃½D;Ÿµr3˜ãx~bLB•\£šË¶&_£hüÖˆÊC ¹³²¹M#?Êú'>sÝdÞÔa¥myFÉWì¨ü™sì+Fp¼ÅðËû­zÓ‡ÛckXŠú>…­^5ÍÎùœr5ÇæýøöHåcÑbÝ”B8¹ŸÐà¤#ìyèC Tà€AâŽ÷½Ãn–¼ÜÁÆ,†Y¬«ÌÆC\³’×÷ª8Þ$ p.èTè×
+x•X]¯Û¸}¿¿bÄâÉ_× ä¡Ûö¶yØv·q±(öæ–h›‰$z)éºþ÷=3$%Y7MÑHL‹"çãÌ93þý!¡þ&´Mi¹¡¬|øqÿ0ÚQº ýO6ÛGÚç´˜-ø&›üÑVGsjjŒ­Þí¿`óŠ’Äož¦³Û'+².׎Ku{¹X×PsÖÔ^
+«rSÈéâLÕ`OîÌ þ££)týžn¶¥²­¬þÍÂ…š”ì ú¬œ¦J•:§ßäŒ7ŸglÉ‚¦ÉÒß¿Ç]¼ƒ¯iΦ/á^ÎqfŽ—MEŸTyPok|„!•*°Ñ’X*oc?,»‘)ÙU5ô<ñ7±Cµv/&Ó£ëÛÇnD¿š*·×šþ¶÷ÞÊ~íð®ÅöÅä8"ÄçhÝ«àåŠ#öüN<œ?­C¬Ó4­ˆã½âxÿª\…¨²Þ?p²$cþŸü…¿¡õããì‘V[|Nvˆ¢øɧ;f0¥õ&mîþ³Ó/ƶ‰9¯9¦7Ù²Ô³­9«ÈÑëôh‡í9Ö«B
+ß8J|<ŠûÚ+lö‚ž0Lãä¸-ü‚|ºªæ‚@±_tfŽ714Ê€‘/‚›Rç„(ÙÌHV¯¦9cƒjbБ¶?T¸p£@ý_^y—#¶'1u9g·ÔÊ#9×GÐåjŽ
+X%
+OêpÄÔÈÕ WZ˜e* ¯ôxB„y³³ªNú= ¯ >:']…C;`Õ6yƒU=«‰#îDÑ‘±­?™“×'¤-c’;ú÷åÞŸ
+n˜®<ÀHëØ·[¹Õ5ðªÇo2!àÅßžÎqbˆ¿YL§_4ðô9`5Î~ãÉz¡ºqèÁ*!ˆ?$@â,ÉðDx7zʶh æÇ0CêC¹ì úÌøÉÍ"Œ–_dB?Z·‡J’5ÖøÇm!ŠL'6½áÀÉï"„¨ðÔœ¡Rt ‚fš%­ðŒÂ£‹ƒ `?U×– üž®|/Œö‚R@'¾#fˆœ?1êBï‰_µÐb‚pî¶ZmWÀ&~ÒÊ'Ë„_B™þòð5Æ©aendstream
endobj
572 0 obj
-1797
+2080
endobj
-573 0 obj<</Type/Page/Parent 497 0 R/Contents 574 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+573 0 obj<</Type/Page/Parent 476 0 R/Contents 574 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/Fc 13 0 R>>>>/Annots 131 0 R>>endobj
574 0 obj<</Length 575 0 R/Filter/FlateDecode>>stream
-x•XÁrÛ6½û+vx3£Ð’lËN/Û±;î$N«I¾@$h¡& €,«_ß·
-ÚhóŒOnE¢\
-ÂöŒDQè Z[iÂâeVªJYg„Ó†j£^T!Ÿä›ÅßGz;=If¸<NuUÉÔÉŒÈi|?9K&É)᨜&,­¯§+Q=IÄ" ±IcWª&å8Û’®h©— B§¢@·aik,I›ÁíF–ÚI*õºâü~ìj¢È³Lh±$ŒÊ‹P…X’#ª…q|3‡Â‡ßÎ\ã™jÙü¶E;fD­L×F¹-aݳ¥ ~rQoýŽJ”[º,
-e‘§È7tR”ãN8¹Ñ¥_.…ªš=¹«É*'>øfq„"ÓüdžÌéôâŸ0¡ØyàÄ;šž6œ˜Ì’‹+Î’Ó„¾*¹QÕ““Ê”AÕ4R¨¥)•µJW6àÐfŒ"Ϙ_L+D§LF˵sÈXîa;ka‹>ïOŠúGÅÍ7º.TúÌàœiiið“¥u¢gJú xÅØjA`ì`Fð…ˆ;{sHÞßý˜ÕÖ–‰ÕK8!¢¡g’)[b ö
-½¾Òü­NK£3C;ðê0ˆ¼—õî̤MªZ "\s•ÉÊ©|ËŸéÁ
-€C~¶@~»B1ývs 0r%‹¬­¬O¡ÖBÏ2Ê„KaQß1ìïB“£á€ƒ ’©‰´ »®kmÜw²±ÒkWX{õsQXOɽ"ÇœUC"O;–¸ ¹´
-^¡=œ;Ôd_°ÍZ]n []É©â×».éÞó£Û5ÔþZWÎè"²@Ý
-Øö"Sy«œ¯iDÚÐꇒvLVÓÝW…’#
-Np#PPF¡sÉ ¨¶o¿\ëºrwòî-÷s¹;9{IìA–»iB·|uG‘úuezì´Í:P\€C»¦8~2z]ƒX ¸[óÌ
-½ôCš<\áïP¹er¿ñýΦƒ­²ç¬0,ýPî]Ýì,‡ùè:Ñ6zÏ8ìâè¨Yï¬áЉÁ(õ#;ÙΘŒŽÇú»_ veWü7™1¸CßKMNÝ´!kƒrõ"ï ÀHí¨êcòyü’éPmÃÖýY01 J¦«‘cº@nÙ—Á$"?¦ 5LaÃl£•mQãÀöƒBŒ‚Ï;.”p°5Ê¡Qƒ¼´W¬Á5Ì„¸¶k?,…}Vv§€µ‘¹z Å{x:äAÑÊ»A—i*­=ˆ´ñÀ£(ÏÍ!ÄWkXjv*+nbLMf×½à«t/Fo²™ïLfá=¨J×…h˜í硯%;ÏóhJ+¯t[i2 6ÖúF¼ÄSA9nRCÓ"ðX6ö_cÒZ
-)Œwž
-¢!–èÔ0ð{6­É¯½À3èøö¢1ªÓùy2ÅŸ
-ØKáùòpùñê’>ý7ƽ×éš †pà&‡ò6l{>Ã_²øÿ½OÏOñöô_œñix·þqô©B6¦endstream
+xWïoÛ6ýž¿â ˜ ÄŽÅv¶OnšnšÔ]´Ã2 ´D[Ü$Ñ©¸öÇï)ʲÓmE$–EêîÝÝ»ÇÓ§³uñÛ£qŸ#Š²³—˳Ë×Cêõh¹ÆÊh2¦eLÝN·Û¥eÔº—Ÿ-E…V’M$Ū‘ÕÅžl!%­dªwná·m¡rûýïdQH¢µ.HŠ(!QD‰²x¨Äí½.i§LBV“)·[]Ø΋埀Хk Ýv†ÀТê'XnóoîR»×íLš{ÂÞ¿Ûý“Qø>¢ó*õÎÐý’>OFçÿohv?ì†çëφ¡ë«ËëÉWØô§oæ¿Lkî¢a€¦é6L?οÊÜÝl¾8¶FÇ憨ÞW™šÏoN,˜šë,æ7ÎØåë«Š'ý~5j˜+­¢ÈU¾á„Þ.Ϙ9Ž>þßÃÏ|‡®FWx`8ãºwÝ鸰ðÜ›t5à•&û¦Ëåíýrööþ;¢‡Ûwïg·¯h~ûp7[,pwá©s`o»?òܙ夋X̳¨,
+™ÛtO"ŽIP.wêɯ2#"[ J´±D:—¤×dwxRç±²J熲ÒXìHcð¾”?zÇQ€>îÚ÷c4¦cdc°µÝ¸èZK´‘ˆ"]æ–J#aÑyÊÑ"|É]v
+­m°öøâVÛ¹ )©a©ÇåB‘£0ýΈ2ö{Àê¿¥¡P!ÍÞ7À¾f¥¾%¨‡”Él…JpÆ8
+_"ÎTΞVÜ•³¢lQªŒ§öàêš 2ùv f”…‘3XµC!CUYŒUiJ[mŒ4†—øƒ Ì,\«TšPmS®‚¬*Ü]Ér›PÐ='GEsh«Îv‘ÐY#–ÎÐZ]ŒGN&rþ6¼'L(¯ë 2_ÈO%´=®Ý’‘Å“Âv‘ÇDÂ)œ1t» ÷‚ŒÊ¶h®ToÐ;M»xÏöýÒ@,`ÐS÷±…sÂÓ6Ô¯õ¬N‡ªõø¢Î2­ ÁNC؇HE”*t{‡è^<©;·|SÏù„’…©•±jÈ5ÚÀ€¾Ñ|-Ìü
+0‰.Ñú'žÈIå‘:‚p,àn™ œK™°QÂFbC4î\4˵Êe|’¸†ÆwUÇIHÇ ö_ŽU<KÙ
+Y”ÙÖî]Ú˜ÒjÌÖGTí8&ãF/ßÈ:ò/,³Ôì•™!Í9gšæÏf¢‹Ê<@äòG‘LW®®ç y0zNV¬N+»==F›èM`R òÔ˜
+¼qÞ¼Õº%Ïæ±æQù܈ÔhNX¥’2«õ¾
+($¡áÝ”QrÒgDœÞ¼ƒ~±túf¤å™J™\5<pZéÏÏÀÓ4ŠRíd,ÒYµñ9wOÃ)K(+ë¿b°¬.GZå
+ÌGê+ D¾é0 º×Ž™lÕÁ9ºö÷ë3øYò³×é¸äÀk»¸!,¸PßÆàÛ
+ª – B«°ùHä_
+¾zùAÇr½D¾¯Mpm+h ç¬Â©îí‡ù r½äôsÇø ‚Õ´ÌÜIàpþ%¿eÕÏ ²ˆ]hO'^Ãæ‰ Œ°âa±™Æëšsïq<Ï÷«
+:x““kQ¦d‘)°c®Oÿ¤*Ko4îôðFXÍÔ‹éÝË)KúŸ¬y¯tๅ¸h—­¶ßÞ÷ñâ·nPMµ)Y|üúp<Ä0âÖ}v„‘æÝÙ?_]xendstream
endobj
575 0 obj
-1783
+1624
endobj
-576 0 obj<</Type/Page/Parent 497 0 R/Contents 577 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+576 0 obj<</Type/Page/Parent 476 0 R/Contents 577 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 134 0 R>>endobj
577 0 obj<</Length 578 0 R/Filter/FlateDecode>>stream
-x•WÁrÛ6½û+vtRfÙRlÉéÍ©›i&Ý6ê´_ ”“¦õ÷}»€$
-r:ÓñØÖˆÀâí¾·ËïgSºÄÏ”3z7§¬:û°<»øxEÓ)- <™ß,h™Óåäòò’–Ùx¹ÑäufëÿZ²åÆ鬵nKv•ñÞØÚÓFyª-9­Jª´ªM½&25µØÿ×ý§Ž÷Ö•9)ÄtºqÚëºõo–ßÎ.éíôÝd
-SjÊ
-Ò(§* ”±ïf»¾«!Ƭ$ß5umZ9V!ŒáØ‹Xɸ
-¯+mï»8_~|¯Tö$ß¿ryÙ:ƒbxãF¡ß¸q˜Gଙ*97ª"³Uck$™ªèÖ‡'ú£jä¼GntN£~$ý7zÑÊ´x\pCF¸sAd|ØáÀæ}—ÁïÒit§Kø5¢‰íáôƒÇwÏ;ˆ'lGJpG™umžˆÖ@‘È’’㨣n¿4ÿ9\ºewª›Õàbçœã¬ÈË9Óáj8]Ðßñ<‰{Uå†öè-¨TBA® Õ•¸†"h¹ìp3`¾ór—J`Xõ~ÈeˈÄÙ{¶r¦½W0*þPu°å®Î6šÕì©HÿÔ˜>²ôB¦„è¸;FÐœÈZ¢ÃãØöø ôÂÞù4&F8õnPI?mý”˜Ð½¨€ß°Üƒ–¹7Žê.¥èÔœi¯é )ŠÚR´¿YoJüÊ ˜0rØÉŠ¤ðƒr{T%\•çpn'JáÊB"¾rBƒò#ßè ·Å AKÌ6 °‡¾Æ%»1ÍÉ™Þàð‡ÉŽsRøÓÑÊÜ—CçÂCœ±§73¼±ü÷Œ=½º‘ŠÃkÕõd‰fBQ±T0™Ãë‹LƒDûM¬à0Wíçî{äò“é0g\slˆ-¢°¯ý <À‚
-N"“:G–¿]Ìð&›ÿïkÍÕâ
-ÇÈÖÙœãð?Îþ²ãÓcendstream
+xµVïoÚHýÎ_1Bw:*Ç6RN"
+i¹KÃN{äÃb/àÖÞuwíü÷}ë„¢æt'å@ ÌîμyoÞØßÙx;Ôw©Ó£ i\ûóÛ.9ù¬ô}òC²-Û¶ÉZLëh+xHëgú‰Pî5M}Ê$1JU$2®h=rMÙŽSsnþj¥\%ŽJY®¹z–‚7iÏã¸ýUȽ ­’yj½ó¿4Æ~Y©×ïY.u}üvñQœ6%ÈKr€­
+Ô(k"–,,@ØÔv:8‚Ô©ˆÛþM#µˆîuøˆóÑü³É£eÂ÷)±ý×=SeBö\
+éš¹P&ÎÜ«“ÔÞ(‰ OþïIº^tŽÏÇ¿RÇÒ´²ã›Šz*È&f[=\ÚOðoÛ5ï§Û„l¹Âk>{?[­vi»@÷Úþë@Ei†ûÄpY9=z6ÑÍbòi¼ Ñ§Ñänt}7¦ÛÙ‚üæ‹ÉÔ/Î^K`10\ÖêNùg†×1gZèÖÕêÄ)¿—n+ õ2Xê:±¿ùz·bñ-W“ïåAÀõ&ãg3ëè
endobj
578 0 obj
-1613
+945
endobj
-579 0 obj<</Type/Page/Parent 497 0 R/Contents 580 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R>>>>/Annots 63 0 R>>endobj
+579 0 obj<</Type/Page/Parent 476 0 R/Contents 580 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 137 0 R>>endobj
580 0 obj<</Length 581 0 R/Filter/FlateDecode>>stream
-x¥XMÛ6½ï¯ä²°«•ü½zHФŠ4mãc.\™^3+‰Ž$¯×ùõ}3¤$Jv¢E€$’Èá|¼yóèoW Åø“ÐbL“9¥ùÕÛÕÕÝû1% ­6ø2_.hµ¦8Šã˜VéhcËTÓÚ”:­my¤J§ûÒÔGÊíZ¿^}Åæi»ùv<¦Ø>úT`“¢}¥KJ3“>UäÖÎüÚÑ«O¿½êoQmIívÙ‘ê­&Úé27UelQÑg•?(ÊÕ®’oæY½¦àÍl0¦ÛdÙ >þî±´ûÝÝÁ–Ùš¨¼;ܽP]š]¦J}CªX³É‚&Ë(ÝêôIŽH·ªxÔëÞ!È‚¢Áfõ¨LQÕ²öÁÔ[#S°ïVWœ>É!%ü¿¿~½Jæði>aÏrZŽÛ‡Œ>s øÉT¼îRÏYðö‚ 9%ñ2š{[Íöþyå#u5õ'­•TÕ“d®5"î‹‘¦¶#Ú©RåºÖeDoŠ#IÌõVÕD]jdÎåK^)¼(l-9A]®“k¤©2Ug†xQ¦75}+N¶…S™-€
-IYká"*Ù×]iŸc¥[g¼ETjóªÍƒÉ˜»¦ÞzNG1(‹[±ChË;>Û´Q©ß‡ðÁ4¥]ïS½ŽhÎáú6TwRd¤ÙyQ[Ð!¨&[À sËË}¿[8¾x±Xø9ó³j>‹!”©ü랺ÊÇL3!™ÿ®_j·0cÓ¦uCgÕõ˜N"¨.ÄAx~NSÁcß›¶Š§8@(dè+¹ÉÓô«0@ÓåRà.ÃÆ=´1O—÷½ˆ›)ÕòE܆ð@n§Ü–Ú²ÔÕÎòÜðLã[å<Í ÏI,gH
-"S¸SŠ7Ìd2]gW[ðS“UC‚¨j¾oŠzä¾å«*Kë–Y)¢8'r«0 \ãòh÷¾ÏNíw|‰awÀØ-çVþÔÍžo¾–um&—.GîžNN¼@€pΔ¢UÁNÅzP‘ÑFËW—ÕUq]{E§p{DçÔ&Ýgªôw*()‘B"nø
+xVMsÛ6½ûWìQ™±¨ï¯^:m;ži5aÆ=ø‘„†h´ªüú¾‰Rk§éx<6I
+OR•™R‹Ä—hôØ9ÚSl‡ÄýåM¹$oNNq²Š
+óR:6d<a­
+Y]ƒ\È«ïîo¨yÅràþf *üKÒR²ç­›(–¶®ÚL}8ÆëL'#tx{0aÓF?¡+_ ÷b-C­°VA¹pbÅÓ$èYÃäh'à˜žj ÇÍéY Bè~AïÓtI;™m…VÕ®ïD¶½€6j‡ØƒØw<Ç`[ p%ªÊdÊ£úù㯞a6‘¹¾-íua„·(vNÖis4>^gªâ†>`n4Jð5ÜêzyÛôu†ø(±®ðc=¨ÖLÊo‚ãóvœÒ‘œˆÑ—ãÏËÝbmSìõX5KÕ@Ö´1øisqWé€Ü#0LYK>'× ÇÚ*w l+³/Äù£EĪy[UƒÙŠy]UƒÑ⟚j›à[o‚/êê·‹NDÆqš0<ÇâÿÍX=˜ÏBœyW„+_¼¬Å[E<©ê¾ÿð~HÊfEÅwB÷}ûÎÔH&N®ô[9ƒÜ'˜Ú½a¡Bø!å8|¾oN£Ÿpåd·Íl#…Ò’–Òâ.šYUºÿ:gç bárÛeâ/o¸­ëðx6ÆܘóÎhÌùãBôûÕ߸}‡
+endstream
endobj
581 0 obj
-1658
+1210
endobj
-582 0 obj<</Type/Page/Parent 497 0 R/Contents 583 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F2 5 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+582 0 obj<</Type/Page/Parent 476 0 R/Contents 583 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R>>>>>>endobj
583 0 obj<</Length 584 0 R/Filter/FlateDecode>>stream
-x­•MSÛ0†ïù;œÂ qãHÚôc¦Óii3í‹"+X`K©$“É¿ï»ò®n.1’vß}ö]é÷$¥9þRZ-èü’d5¹Î&o>-)M)Ûbår½¢,§y2ŸÏ)“Ó+O¹òÒéÊÏHºÕFÐ"™'K
-…¢p¢RA9OïN³G[ôÁf‹KìÊò©tJE•ðO¼gNýÊÖ:©¨[·¹­çÚ)¬;¼~x°¥=?,¨Ï´WNQíUŽ*|P"'»Wk/kÏ{
-ìNXËÇlt±\& Z®Wøâ ±¶ »·”¢Ffw‘2”!½‹d•Ðg:Bm íu(bR„É…Ë[ž[]*!€s P(v·Óæ¡úÒÙ‚»3mz€=ž¼­TWȇ›ÛAŒžî§¾– O'hANdMy8¹?ƒ`£»oŸÑN¹J{…žƒ b= e…öm?Òs”Ô•؃Æ€†hÝ$­Ù–Z|…½R¦áÚ¥¨Å«@ÏZ4å+Y;D¹¥} Ð8vh”ClqãˆX ,¡öDç¼£h/øˆöQ°/ìžêáSw•R@ÆRd9 )•÷D°gÌf÷F9Ò ,KêbôX#U0Éåù虾ôÅCÕHèÎ Y¨ ¥lõ¶l 5Šð44PáCf¬Ü,µ<G4bòÐ
-c¹eœ2šz0€?9VO‡ÛËhbðá
-šÚe!̃j² íBð‘(K@ÅÞÊ«ò›† k#óâH›ï,ÐTyFzò±o>]´—È”Nn¾œðÑ—¡žrζ‚Oü›Uöœû)Š„;ƒu3¯ä9–Ë FÂ;½È
-ÿËZO@눾êD2“C ã4„=í™<9îC´|‹æý‹®QpÚL(u3‰@b‹»†0&¡ÿ5×<a1¯4@{ÈÇŠ?ÂxèÞÖ›[ð`8ê2‡'0vž
-ÌÌ8Ù{a¤*ÿiª¨”Ç 9îe|{(¢„GIIàßð<ÙgåœÎse†—ùyúÚe¾nm—^®~$ñÃÛ«¯×WôÝÙG¼IôÁʺRB¾ÙYð¬95kŽMÿÇå¿\-“5žܼ‹5çÀsôcòY.jµendstream
+xVMS9¼ûW¼âdj±± &—-B ¡v³‹·²‡¹È3²­  ’ÆŽ+µÿ}ûI0&)BÙÌHÕO! ð3¤³œR^vÞÎ:Ç×ci¶àG§Ó3š4èšå]Aïg£¹p² ¥õJåB“ª¼´ ‘Kò†È¯$å¦,EUV•¤ZZM.·ªöîpöµÓCäÞè´?Fìî «Uå¼ÐZxe*ʵ’•§¬«*š¿¢…±¥Ë©¶f­
+éHP)EåˆÌ‚i·ªZ†¬7emQ‹£BxÁE’“v--‡ Á©ÔžôGœ¸>_ñNé<Ǻ¯Ì¦BšÐ•¦š*QrFG©5¶É¹Óëµq«©‰PHaÒ:B;V–Æ˽Üw¢œ‹°ë‹ª½ü1‹™SÉ®Ÿ¶ìâ„–TÞ&Šh”\:G
+ÿ+ôÙXr^Ö¨%Eäs4Âï7à«oš/9þñõ$‘Ýuå<"Ÿ·"è†@{kmÿpm¨ùøz@ç¬`=G’iïø"_d×Ôµ±>”:¼Ì}ce$Œ–@±¢fv˜
+)yCÿÄj8b„ƒJËpš~¡¦“—-ß8×°°+º(ŠÏQòï‚j³.ÎÚí]ïïÏ—¯Ôû_z?öOÄÈø'iŸg½ú¶“‘ D@pƒí+Ù[ sH |14éèòÆ'>'.ïOXNy\hæZ–Žd•ã0À½ ÀÍ
+bSe0 à ¼öÑT¼1°1Heà7ì äjö=àl+N3—~#“ÖÂ*Ó8z{29aŸ4ï€Ö5|J~\ÃíZƒªrÝDïKüsò‚.j¬ÝËû Îg¿X&K77p–i=ö§s÷|B0oí “ÝŠÍ7à¯HIbx¢—RÎ]{ÂáaTÙkVfÃT²£Wá[Wqñ^¬%ќщ ½“n9컾·`¸@/¥õ^«8^²œãAf¥m†štOƒä_(¡ÍƬ·0Ìj"‘ 0<¯ÒØAšËÙKýШüž´1÷켜y7õ¸? ·…—¨~‰žC°?ÆË™¦à‡Ÿn³ì.lȲËÆZHðÒTÞ}'=ÅïYzʲ«j­¬©X©ÉÉ[Çމʀ!ýZbF|v°z#¶ŽP¸xÀ•ú ºFÃ3<•èz¹ÓJ `ÃîØQR>¨ÐäÅËÀÎÞg:{4²ÕˆˆžþƒÙ r{DqX©*ã£tPñ©œ
endobj
584 0 obj
-853
+1239
endobj
-585 0 obj<</Type/Page/Parent 497 0 R/Contents 586 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 70 0 R>>endobj
+585 0 obj<</Type/Page/Parent 476 0 R/Contents 586 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 140 0 R>>endobj
586 0 obj<</Length 587 0 R/Filter/FlateDecode>>stream
-x•WËvÚHÝû+j‘9Ç$0†ìœ‡g2c;N '‹qÔ@g$µ¢–ÀÎ×Ï­~ð2™™ÛÇ GwÕ­[÷V?‹©Ÿ˜.Œ(-Î^ÏÎz×Jú4[àÎèrL³ŒúQ¿+içÍJT¬iÑ}­ÊF•Kš¶U¥ë†TISQÌ%Q=¾œ}³+ÅC·RwG Öꌢ8¢÷eSë¬M¥K÷äâØ?™\òs¯åR•%o°QÍŠš•´ ÷©–¹FžûÝŒÛÞ}¤ZKú¢ÊLo Ýͨ
-q2]‰R™Â*ª\²ldÆ»÷©\tk%ˆn§ÝO÷oè¡£"Ùe§÷>ÜL§TŠBfT©J>¼Œȵҭ¡µ¬ R1¤äãÒeþD>8¼s#Ê[Qn£9Ú6yn"1E
-Ü K‡š-tM
- w-IvíðЩå» [»ÃUë%uVMS½êõ@8¦¡‰ŒnëTö¥ŒJÎ.û‰ßbr€1ôgHžª.Ãà›ÂÓÚFÂÅ&Ë:p4]‘04mDݼÕé=G*ëszW¶ÅznÏ9É&"pþ¡3•¨ÖõXÆà ø:PL@7šD±ÿ¶ƒn8æRï+Éíôí¨—¶Ü†hZH4ÿba²2*TZk£M”ê¢wû@bbº–h|,Ü؃á€8 ’ŸuâÕý{ðçøÜŸ?˜D#¦ù~k1IÓTCo4+^N7Ê _@Ó77؆‘-8¤çßdŠ{'¶þ_íÃT×kBh~† ,þ½•­$ô§ªÚÜ(jÝ.²¶F²tA líYn2ш9tÖX,M…z¦–ßôœ>ü¿¶›ŒÑPÝ€Ül%Q°¨8—²$£ .äѤº\´,±$æºmh³[ šÈB*¤€öB}p]¢Ä@³¦RÓð‹ðŒï­ª­äs:–5;å (9Õ³z7ÅUilHy[/ë+m¬Õé:sඋp[-j]le*H$çŠæíòhgù>`ƒïì# …ž,D¶ïd‡’R
-:‘ÖR°ºv^h=ÖjÖUÿš]߆rË$tj¸ï”Í0X{»Èш®©·Ø.'¥~Z6
+x­V]oÛ6}ϯ¸è“$š$%}kÑ-ëÆm1-щÔH:Nþ}Ï%)[öºÛŠILY—çžsîÇŸWåøWв¤é‚ªîêãêê»î©ÌiµÅ“ÅòŽV5åYžã¤šü¤vVxe4yC[k:zÝFP™åÙ+Ÿá¯2{½^ý03*Š涼ËJš<¨‰wá©·J{i©¶8³Ô -v²“ÚS#UÐ;Y­'Ié%©®·ægï×ׄÿJ‡Ër¡åpÆ’•­NºFÓm1÷vGÜ´Ð$_•óJïÈI¿ï:#ϩ³­i[s <BdÑR/|㲘Ô<%U–e6#NlƉ= «¿óýêŠù
+¤Å¿=ð -r¾`v·ÄÏâÀ¬¤ÇÈø@UIóå<;ç|ÕÈ„(Àí6Yeô ¬è$t$gNÕÒ‚䲑Dµì­¬”ð8º¦ƒj[~`ehtÆèŒè“!m<í¼àÌ7²#fYË~9/Ú6hï"ÕÀk{[."ër±¤ø…2}a‰„ŽJ\ȾU­„Æëëó ·á¥ÿt=yü¦ñZSEÓGi6]f‹AÑÅ üUR(²INeô#t
+ªcêsj\%µ€ä¶äö}ol°èѽïÏI
+Uõ5æ;1ÿyKofOuÔ»–N`}Ÿ”®ÍÁÑÏ+Š•9Ôe‚qÃ&iØ€ZÊÚ%ÕFKXèŒ5Ô#ÞÈ¥cŸÃ}¾MÕ4xèoåþ§LÍf÷âlÖ/øˆBfËY >»Èƒ6{?P0¼é\Ðýkz#¸üv”
+ß”Ø
+=ã&|D¿y‰¯ $Q˜Y-·ÄGO Ÿë6¨Eïe×ûÀapÀÓé^ŸI<»šm’ú%
+’a¬>} U½ªu¤<Åú®­é‘ß!4è½cÁ‚ÇâËÑzÂí
+¼ƒ™=Äçß@fZ´7ñÆÒ׆sVþd`æ#¬ÿå³Ôû ÒP%G“„|ÄQÂ`DÙ4ã<š[R,PÅà ÝúšÝ£‚ÇFi* ~ºØk"ÁÛÜÇe-u§@9ÎØ7VƼaOŠ%/ ×«6<DÕîk\Ï„Œ½ÞªdètÐüwY`ã±Ãc†a2PŸ¬†¶…¯`µ·–·£Û7ŒlÓîy?ácbCµaÆòÑ&>üòÄ-d˜©ÅiÜIê#Ñ Á‡ÃP ð/
+`ØUVõ±|áÙä/xÀä/‹"+¨˜Î1%;*çSLÃø©Ó‹W1]„=å4!bé¢_T­âìÙ¾Šáò3Útï8nGÓ|q¼“oÆÓiž¡Š¢„á´°ØvGìK`ôk´@ÏÑËQ\ (â
+¬Ÿï>5‰UÂ;—èzî†'²¨(çŽq)âõ3iw"ДÖG¬ž£áù/vÐÙr¶ùõÉt‘.ýõê _‰;§endstream
endobj
587 0 obj
-1754
+1179
endobj
-588 0 obj<</Type/Page/Parent 497 0 R/Contents 589 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 82 0 R>>endobj
+588 0 obj<</Type/Page/Parent 476 0 R/Contents 589 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 11 0 R/F9 12 0 R>>>>>>endobj
589 0 obj<</Length 590 0 R/Filter/FlateDecode>>stream
-xXÛŽÛF}Ÿ¯¨##Hê#ÀÚÎÎÂv6™Y,™<´È–D›d+Ýä(úû=UݼH#g7<ÓÓ·ªS§ªN󛈦ø?¢eLÉ‚ÒòæÃÓÍߟn¦“ÕŠúìƒ)%Ód² Ùj‰ß£Õl²"«iË[0‹sº°þþaFQDO[Ši±šÓS&óSzJGO{í4”U¥®µuw”WiÑdyµ£·O_oîâ°wt°y…%”Ùü?¶y¡ýŠöôQÎ)سÑ|L¦V§¹ªuFªÊÈíMSdT™š°‚/[«#6ý×Ü$ëédM‹%\§’fÉr² £‚ÙQ8³Œ09t§q¸$¯¨ÒGüpµ*
-Uç¦r¢c©40+¯¶Æ–òw2ÕûÜQºWÕNßLÓZhõ~Ö+´€;‡vÀªÅª³1XÕ#/Ž
-FÙñ“óx2ÚÌæ` x¼ñÔ¹6ÓB0¿Š”¹YÔýLŒÓ[âÝ?¬)š1Ípcv h¶˜Ä“hB­†ÇàÄoB¦7¿³Ù==§4Ž—ìÛ§ŠŒÍ<ø®9Œ­%Í¡0J¸i¶tÁG!$øË,Wclñojªm¾k`¤’.S³߳Π··Ø"+d ÷ôð›ÀlÎpfæiö¨Êºu`£R…#gH,åó ë‘)'ÊKö@U5=û,zÃSÌ*§íKžJ ®oNDÿΫÌ}yòÞÊzd)“ò`ÍKžáˆ€8ý
-l®±ç·­‡ñL
-tÕ4vP× s µ ÂÁÁ·¼nYˆúdHÿ 7®ž\þêô` -oîøb>õj+Öh\ñr…l*i¾žÌà ´Ìaˆ—kɹ3…Ò6ßÁÖ’VóîÐï¶Þ^½.ïH:Õ$ÝóL:8ˤ03Ø\ßP‘è@“»ø‹&*ô‹.x¥‰æ^aÒ_„?kÇí¢ooÍ!CE
-ÐEñ*'^ÌÑâKŠ– vQF­‹¢—"7{€˜…Ž¼’oµ/ÆíɃ³JŠ§Ñ$œ<c6F³Ìž‰ÊVÕ´¦^ZÓvŽçÑüù-!*4‹Ï…WðŽ¤_em¾¶MÄûåZ³û“•hÃ(Z1¥dÔ㔬/´!7u«ÿhr«Y2ÉÕ-:ƒ€{Â*©?o8ÆìlÆ1ênŽ1 ŽÙnö*v÷ó ªƒ—¦úJy^*_ק͈5¶®2ô
-fð„°éJ0­á()©ýC3<}\³ÉÐ[ÒÚX¨uÉŠ8É“7¿K Ás äxÓ¤ÈíP±¹ð’Vø“D\\@ ñVá 4°c
-˜tAq°îÅ›R¤O8¯­¼_ôŸPý{­µåÐB5l4‹ xg·¼™¥cŠ™C$àÇÜíX‡²¿
-].Z,‘ ´y{>¾ÿüá=ýÓš¯
-Ÿ0äSˆ„Ù//cþ†0ú«O³%ù’eÉ”÷" ~¹ù/)¹¦endstream
+x+ä2T0
+ä
endobj
590 0 obj
-2102
+130
endobj
-591 0 obj<</Type/Page/Parent 497 0 R/Contents 592 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 85 0 R>>endobj
+591 0 obj<</Type/Page/Parent 476 0 R/Contents 592 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 147 0 R>>endobj
592 0 obj<</Length 593 0 R/Filter/FlateDecode>>stream
-xWÛnÛF}÷WL…Q
-äZdaj;âŠ)/´þhTŠi§Ó[ŠJƒÄêÐßǾ$.-“؇=FcJä× 1ep*yTX.â
-‹ð+Cå™°dQÝsIY²Å®·’\ÊA,µ&„<Õp€RpYVÂ)üÉQâèÚ€X™¢'Ä"’´¦(&Õ ×¢&Mïi6ŸL—7sºžO>àcüa<¹_ÞÝÐíýœ–o&¶¥ñ‘3#_ŒOÓ£;Ð*!ÙØãoE¼±eoX/húþîŽL
-Âmì…0Ô{Ëô\pjpŒ!.y"@å¿DÂPbºluÑîsnÆi*£M"ì=*tÆ*Ûv‰ÞÉ$emâ„‹óýVù[¤ƒÉÉÈ9),RQ³nS¥‚1þÖ’LA ÅÆuÕÖm5(o¯×Ò*ä}5ä‹8FD¿ ”Ù…âIH0-gƒõ—C1;髵ª_à/ïU±I!¡28µB‰…Z‡2©ù\AÀº_³x­­îÚ>
-É3‹mÛ,Qî! ÐPT¾‰/\R,¡¶—Z7±Ìµ*Û4Ùmæ9Os5àJÇ@|§Èîx'ölšÿStTô³Òƒ r‹s£#bp…Goû×4ÑÊÃt»v—ËÚߺåË:ƒ¡‡ê!öÍÅøíå-HæB½Ö~ÆY
-ƒì»“
+xW]oÛF|÷¯X¤/ `Q¢,Ùr°ã¸pËi,4UŽäÉdLòÔ;Ò²þ}gDÙ@áÀ±ø±»73;»ú÷$¢~"ºÓÙ9%åÉõâdx{Iã-V¸s~1£EJ£p4•$øCåU^=‘¨h¾ UŠ¼¢M^gô(ÊXÐ8\üDˆ E‘ 1ÏÂ1‚w)JM+¥I¸c2R¿àb­è'‚ûÈ©|J´U •©i•küiJu&i.ë뻇GªD)I­ì5[gÑ :s9wÁù-®ÙE&UÙw¾Ý|¡Æð‰]÷¢O¾Fw<-²ÜP¢¥¨¥!ûb)’,¯$‰$QMUS^õ2s>Ÿk Íò#=^݇4WµDQÛ£™L5EJݹŠ¾ja
+½E$ŠEòܬÛzUÕZ…Ô¡Ï1>'Lá•1
+Û†m/ Zü´ªŠ-µíhï3å£ÏÐÒxK½,hJJE-ba$z”Ðè®êîØWðÿLc#­šÂŠ“A#¹‘%ZÏx®™OÄþ)Ó¶ÑÈRøuqÂkm–"þëûï'ÑäM7‰"8YIãh^øO Ïùt«„nÀyœVŠ6bR—y%
+È“}$„ѹ²-$‡YõÔU» fˇOÙ*íS­qjËJ©À`*k‘¦¯ÉE&qÊ×ÜÔÜש|‘…Z—¶™¨Õ´Ößâb[I55› ¿œù:¼½õÖšçBkÀªzƒc– ÅÊ‘¤Ô99gµfj-A*C-/8€ˆ IFÁaáé¤e!! Šµ¨’ =l[Ç§Ä }ßГƒu¦Uó”TÜÖjû³(AY
+ü@®q}Ô[*öøeh]ÅüpWËWQ®Á¢ˆÕ‹ÜÁB+n^¾Ï[ÂÇ•íùóücÎAYñ°ÃÆJÕr]ˆôûẸ¹&èuZsxÎÍÎXí{L[ÚÇÆH4wmÂ:! Bûè^=vsòm÷1ì ]jöo‰G“½‚R+ü‰
+Ej{7E…mª×Øù°ÜÐö6×fÏrË.Ãá¦Ë `—âz~·M& Zskɲîj¶¦–å©Íèw9´Dm7ET†"1ÜœÁ¸¥Ëd.Ü#–Ó`ŒgQÑå¶_ÒÙô †o?x¿ÑåÔ®a»u|®6§ÞßpP(I[‡åc8 ·ó½[£I¦¹]=µÃöh
+€‚Öï¡
endobj
593 0 obj
-1803
+1546
endobj
-594 0 obj<</Type/Page/Parent 497 0 R/Contents 595 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 94 0 R>>endobj
+594 0 obj<</Type/Page/Parent 476 0 R/Contents 595 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R>>>>/Annots 154 0 R>>endobj
595 0 obj<</Length 596 0 R/Filter/FlateDecode>>stream
-xµXïoÛ6ýž¿âl˜ ÄŠ$;¶ œ5m3´I»í
-³gÐÒE!cº{l”=wgÑ"½·à%Þp4ÛçqØðáŽԪ‡´–YÖýZ¨uA ­V¥Ç6-ipÕ½7pMAŽ_ŸRÐoèà‡Þh‡/ôzMVe©th™Ð h•ß&tã¶õ®Í¬nÈÌê\L³bZ€9`¡S# ŠWð¨],ïe¦ÊL¢K$<ù ü°´ãKA°à³i°ÄÑÑ`޺Ȕˆ÷ã›(MïÿféàPâv>XÂpàZTß|b3FårÍ8I¬¿®…®í‰Gç,5ö_&”+þà„¥Tâ&ÏN¶Û7Á`ètÒ!3s
-ƒ‘7lFMljbxŠÉv6@$ÙP›‘’98e>²`š‹mŸ
-ƒ®¸¶È6Úãœz¿ÁãltÁ‚¶âpÒˆƒƒ¿P—Q-ˆ¬‘Us ‘ÊsQÄ–ã›C­ìì(N‡ûtǾ5—)+ëOs ’BE©¨¤=©[cبÄ:­–¨“©D–á„z[“s‰Ê2µfRá*åƒÈËÌ2i©Ö°ï
-ò ²o‰ ]ÊøŒ1¿öé”s  nxbï¤ó ñLgã/•j¡¨û´RÕ¯FFØ»JdC ÄÚ
-\Sj¢3Z¯§(”Ø…Þ åƒ ÚX8‡"`»†ÖªŒVèâPL®KY4N]<Ì;œrØ
-mž¿€Y.8qžð Í+ŽKw·su ⼓zÒ³åÐ|Ô ]`mú“=n/ºó^³<j–w‡à‘ëŽçá`hçÑg ‹Ã]…}|æ48Ý ¸¢·†9zŸpg²=ÆìIŸ Øsxk{ŒFÂG?Кm¹•é£+Ûîm1ÛclÛÙ7ȶÍpqÁ áÉNBØKFœâ k×5)^Ò£¬Û¼ÿm1æfjÓ?Z¼vâÎN\G}”ÛÓ!>rêì¿4R;ßNG¶0o_M—h5yÆÝEC9÷bï3½Ûöù˜MÎB˜|;]^ °¡Éí`Û¾îžoíÖ>b6ï¢Ë\lÞX̽j’Dö÷Æ{ŸFuS´õù›¾|…WÚRÜ#.Ù¹Ù
-™‚׿›ÔB‹*õ•ìbÓ–cFÊ×éÒ¡â¡y4•Ì©N¹:›œ„µ’óXVѱ݉r/ç8EE ë˜GÃI žy9.v_éYQL¶OE[`ÛÉѧ%9õë”3 ­rD¡nŸ aÖ.õ[ªÛ×25èÄì‹ÚŠêQƒÈõæ¬Ò¶CÞÒ²Sk¤66Y;ì­ƒHò7­ð¸˜B67Ý{ûD…–¥à—t÷ÝP?[-˜Ð.¨Dw¯(SG˜1(oάu,À‹Ê^)ÿ
+xV]oã6|÷¯Ø¾ùŠX±ü!ûèCriŠ¸ÜµP½>Ðm3'‰.IÅçßY’Rd7èEÈâìpvv¨¿G)Mñ—ÒjFóŒŠzt›~ÌGÓdŠëü’òËo?V‹dFÙ:K¦TSºÈ’uüVÑ#/º¾_PšR¾\¶^Q^úõSÊ‹ñƒüê¨Ø‹f'Éí%½ÉŸ¸È˜Ëy²8Ǽ`avt}?‹U"ŸóBtÔæËÎèö@?p‘
+Ñß',ª(KøgQKÒ[ÿ¹Ôµ
+Ž¥P‹ïb 焯z9 ïÈ
+-:"cÛ£l Y²ÜÁ!³dšdWP°ªô±³MÜ‹ü
+«@–Ýr&×’)ek\îbŸHŽRK›PÎ{ŠåI*¬6´1èS!¬³ð e‘¿ÿüðH¥pb# \ç
+î~ÅÖ!Ȩ oìpVXwÙõ>Œ´N’1ì¿ÞÔÛ¡!쵓O**…täðDgv ×Zœ=+œ„­QîôËž h>Ÿã`±^áÂŒ¶áô_ÇÔN¥ü8ƒððxóáö†>ý„ãæ*Ú•aBÝ0ú$¬š„eã_Â!ÊÍ£йo©’Îâ57ôó·‘䯣
endobj
596 0 obj
-1839
+1007
endobj
-597 0 obj<</Type/Page/Parent 497 0 R/Contents 598 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 103 0 R>>endobj
+597 0 obj<</Type/Page/Parent 476 0 R/Contents 598 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
598 0 obj<</Length 599 0 R/Filter/FlateDecode>>stream
-x¥WMsÛ6½ûWìø¤ÌØ´(Ê”•KÇùpë™ÄueÒC. IHHB@Ûʯï[€ h%v;ÓIb‡Âî¾÷öíêûQJcüIi6¡,§¢>zµ8:»šRšÒb…'ùÅŒ%“ñxL‹bdª*j´£R®T#Ë Ic´!½¢ãË¢ÖÒÙ(Y“²d¤k ^$§Ém$•’Kˆn´“¸#œ¿ýbñ']à‰²¤­Q“†é4Í’ rm^Q‡ÄLGJ>È¢uÕ6¥4!šÆ ŽsóÁuÓÈ¿b¥9ñ…àRFU;d4jE¡[$É1Þ.Ž¸z¥ü¿¿¥é,É(ŸæÉ”jJó,9ï®*úÈ¹é ‡Ø-6ÒHÎSP¡ëm%k
-qâË)ãëêÝí"}yâ1Û‹ôõŸïq“®®ß½Å/é
-@A]îuk!±Êj²íÖ‡í¤YÈ­W*ß$W†´b€½Úqÿ‰¶r'¤›jw]7{Nù0]Ôè‹ã
-lâ€)ãvi{gùöY<WÔ” +(¾Ã¾Ñø”I‚Sè‰DïáïýFr©•^«BT¿*€S÷¨uç\5 VhY/~D8!* Ò¢¤¥¨DSp? 7VBU¤¡1/ûAi×+Úépz@ #ØßÁÙK½•Õµdø­nN<PgW0loÏ#[/“B7+®>•Íæ
-âÒK'08—îÕdüæ­
-½¿Ì(ô7€xˆëÌ/눲íA û,¥sÞŸ—$/¤ùO’œ$ô:âýçM ö¶£ö ….@<ÎC€({–žà……¼”; À<¶Ð[É-æxÇî§/£Þ—"Ó‰{ðÎ;€Íï[½Eì=¢Û0ÎàTk^Õ÷"ÿò†qÝÝøuŠ‡N v 'ß~ À øú‡Únyh ƒ5¡‚CõT›0ž°R•´Xž$D„·¯o®¨»Å¢áo ì=•¿I”lvKl¤€5Jj¨¾¡Íýfð¬åç¿ ûp¬…Íù~{T›ŒF¿;–‰%O’î™ß~¨;žêß[ ·-éNa u(–B,·TËb#eklŠôËùºQ>þ‹[“G¤¶Áð
+x•T]oÚ0}çW\ñ2*­,¤Q¡6iÒè45Ó^úbœâ5±SÛ)ðïwì„nE¼LZ‚}¾î±_F3JðšÑ<¥›[’Íh™>}¹£4¡¼Ä/·óå%Ó$Á9yÍVÐýRº0{‡•øem¡´»ÊcwF³Y¿û:]LSìŸl„>R˦­™*ñÊ$Ü3dy'l¡ôŽ|Åä¼ðL¦¤HòÁ‘تZù#yC­°^IÕ†J“¸D? ô ]ÏnzÒ^kŠ/*`@Bz áfË–ÛWüëf-‘iÙ
+$‚¶Q¨6–4ÁEc
+>±¦·Ó,XÍ+¶Ðè¨édEÒè²sÊhÚ²ß3ëèT*+»~µd‡'Â#Š—Na£ qdGð`3}¦õ*F.h_E“þÇjeœ') ¹½ò²‚N¸÷B{°)Ñý%ôÁ)¤zkêi@½Ñõ‘4s Užâ>Kø!§åz¬‚ž
+ŸH)ÎR4L=0h—G*¸]í?ö1÷ž°ö@Ú«ºF âg׶ÆúsBö˯ßcù·ÍëŒJŒCtàÔ(Æ‚¨1ÌÍ’G’µÂsG.Ìc?•öî!²i…}W*,Ò© ^†ù4.è„Õc¼ïÓ…RÀ·®—[Ä΋5440Ôs˜ø0F¼ÅÅÇ—0†{s¦ýo©™§™ä8pqÆ|ÜÆØ0õXÅÈ8~ìN®Ø±SiMóÂvèŠh¹­…DA¶Ç3Ú y|/ã!Y£ÖÒ{¤ŸP‰£‡ËƒV¦i;¯cÚlVô4Ù(i3¥§ž1UÚ™šŸ®¨­»Ò1ÖÏù×ew7Óe‹9þOñFRe{-Þî\Yÿuweó ˜a×$K‚%pýýÀ˜Ÿendstream
endobj
599 0 obj
-1730
+670
endobj
-600 0 obj<</Type/Page/Parent 497 0 R/Contents 601 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>>>endobj
+600 0 obj<</Type/Page/Parent 476 0 R/Contents 601 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 163 0 R>>endobj
601 0 obj<</Length 602 0 R/Filter/FlateDecode>>stream
-xW]s7}÷¯¸“'2 0œ—Žãĉ'qãÖtÒ‡}»/ÒFÒB˜Nÿ{Ï•´|¬=Ó™Ú Öê~œs ¨ïM†t1¦|}önvöavÖïM§tx±K|èÓÅàª7¤Ñt‚÷ƒ>¿·’|§°³Áóç·# h¶€ùñtB³"œ÷i–w”£B-•e¹#§–ZD%裮>Òv¥òåBÓ\Rípè m¤U‹ù•ðT‰üI,%f«K#
-¾›"÷u0éW’Œ–¯gßÏúÔ\ ÐYѱr!­Å³JÃŒ¤»ue•öˆEx1Nöˆî<â‹ç·ã‡´ññOMJ$ž›õZjöbò+\t2¯­ò;ÊW2"Ž¿PNÌKYôØB@xŒ/€`Äqˆw Šç·W4%̆Œï1jãÞEoÔ£‡®ƒ'¼2šnJ%u+@¤=dÌ;÷Æ•^»ŽO[¹¶PzyŠ:¶˜‹ÓP%'P‹8€þDíÝÍn §ûéë·Ù×^åÚÀ-T°•—5C·U~Q ÎÔ6— Å5NfÜ.E'$ß<úRÌ`EºëÖgí‚ h{oC€&OfA̠ЕJKz¶$—[UA1è<eÙôP ì>Ž'é°‘ŸíA€‚gŸ!SAK+*(Y”ÇK»H B鞸®þ§ëîp
-‰ìóbl^‚$ë@ðs Ùkª¬Ù¨8 ZK¡1?jiwÏtÑÔ0³(A6A‚á9*,(+_ñM é²O• 7!qZ›B–¤3#meYòïÆ9cÒT21)‰
-rùm=§£
-\¢Aâ
+xWÛnÛF}÷WÌ[U@¦u·\ (’8) 4N+pò²"WÒ6$—á.m+_ß3³KŠ¦Ó>AlÒ{™3gÎ\øílJü›ÒåŒæ+J‹³×›³‹wW4›Ðf‡•Õåš6M’ÉIG÷‡#Gþ€[í½®ñ¬Jr:mjãô+ë]ÿöóæoÜ´ é4Üt>['3Ü5zÓÔµ.}~Sf ez‡ñ|§Š­Â‚våOžvµÖt´ lAtP¦Ü“·”ÖZyM¹MUNŸKóD 옥ZWµv°
+MêHÊõö]-ÉÖÝ©«u<4‹`KZ*×SÄl¹\% Äl:›ƒ«ðÖÅl¹¼Äb??æZ9 ¬;Î೨Šþ ¸o9Iæƒû:îD6à."ó[øO`±Òõ¿ÐN;8lJü, PQ¬pØxT f7϶œÙ—ôùöæ/j DÁÀž¼•à–.6-ÿ ÿ:›Xø¢Z¹„BÒ§,N$¿zPò6ÇKI™~й­
+®&ÛZ•é)mK
+É 1ÒºÁ¥ygw½>Y
+Màtb‹z_î9-Ƥ}šÐ+”q,#`}SRÝÁêVÀ
+ïQìõ“×e†âùÛ5¾Á(+ËÀºŒCìWì2<¿bR
+Ã1q¿#UU¹AÛá6’é„P
+¿!⥎…®ë;¼DEÓ³8±×.×\™¢=UŠCìûkÞV¥_CÕã ,6ŒOœ¼1N2eökÞiLÒÙ˜
+õ•U£žÇå-¦Ê¬@–UŽ‰É Ê‹µR—¦¶%w^dµòˆ:ç—0Ãm|àl×g/Þ­zŸ#±ãÞ~ؼý…O`(_N“%ÍæWÉ
+£Ô_,«øG©SqO“5ä vôç*zÏ r'9„g¨'³i#s†>‡|«!ȪÙB˜‡“^îõÄìÕwS†Iy0¢óœJ˜²yº·uÚY7u“l›ÒPs¡#Lû4“9£ 9uá…=ë½ÂmþOk½×‚Ö<âÖz¯˜§—Ï.寅[;)Npz8&^[‚¤àíÍÝ’Rä)Qì.蜓êÕº3]ÿ`à^üGªíÂìº 4>[ÿ÷÷ëâr(ó £Å4jäϳ
endobj
602 0 obj
-1527
+1634
endobj
-603 0 obj<</Type/Page/Parent 497 0 R/Contents 604 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 106 0 R>>endobj
+603 0 obj<</Type/Page/Parent 476 0 R/Contents 604 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 11 0 R/F9 12 0 R>>>>>>endobj
604 0 obj<</Length 605 0 R/Filter/FlateDecode>>stream
-x­X]oÛ8}ϯ¸Û'ˆåXqì¤ ¤é;):cŠÁj± %ÚæD"5$'ÿ~Ï%EÛQ;À<,
-Ô¶H^Þ{ιÊŸgSºÄ¿)-rºšSÙœ½[Mîoi:£Õ+ó|©è2»¼¼¤U9šg³ŒÎWœÔÖ
-¯Œ&ohcMCKѬåÙeöÌÏò,Ïžyëä~FÓi´7ΰ7ú¤ž$Ö*í¥¥Ê♥Fh±•ÔžvÂQ¹z++*F{I;ÓJRMkÍ“¬ŠsRšøÂOËvŒ%+k)œtÔ$ÿØ…KO¯°WW…&ù¬œWzKNú®í¦+´1umöX€]QS+üÎe½™°™oJWfk_œ}’$ÈK]I]¾°=‹0š5\ó;Üã`ÖÒŸò¼o¿SµÌèä³hÚZ^Ú`!Ùý²êMÜgP„÷¢Ü\"Ž°Ãa aÈÓ^Õõ©²_$>N? ý€@ôñ\Fô[ N+>ËÁÍ‘Þq>ÕˆGéÈumk¬á=,ýú>Úe+­qN­9¶uçƒM:Ä]G·¶V>)Óáé™®!Ÿ5[1Ȇ¶P!®ã!Böäh´tJ¼’Œ®_HËR:'ì Ãþb:¢½€æ`¥s’£ÇŽ=̆ˆ¾ó ’e«›N—œ¢V†tä¢8¿ 
-:ÑÁ•[H 7=Ê ïœ)•ð o¯ü.ìn&†J£½PëJóÅ“{$hJŸ¤âÿô¯ŸŠbùûrõŸï;k!Ã÷8jM½”â÷¢øÊ öŸh)%âd¯#¹Ö˜a²T)‰ÓÏ£ªÉíLWWƒè×Ð’7m á7 Ì*Ãp@çîíw.§Œyÿ¶(¾}þòeUôϸkÚ6Ø>XMÅõù1ðdår ìÛ 7+åÊZ¨FZ »6P™¬Tà†7ߢ´2¨çXFô±
-+7]}åTô¨‘ø{®K¬ ¬ÄІªcì†ÐE°ðXé¼°Ì°ØpicS¡>l”VŽ—SÓ<EÌ Ù% XBG—A§UH¯õË
-7—±C&pÑ6§·¯:$K#6Þ5ë
-¨7Ê,¥„‚fcËLDô¦/˜iBV8Î/ŠÑˆë`aJ8‘ÚÞØÇ„ƒøâà6¹Åkj('Ô&mj“VúHR“ôhý$ª'ôLŒkœ”ˆ"Ñ?ˆ#4ÿ‚t>B&T”(AÇ‘ŒO!3ŒVÓ.ÂOŒx¨c¼èDve•Ü+}ÛaÈD¢òy/›c %Áy:Þ˳ËwW3õýlŠ´âÛVÞ…&±
- SVÌÒ
-Å´ìÃ$Ü9&,è&Ž£P€AÚÉ
-+š ‰0˜­Eù¸¶ÂÀj ´j­ÂÌÂsY*5líûXvzÞpoöù`˜EJ„z»¿òo@C@>úõJg×9ñu I~Í9G½Êúúu2$¢f¸î£½Ú¾©„é´õ| ˜ÇCÇ0Rin,ñ=&â”͵Xò  s¼~geŒú`öÈW¯¤§ÚjÃU(뎇i¾òTÔá|Ê‘TטñÀ–Òï¯Òóê6”®Ü0½Nßs¢õ4KŽzyÆ¥ÄÇ(äšÈ³¯Œ³&ÇíLÝñÌN´´r˜¤S¡ãq÷õ'ab˜‘ÅÓ>ý`ƒîô,$ìñ›ðu¥U-F+¾ðÔ˜w1ÔóGÈý8ÉdR{m[þp/î_‚xv”>ãÝ° ÷Ol–…g‹¯†‰)&®æ˜ ò+PÕÐt‘g·ñG§‰ãðöÛ-¿Šç³AOÚyß¾Løõ—]ÈT_J¨w+3LϾüh)|ƒ%p‰ =È ¼eþPdID'"»é{ÿôêÞί¯cö.ïÞÝÑWkþ¥Ç,Rvü¦Ò‡ïOç‹lJãEÆ…ðÇ‚¿ÿw‚Ùb†[ÂÉ«ëË_Îþ^#Eendstream
+x•Á Dï|Åë¡i½Zm<jä°R­)E±Fý{©ÞMÌÞvvæÍ^ ‹Ã‘ LjGšdÕ‚A7QQy}
endobj
605 0 obj
-1870
+162
endobj
-606 0 obj<</Type/Page/Parent 497 0 R/Contents 607 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 10 0 R>>>>>>endobj
+606 0 obj<</Type/Page/Parent 476 0 R/Contents 607 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 168 0 R>>endobj
607 0 obj<</Length 608 0 R/Filter/FlateDecode>>stream
-x%ŽÁ
-ƒ0DïùŠ9ÚƒÛ$†Ä•¶7¡Åü€Z44Xðó›T–…av3&Àã‰BÃ-¬¶ìf']^HA•&j7 Óù|/!ì¡ %”ÃöˆÂemÕÔÁσÛpõî» ëÖm“_OvfùAå–iR„fz‡ÿ61øm·¼ºK{ò$IÚ­Œ¢26¶}VèdIJOöò1ðendstream
+x¥VMsâF½ó+ú\µÈ€ùrn°Î&®lXo¬Íæ@Uj˜x4£ŒFxù÷y=’à¤*ÊM÷{ý^wÿÕPšénBIÖYÄÛ÷4ìS¼Á“ÉtFqJý¨ßÇ/Iw!’—­³¥Ioâ?qrBƒAu²7œECœíÎK¿³î»‚–ÖKú¾:7ªÏu)Þ©‚R›”™4žðYPb³µ2Â+kÈnèAìUJ aŒ5¸æYdkAC\þôðž~úô5þD¤äw²zÆúÔÜUñ—1=ØL(CæŸ#ZX¿;ÆC4'©(sé)S™Òú€‹…52ª/N¢ùMº¢N©Ê!wÊ:ò–œÔR2$µ)eÂm@S"r±VZy% >(O‚!~U&µ¯à$¦QÔ§'§ðΡNôÀ{k¼³ZKG«.0¯n"m’6øѾ*³%Ú”&a¾b¨ØÙR§ôjÝ 7¸Šú5ñIM|¨N¯¶N¦t^™i4k9L+µÝZS ®»
+n¬ÛE뻂à<ÉèL,‘V§Ë8ðxÒx
+œ²W‰¤=4%V7Wicž¦¬ÔJŸ{%Û_Ø¿#¶øÏƬ’¿J4s´öài£
+CLCËÏÒ­¥³à‰Iá÷÷’”“‰·î°ºy#±§ªaB?0„?–àh÷ª5³ÀPtI™Ì!ÈP4j`¸—{’-½V¦Q!çU¢M¼™ж“x‘ÃJ‚żM¬Ìa äÖ¥Rù¥_Ýýp7T®¥—ú@©Úlp#FWhËxÄXOTpþ2Ó³±k)y¶m`@¡qMù3¨Âf’È«ì˜~Ó?ƒÅpu‚p³0ê¿£W¦0•˜†6˜ ò‡š0ÿÐÁéꄦís¼°
+ãi~
+OB?àŸŸ|=ÂÌjëBMÅ0Q4¤<hö„9Ã}§à±Èœ$ÖlÔ-Ÿ/+@Ð'úqTmAF*¬í› a' E†aû.\K¢þÕgÀ?Ä^kÂnCþôë»)çÙ
endobj
608 0 obj
-162
+1233
endobj
-609 0 obj<</Type/Page/Parent 497 0 R/Contents 610 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F1 4 0 R/F2 5 0 R/F4 7 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 113 0 R>>endobj
+609 0 obj<</Type/Page/Parent 476 0 R/Contents 610 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R>>>>>>endobj
610 0 obj<</Length 611 0 R/Filter/FlateDecode>>stream
-x•WMoÛF½ûW Ò H”HÙ–¤ì8.\Àr Í¡êaE®LÆ$WÝ%-ëß÷Íî’’(ûPĈMr9oÞ¼þ{Ñÿ"šÆ49§¤<¹žŸŒn/)Ó|…'çÓ š§4ÇcÜI‚/™X×RÓ4$#“Fçõ–~¥T•"¯?¢\
-ŠÃ×óŸÖPtê 'QÃT0 £þPy•WO$*šÍéƽ¾Éë¬3;§EÞ@<å×ï*R:E+¥I¸ãÃÁèܬý„io×…5 Úª†ÊÆÔ´Ê5þiJu&i&ë뻇GªD)I­ì=›
-§{Ö@Ko£ÞE
-´°ö=1ùõ½ð˜¦æ G×7_Þ„á8$œŒ½]ûåé:¬m¦ ¾L­Ö,}·¦B–ªBðœŸn\S$ª,qýé0
-¤ÓÒ@+Uÿ⣉ڢšr¹ÆlRþ$€HCÍ¿ùC0÷ ¡6°h¯è»ˆ­ ;:‰­°lØÆñ” EÀ§UUl©mGûœK¾¾Ùî”Æ@[zõØ󂦤TÔb)ŒDÝEÒë
-®ñcš$¥USXòor h$7²$”Ö@3Þ‡«Cæ“UO™¶G¶„_ç',ÓV«)⿾ÿ~^¢é&,¾%ÅÑY8õW(žû– c<ˆ­àíäRŠ6bR—y%
-Гu$„й°-$‡^õÔE».OÙ(í)„ÖÈÚV¥T¨`*k‘¦ÏÉy&ñÊ×ÜÔÜש|‘…Z—²™¨Ñ´Òßâb[I55‹ ¿N|Þ^zkÍs¡`U½Qc¦ -%˜#3P©Sröjk˜©µDQÁ %Øò‚IJd–‡¢–…1h©E•dèaËØ¢8Îú¾¡'…ƒu¦Uó”DÜÆjû³(AX
-b>‚㥭uþ‚¡Ê¶G·;:wJs·ÛKÆá«…Çcç~¡Ô³¡"fBçÆ»÷ö?¶>ó¦òpu7£ÙÕý×ßœ»nÙbŽnۃϴv%˜¢£W
+x]RÑŽ›0|ç+æ1•. ¼^r=õ¥ÕU‡ÔgÇ,‰sÆ›³M#þ¾kµ§
+Y ÙõÌìïY‰BžM…ÍzÌv]öù¹FY¢´mt=Š¼(
+tzµg7˜ãä;"ž¯j<(<ñ¨Œƒ£gkÉãSwÎÖ²®¶y- «*_°•›¼JÐÞ“Š‰hTúd!ú)D(­yr1
endobj
611 0 obj
-1557
+401
endobj
-612 0 obj<</Type/Page/Parent 497 0 R/Contents 613 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 120 0 R>>endobj
+612 0 obj<</Type/Page/Parent 476 0 R/Contents 613 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 215 0 R>>endobj
613 0 obj<</Length 614 0 R/Filter/FlateDecode>>stream
-xW]oÛF|ׯØê¥ja3"­/ȃ?ê"@夵Š húp"OÒÅ$¹;ZÖ¿ïì)Q²‘… H”ÈÝÙÙÙ¹Õ×^LCüÅ4MèbBiÑ»^ôÞÜ)Ži±Â7“Ù” £ápH‹t`eZåvôŽ2]Uþ´øÒûeÑãü]ó»?~íMGQB“ñe4¡‚âÑ$š5W9=„,£C–É·uóÜËgGéF”kIn#©IÓƒ¨ã‹htõ‡YÓ›»¤É½HE[m×F×½ã4‡þÑBP®JIªô þ^çz)ò¬8¥ñ¡&#EöÖÃ=Ðxî3Ÿ' ]dƒN>ºý0çœoîÚ CÚß',²(Køg
-JQHÒ+ÿ>pO[IÂHú¢U©Êu´giœDSφÈWP'QÜ\5Üq{0‡Îþ¥k*jëHäVÓF<â+a×IÓï†CðiO‚Ká¨qƒì49É25»ÊQ%¬?™ý~'¬tLx öŠì¤m>jp»%¬´¡® ÕV°ªùáó
-gžmuàwãË®¢ïT)ò|wF"Ëèó
-©ÕîóO$Zn»¡Àm2‹.›4¸{o/ÆÌüQÚo1ß`>…µg"6OàèÿÎÀw‡ °¶WwÛé}^žÌ/×·7qóš„þ¶ÍìŒÇb#mÐ?OGeT!ÌŽD™ÑR¤˜æfHR]:£óœ;þ Š¥ Úª<'áœ, 9´˜o©;ŸueÀ¹UˆWOÔó±È!u'香U` Ìbž& :¤Bìh+JØÆð0ò¹Â,¶Oœ
- ^Ç&¯rÌw)œz’,Pµòà<0[,3. ña÷<Ð0el;¡Oî¡Â™ný‰àÙl Ç£`‹滑cÀg{:@Wä @|<¿”ô6ˆàp,}CE?‡{_ ¢ÂË6:;£íF¡E[x¬bydu*3¦;($‰p Á<×ÛV6M-òR L»eO.$TÊøH¸“:á™–6¢×Ô¤'©ð´¡¥AŸRa…A1Q^ðéýýe‰¥
-C`¤½fZ‰:w8k5Ñ#€á°Ž[W•6/FWºë÷<÷‹ßæO±Ÿ€Îl1Õhfe¥»ýdXîÚÞªæòÙ‡ XÁ¾BÇlü~'OªôŽÒô§ðƒæÔÆ
-1ŽõôŠ(È:YÙ
-8VÖ[È:u§ñŸ@‰Ñƒ’éFUËöi>¿Áò5W©ÑV¯…ŒL4î*­Î%ö±*¯alžÖÆÂf—p§×lÖìñdŠ%{šàGRç×ÒÃÕüúŠ>ý àZ˜Cd„ë’k8O‡ÇÿÑñFø51ÃO38ÝÅŒÃ
+x•XÉrÛF½ë+ú’Š\e’ظÅåJy“í‹ìغ¤,†ÀDŒÍÀP´òõyÝ
+tVJè3s
+ÃAÛ‚QY¡¡í'·Ô p6:'+Ófçˆh„¶@8,;0JÏ%R&7žýñÃÛ=þœÒÜÁe*ÂY
+,š€—tñðaÜ”ù®øU0·/>ݾÁO¶ÉÞöÿÊ=ü³ÍwIÄž© E6ƒð OòžODI«2߃õž‘Î žIià2ᬑÖ6g.®l³hNôƒ–üp"rÁó,èª .ع®³ÀÕJ—uËyÍ¢Ôk]òq·†'õQ÷â*XpnJiéÂ+ hFö=YsûÏù\Ôˆ0 x>•ƒÔÒÜõä Á'c¥Ò!jy<9º¿Nw¨;~¬ï>ùþIÏg'>“0 DÀø=—5»ŸGÎ øîIèHxåcaàñBUNS„Äu…ãû..uª3C’ 8-õ ;Kd„›Ëé6i
+˜PÿY8Ë4Þ‡ø®`j[•7·¯>ýýñîý‡ÛñÖ¤çæ‡qm_CÀH læÕ‹š!ûzdÄ­ xõëïX¸/_à5 VÓÚο®þ)*•¼endstream
endobj
614 0 obj
-1534
+1569
endobj
-615 0 obj<</Type/Page/Parent 497 0 R/Contents 616 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 129 0 R>>endobj
+615 0 obj<</Type/Page/Parent 476 0 R/Contents 616 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 11 0 R/Fc 13 0 R>>>>/Annots 222 0 R>>endobj
616 0 obj<</Length 617 0 R/Filter/FlateDecode>>stream
-xW]oÛ6}ϯ¸oó
-Q­lB!é3'’_< y[àAS.Ÿdaª’«É¶:; ¥¤§Xixo<ˆÏ¶qô¬Šo<µ‰8ïî±Æè$žœrÆ¡@mp§ÈŸ„vb/ÙýP7Î r’²/À ôÇ°½«?8ÄrHR ³3½‹ð}¼KJ»†e\*_D†ªíÝîÄë‹$ªÿIÞ!orCÊÅzë©O«ÕPñ,ió ‘Ôˆ²ª¸®w>«äR- /{P•åÝ£éPX¸HŸG*‘ÉØ÷ Ež̇LoA( ¾¡=t´„LF½ÂÐyŽ×q²GB±òªw¸=}ý6J³×‡M–™²Š¯ µpã!+.*cÈÉb—Y´íç»–Ëî:îˆ ”æà%åB–ÀÒËwhôSß ¾JYÁïÌ Ô™¯a¦’h!¾, (ëi„hàÎç0î* þÄwrëŒö
-a’Ì7VŽB^sË÷\ö ¶œsvÊ­ÊjcÍÎ ¬wöAÉ’:c¤uƒK òÎìz)|²
-Màtb‹z¯÷œc’.Kè
-eÛXß”¯î` u+`…÷(öòÅI£xFþvk0ÊÅÊ2°îÇ!ö+vž_1)…ᘸߑ¨ªB¡ípÉeB( 
-?!âÚ ÇBÛõN^^EÓ³wb/\®¹~ŠôT_Ôbß÷Xó¶"ûª¿ÀbÃøÄÉãä§Ì~Í;I2S)¾²jÄëX£Ü£ÅTEƒȲ*0 1™Ay±VJý¤j£¹ó"«…CÔ9¿<3ÜÆÎv}öâý²÷1;î݇ͻ_ø†ÒÙ*M~ì]c”šOטšxP]S¥NÅu–â¯Óù
-¿ý¹ŠnYƒAîä ‡°†zr“5~ŽÀÐg‘o5Y5[ópÒˣ܂˜½ø[é0)FtžS饛—GS¡uÓX7ɶ)àjáéÓ>MgaJœñPسÞ#ܾÄ(~Úë=–´æéú´×{Ĥˆƒþ¥üµÐak'Å NÇÄkÃBð)xwóp¤ôòôQì.èœóÕ«uÃîšæ€{ñ©¶ ±ëèt¹Â8¼šâûµ÷!ûpuûæŠîkóýƒaˆŒŸ0Øêy8uŽýŸÏÞùj`lt4»Œâúóì–¸Ânendstream
+xuTÁr›0½û+Þ‘ÌÔ0rt’¶ÓC3mC§izA8d"’h›¿ï®ÀÄñLÇöiÑÛ·ûžöi#¢OŒ<Á&C¥VWåêíûqŒ²á­¬ÈQÖˆÂ(ŠPVAù a¥ù- Ôhì8 Ú8ÔZ‰¶G§º·€èk\”„Fø-øÙKç_ø5ŽiØaä´YÍo¯ó°À:É”ò÷I–ÏpÇS>o„ãç´öŽ˜Î¬”°ŽïþCÜ"ªMMO6øÞö5í£êZÙ;8METÂM
+RŽÕ·ƒ¨äýÅ<ë‘·Æ®& .›°¾y¯›‚IŸ—Š°-"\a1y¿`ò'K…m^žÄ¦ÂŠØåŨ¢VDp$팟§ ¦"“QÏP~¾·ÄoÎtíÝ=ƒžâjºy…zº¦hV„ùÿrz)çÌò<çìdLey¿¼îé‘3]&µ+Ý7„Š g¬7zÛ“ÝÕ⹊Dvl7›éòî¸e¾[kÏbñºuÏ„¨*=öÎzßOÄv›SßÓ"§²ú‰fš!Å|ã,y¾Ðô8#w»OW;|6úQVŽòWãr¸¬õtj= ®©šö0fËnš.ÙÌš‚Î讓†O¦Ä¼ ‘F3!Íf¾¬þIXZÅendstream
endobj
617 0 obj
-1671
+637
endobj
-618 0 obj<</Type/Page/Parent 497 0 R/Contents 619 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 138 0 R>>endobj
+618 0 obj<</Type/Page/Parent 476 0 R/Contents 619 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 225 0 R>>endobj
619 0 obj<</Length 620 0 R/Filter/FlateDecode>>stream
-xWÛnÛF}÷WÌ[e ¦Dêž7_¢Æhã8±ÒôA@±"WÒ6$—Y’Võ÷=³Ë•H9)ÒÀ€MšÜ¹œ9sføõ"¤~BšF4œPœ]Ü,/ú‹9EZnðd2Ñ2¡A0à?qïv'ŠJšôVï©Òt«óÚÖFÒ“ÈÖ‚¢ "Q’¸\þ}1 «h„ó½G£2at§3¡r>S¦Òð[ì/Äkìïjâ<NÌ‚0 G#üZ«RU’>J‘¨|ëNŒ( ›є߿‘º¦ÖU^K2îÁcµS%Å.øWT¤R”’2ñERɡ㹨ìa»Xg0V‰u*i¯ª[´9Â=­E©â&¹pè‚ݨT–TJó¬b\À_™­>E"Ohç’¹µÈÿI¦rU2’…(˽6 ‘Ìcs(*¥s¶`Ñ ˆ–;YÂfµ×ìôÍò‚ka B!_}üõ" ÁÆ“Y0¢ŒÂYÌ›»”ž¸¢ÜÎñ°]ÉJ*Fl¾ÏÀ9q8I²Éu˜-õà‰Å¼ç“[õÆ«Ë&ªhròšÑ0㳎mÖ¢¯¢ù<FT(/ÄVZ« ´ÍÃÙhò"á£3‹œùøÎ]¼9ÞУ›¾¶GzãXôöýçå{Pô¹XÁ©.4Ï‚ fÓ`€F€´ñ-å)>ŽFA·©fAЈ¿l®ó„íõãm´å•£øƒ®äk[þbâkq]W;m~)‰ŸÒkwÖãÚ{ÀûDÇu&óŠp-˜Ýk• Ë3NêN<«îó\ç°sêâÇ»[‹]yž»Ô™À\ ÷æÃÒwõâúøz£Ñ0Þ£ãWYÒ”2Å֢ΥÅíʦ7±Üìý·˜ýÊÙ.ŒÒ†EÆH×±,.;‘€f‹RŠE!Ö*U•âÑ$âʪ}Vy¢÷€eI#¢+@giäˆV=d½ºä<$<äÜñVN¸ƒW´%QÛõp ðê<–}£b…Às !I+–3Ç•Õ:“8eLõVç%mŒÎZÇl
-«^µƒ¿íŽž'«KÛ>ˈåùôÞñFœ*T½´"¢Ê3ßÂT*†c]W©Ê=”ŠT””K¨XÉzÍÑ·ÅÏ•Å!  `ùÞ²êt`ìÄ3à!ˆÚ†Ïž9sÎRÉÚçë«2H2S”p ë´¤LSúØ×ÆJ´µŸkÆ6Mõ¬:…ÞdÃZÆ.\ÒpÎSÒ8ƒisç¥ñ…R ðó¬-–ŸîÿüëþáiyýûïÁ®ÊR›ÏñèQ$þk´; 5O"?4\!I´v# ¤Š¥äQ‡”¯‘çÎIä2ƒ0Ãé ¿‘̘“rw>ÜÎ;oµÆd1²Ôµ=í$<ÊhÛìMYÁOöÚ÷x:ç&==å©rÌß‹ì|ü"€Î¬`='L¼­ü~»¦®L….¨Üé:M,³8TÉ
-ÞÕxlD䬑:íÇ}Ô·½rl ¤¿ˆ9½šBš±è$½U4™6ZëÕ”Ÿ¥°HEÌŠc›ÎÿiŽC«ÁpJ峄ȸ6 pcíÿ»2²2J>;o)¶Hv
-TÝ-*v·ý "/>&J T ЕyÆØîÛG@–Œ>4üNsƒWP ÞÜ 3© ô7Xæ_ÿž.xù¹NX¹›ö|VÂΦO¬ïDá3¶ö.ôŸ‡çs‘Ň÷9Š%ö L<"¿I³–F;É >!}§xôhsøvÎßBî©è¤¸n7k$²Åw”計n dZøî’b±äž/Üø^+yûi qä¥Õí*vcl•Œ6nfbFò2VéX§`¿~µBùÖžeG1ï•Ä
+xWio7ýî_1@X¬ÓŠ||sœªq»m¬¢-`  v)‹ñ.©,¹–õïû†‡´Ú:J$Ñ^s¼yóføõhHüÒÙˆN'”•GïgGýé4[àÉäìœf9 zƒîdëJ
+§ô#ÝŠl©´¤YU[GWYfjí, Ó¯Fi¼òvöåh@ÝÑ:×…’üœœ!·”ôÁ”Bi~¥?Óp¼uG罿>U¬nLM%›¯u.qƒ¯—‘ 2ºwÞ½îI…
+®õVúÓ,&à»±›L>Œ&g1ÃÔ±g½sꦀQ-ŠèäœKÐ\Ò— ¾@™W­ö¡Z7\?4k&¬ôåß¡Œ»Ùô¤Ñ‹­r>‹œîv½ý0VÞ
+'Ë”ˆyƒ£ÒÍ•Áÿ¨q+Ï®ÏãGó ˆ£‹¤Ð%öè8„G{‰ÈMf¹óŸä&Zä »PάÈK*ˆÒ=o9” ¸0ÀÞsD7*llm/I¬I`0ä£Ú¬¼Î°· BÎË9"o»å¹‡¾ûMIm^ãbK÷Q?BÏUòk­*´F"Ù¶Ë`*‘XПw7S­ Î,¯—*[r 1¸¿ù€b2“Z±=J-†ÌOHE„­ÙÎk…ÛKÁhqÚÐîp¶ÒhϾtYÿÕõ½¾í^tZ;ëJ^dÆö[1!ù¬”¯…–%¤ëN¶=Ó×­’¡y|îºmå;F6>J*Àœf+ø 0h½!±ZIŒW@¹6úØEÔBòÍ’­„u Œ!ø—¥3
+bK‡Œ¡Êé87«Õænë"ß«U£ï!µiU¨'.
+ê–ñù(MÙ¨2ÿ²°ïgÑ°¼öó0<þ/;¼:6jøúü˜4×ئ‘û„h’?".”¥ÌY/@›ƒáÚ•æ
+£=›x…j dœ¦x‡+íÃæÇ+4“á‹7 òåÞ®«4†BVQ¼…¼Š;¢¢èŒ×%™&ƒð“kËý$û{»9V,ï.ò½ÄJã^ ýæädÐã à ŒR®Üϳ#>‡øà ù×ç_ŽF§#´ã˜Ï %Þö&ᢠ{>Ë h|áÛuw„aiÿƒ†çrÒk¥³HA­ÂbÁ3’?ˆþàílÜôָij‹‹Þp?’ýЫGŠ¡·ãó’à«b³J­»ÞåíáãÚ¿ãÃiä½ôeS>
+î —0ó÷Ýàk·RÐg™î€óIéú…ìÆ:YF²ï˜9Ïç·´8F©<pî£oŸõÆ@ì§JŸEHÿ8úN†Qendstream
endobj
620 0 obj
-1732
+1510
endobj
-621 0 obj<</Type/Page/Parent 497 0 R/Contents 622 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 179 0 R>>endobj
+621 0 obj<</Type/Page/Parent 476 0 R/Contents 622 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F6 9 0 R/F8 11 0 R>>>>>>endobj
622 0 obj<</Length 623 0 R/Filter/FlateDecode>>stream
-x•XÛrÓH}ÏWôËÖ†±u³e/Em²,qÕ>ÆòØH!É1þû=Ý#Y²ñBa{,Ít÷9§/ò÷ —üs)ôÈR”^¼š\ü3¹pz£µ/Å ‡</Á(ä×Á¸çQ¡iÎ;pÇl_p{ÿ. ץɜŽBšÌä‡&Ñåk“ÍãŪˆ³UKM**úxûšžM¾^\cn›]º=Ycyíú°†¯^ZU¼-UÑ2Î4UŪ¬HE‘YeUI*›ÑWg|K”Äš¿£Êˆ•™IUœíšð¬‰ko@×Þ°°ÉR#.…ÿΔƙ)h¦+'%•«hIª¤U‰Kyaæq¢ËçTnÊJ§”›$ŽbþBWQ¯×#zkÖúIÏÙ…Ò›™Š2é²TEœl8f§ ±ÌuÏãˆÝVh`3­mã¨8XèDUzÆ·þg3³.é~‚³«µ)¾ &‹t^•pamh' MõžÉ8Å&ÃA&K64-b=Ç;ãÐã[E ],XþY ûý»1¹€nÚ¡E±%{Ôó{t˜ñ[Ë.V…I]°±V9
-³ÊÕ™û›O÷ïnøîíÑמ‹(íëÌ5ZšU2cn˜Ξº¢s†'&÷©B(PÀP m5A‚XW¦,¥á
+x]RÛnÔ0}ÏWœ¤ 5Î¥QxØvA€XÚð^Ûéº$vk; ý{Æ›Ñ(/yÎefÎsR¢ ¯D[ᶘ’»>É?x‡~ ‡¦£B¢`EQ )—³W^8ýðùì]îOÚP¡\|Ï$r©~çfGd( šyä±gà£WÈx3ãmÿHR5ÊrÑʪšU¤–~68òéÄQ±Š7kc³6¦ÖŒ„³‚³6€ ag^“¥ÜढW‰`!œâAaââ¬zyXseˆqÔ¿ýhÏ€þ¬œ¬S7‘—ì—·‹5 =œzžµ{ÅLrÊw6ðÓé‰{ÿG‚(¶î£éYõp…X'·€ã§o?¿î78›W!Žæ!õ0_þql\‡3§VÒ WVhÚÄ‹
+þºý4WAä‹ë­Ô2WÅ+1;.´
endobj
623 0 obj
-1633
+444
endobj
-624 0 obj<</Type/Page/Parent 497 0 R/Contents 625 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 192 0 R>>endobj
+624 0 obj<</Type/Page/Parent 476 0 R/Contents 625 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
625 0 obj<</Length 626 0 R/Filter/FlateDecode>>stream
-x­XËrÛF¼ë+æfºJ¤Š"©Tå ‡+eÉŠÅT’ŠrXK° €(æëÓ3» ’å\Rqdá±óèééøÛQD}üÑx@§#Šó£ËéчéQ¿7™Ðö‡]à¢O£ñYo@ÃÉ¿½ YMóæD–zøñ/?áäåœ&>/=òyw{
-[!³\ʬX¦$e
-ùph}ê×W(ôC¦U©›RÊ‘eÓ¢†Á{] ÏtÉnS³@4qÇP QÄY€Ië´Z
-'(IËʦ³š©ÇÁµ\z6,^ è º Ó€ºg¬ €ò¢¤G•Ï p7)tI¦¨ÐÌFìSþ{-ZgaÑEèÊÕŠ“™!;­ 5
-Í´*¹l)­—p<wÝ
-´8Ä‚UÂ…Ëéo§¤b0–~CË8‹•XôQ3«ÁVéD&EȆŠµ¯gߌ5à‚Ò°À…“aôàF´ 1ö[u5M _
-„@0¨M‰í ÈClK«<U6àÐ…~Øk¥"G„Gð
-nè—4ì9F»Yê·þ–gúŽkŽ6Õ¥[JXôü¦<mÖolAè0…pWäØ{Mã¤|wáÇj•ùÙ
-D=ì
-2Ø/Š5Ç[L WÅß²¥(ú”šú•h†®Mü¼ra?¸Pñ*ß’ÑhÜ‹h4ÂEÒy¼¸»¼ [|Å¿`ÛùÎâS]÷rw<Éÿqßb/Å¿Üp ûû~9úØþa%endstream
+x…WYoÛF~÷¯˜¬
+aYì^: 7£¸Ð;iiâ¢ÍJÕµ¶….FtãµþpEÓjä[Æôæèm*Éá
+Oü-…UˆÜˆwÈbéìA¤Ük¹Ê&àÐÖݨÏ¿©W·5NTºJ&³åŠ[Ĺâã¹WßWPtÈýAËÚF¿âl® ŸzH&" ÿ¨Ö~¦óX®Ftïvsêú&Ê CʱڦþÚ5õÑÔË~7‘.“Ól³QEaì¼»mDŸ}]>[.\ÙžM½ákÉÌhå*̓öÒ“jC㵜à¼Ò³æ{£©1ý’rÚ&^ÛÒ[šk¤æÊ‚öÿÁíª2ÅŠê‘/ɵèQWpå*eìö‰– mSæ\Άª*Ï]cãËl,€ßBˆºÂ€YS££s{ͼ«$…51M ºœ ©fü›˜ƒs*Rát ¨ª×-”90Çô#"”œAZŠ‚‘ÂÓLãé v!˜ „{T¥)pnkD×?
+M`B.MYR¢£ZéÔ\ˆ.ÊÎSÜI!ÅÌÁU:Â×æ¤ËDù^•Šµ0VCà”9‡ŸÓN—võ~_&‹åBŠi<”>€q„ …˜xC2+M¯糤˜9á #ØÏí9¼yƉ…ÛÛ-ÎT0ùÚ¸Ð늣9‹(*s(~GzOµÇbKážQðþ„¡‡å!Â|§ÒÍÈv:¸ÄX]|˜¾Õ¾˜÷-qgØ>qaK…Ðä9ðœ5!”ájÆP45ÌV,Œ«Èê%>…Ž;E«‚{Ueì ˜f­ËàÞ–}Û.âÿªÒ] ±‚X ?±JR^¡)#× 9· QEÖ†èUt~_üªGkæVU ®(sO4'€º<o|HŽ·Õ ûÛ+
+¸mC©·ë ÌÍ# æðëç/¿üòùï»Îï0`5R.RÁD¥”¢¨
+Î1äZzéz]1ÑÌ`H° Ò…ëªìÉDWMácÚNÆ/[Ãldµb±š!|
+K83=Sùƒ„€Wbügð5­m/¥ö@Ç£ñèlH“??&uîO×ï¯(óÊæ‹Ä„é€ùéuŽI–°’ˆ)œÆùR¥!à<Τ™¹™ø½ÀÀËki¾ôÃy37fÚr—t‡Ö=k¿Ê!q7¥ý˜›é5« \/ÉíÉhB˜Y@UÝ°B4L?º DÉ=8œâ`ªAX˜(ºÓö3Vò•çЭÅŠqmqHdÔOŽxÐý<;±¶^wŸKuD_á ìÒ;ðã]ûL7D)¼ dLÉ‚2`
+„ï®.¥tìL.³5Q¡ëÞí D·iÙa66OóíðfMtlQ2…{‰‡Ü›:Òoét×Õ¬;œ,‡íŠÁðš"Ã×H@³t V!c H ª¬î ¸6£ÆsŒßkx RÛƒÄjz©ÈŽÐZ‘\îPK¦¿/Á u>j^h7•KžÒª”¨¬;M¥lÃ[=' ûïŠÒÔà3H´UxBŠxÅý+q/¿¶¬J,}Ùù¸$ÙRy&&þ<A‰ ^“^!H܈×D<ŸœpCÚ È^\ ×Ιn¹K c|ñª êÁ°Y?è¿Ý"À&5Ñ”&b³ßì¾Çï.å7&è­œOtÁ¦–lùäö{H÷ŽÃó øOaÓ0ÉNÞÿòùWÄÞ5Aš¸¯ Üxø^×<4'ÃîØ‹½õÒµöÈMQÜC~A.µv˜
endobj
626 0 obj
-1935
+1699
endobj
-627 0 obj<</Type/Page/Parent 497 0 R/Contents 628 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 197 0 R>>endobj
+627 0 obj<</Type/Page/Parent 476 0 R/Contents 628 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R>>>>>>endobj
628 0 obj<</Length 629 0 R/Filter/FlateDecode>>stream
-xWioÛFýî_1u]X¢ƒºm (ì$n\äjì -` X“+‹ ¹«ì’–Õ_ß7{P6iD0ÉÝ™Ù7oÞÌ~>Hh€ ͆4šRZœ_¼¸>ôæsÚþ˜;<`Ùɸ7¦ñ|Æñc$-°v@““Qoúè lá#4?0Ô¿Àæ„®ð;Ïè:sßtvŒÖÕ÷ôäúãAÿbVuúµ5}{›+ü!È2êÞQ³ÝŒú™¼ï«º(¨›†}ø¯é2WòO•§Ÿ”(eË,uKêZê³á…(lø·Ã|2ê ^§1ôØÈÅÒáÀ`éõR†0â!;}Y¥ý•°vµ#ª2Zç¿ÈmEvgľUKtDbµ’*“ÙSZku\ÑRÜK|ðvñ’møw!¢¼Ç.%¾ •‘ÒDK ÓYndZi³éÑ…6$D¹*Ød E!3:Îôjµ9†ÛºÈ‚ Õ>#}í­ Šü“ÄisK§“0# 9ñH:·G§§“Áÿ“°pèns²—Ü`¦sÚðâ´ßH«.ûšúŸÝê{ùô¿ò'Šn˜ÚP&mjòU•#).q @ÊÙ\¥”÷dÎ…•%ÒýL—«º’¦G`Š?ú#‰[« ˜(6TÖà "pžÞÈêüòí•w¯Ñ{¥]Œ¨Cø›cÊt)rÕ#V‚<ÝþÍ0hEy+<õ”® ©¾Sù_!³ÂîI¤©®U¼Äjy£×p!<ñ?¼¹üÂ:ðÌ"n©(5RTL{Ž\ɇŠl%Wæà4þ£?¿-o}1¯ª˜@çÖùR­*€«;gxÍåñIéµ"¼¬rQÀ¨axc@ζ6™ƒ ÞCò3­$Õ6Øa'N<£æ%,|ïv9žŸ€m%M§N)ù¡ +ÖÛ­<ºõN#'FŽOŽ¥[•lŽzÓ™ß<q'kÖÙr"Ñ;”ê²äÚ'€j—|È¥4²©¼(ƈ}Q…©ñJ]ÁÚÉ~û‘½Û‚|$’;ò¸fÇß¾³ãòŒÄ‡$[Ú¥y/XŠX%ãio„ªž{ùEçÊe7-rpbŸþ”—¥Ìrp«Ø<J›1¦m0ìÍcgã¤á
-Is²„„”·ÒXÀßòÚ:’k¿N ÿº†hP!Ì”VÞ‰W àÄq¨R)ª)¡l =RYøC×¾¿:á[ £dö£¸×%³fÈšO"AV Nðë³f.ƒ²ô/N(Á`³ÖpÆ[v9Š:é {ôŒóÊÆοÇOK‡-[›C†aK|®làÜØc!ÿ
-BÍJSjH'÷O-´›=ÿƒ«}]‡Ó’5KIÉ6|Ÿà¾¨±£É Gcü–¨ÈQož¢Ìâq²€ã,-дc:ùV¹CÛ—e†“—«´
-µié'DáoˆÕÂ+D¸H@°/7îªg¨y@#%½„ïå~†º:{}ŽîhôG\é¹Nk¾Å¸ÆLê&Ó–wgCàÿl(ãÙ8¦`<b³ ϯ¬Ýàendstream
+xMÁnà Dï|Å݃)Ø®íkÒ¦·T­Ê`‚e§Á´€óý]j*ÄJhvvçñÃ$‰®BÝÂ8vTìñµ”P#)mßA] ¸ÊŸÚ ц» ÐËi²xS€¹ÍvI˜ôÝÂè5Ú,ÍßÁ7ë8pÖ_q –²1Zhz¿Ä9¦lÇ蟦}Þƒº2RÖ¼¢E^¸íæY9)FÁж5Õ¦ï¨Vtiä¸qô;‡l;ž á?Ëá|<à=ø«5 /Þ¬Ž2è4û%O/7W¹ÙŠgïœ_r{æ‰ð§|ˆ¹¹éÞÓQÈ'±gû`¿sdWendstream
endobj
629 0 obj
-1759
+243
endobj
-630 0 obj<</Type/Page/Parent 497 0 R/Contents 631 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/Fc 12 0 R>>>>>>endobj
+630 0 obj<</Type/Page/Parent 476 0 R/Contents 631 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 228 0 R>>endobj
631 0 obj<</Length 632 0 R/Filter/FlateDecode>>stream
-xWkoÛFüî_±5X)dÊ’];ɇ~Ä©ÄvcFʼn<I“<åîhEÿ¾³{GY¡ó
-o»Á¯÷_gÇ\úx-Ôr©kßâ ¶p¡‘ ÏÃÑÌÙJªÛ$b‚×åLñ5v®m!9éélžá„.¨pæQO^¢õýB¡“½º=ç =¨s§ª©¢Û‹óŒˆ•0³eiW Jn«J¹2eÙ‰ête¹‘eIµÌûo«±þM bém±ãüÍdru}=žL~Ho¨Îç‰~¥Aßµ(opÙ8$ï º™TѶÈ« ×íUºšBg@Š:çÎ6Ë=üŠ
-Äbg¼ª4ÕüŠ"Û:³*Bæ#£3éMUA¦Ð
-XòKF‰"ë™
-yƒûÚ+¡R!°g ÷>9=µ?¹AL.5gõ|_ÜZ¿ö—C|^iç’8ˆ0éà †¯Ï&/Y‚÷¯Ø«,zߣþ“êöJ„‹0’oòXÌš¾:…Ù©—Ñ,á¬bW‘ µ^áé£vžM ã#"9s[hJ†²xf¥ è>ínÕø³"ût[jCìˆÁcÓ˜|S†ÅQ«ÓUT €Në’pcª¥Ø Z
-\mj[~‹Ø‚ÍóÆùè>[Ý]]Çy@‰Dô[Ùô0œÌ#fÈàþæãûwoþ¾Íð}ü¨•FÉL¹0­
-Rq ’ÅÒ`þ`hDôˆ){ä/«'9eýÆyõ‘aûí õwgY&¥H¶!9«ý†’©ÿ¬Iì°¥¥ò~UDãÚ^b:ñâJÓvµ€GHG[yÅcòÍòVH„‡GOý
-GM0¥ Xú7[q' ”ÅÕ´!d§@øY+‘kήnîâüOë)ÉêÏû¢$i™
-''ñƒ·ã¿vþéÏ*þendstream
+xWQoÛ6~ϯ¸·¸C¢ØNbÇ}º¶Yƒ­]׸(6è…–h›‹Dj¢Çÿ~ß%‡V3lXywüî»ïŽŸLhŒ¿ ͧt9£¬<ùiyrq» é˜–k|™Íoh™Ó8ñ&Ýï}£Kúì
+“íIÙœ>×nm
+í_-ÿÂÞ+šLÂÞóéM2ÅîÑÇ6Û’[S³ÕdìÚÕ¥jŒ³du¦½WõžG¦¬
+]jÛÐK>¾¸Gc7ôÕëúà¶Hѽ*WŠ]é|ræ®Tøh¼¸ôªÔ¤ø·jÞéÙÛDT^“,28›f¿›»§OKºJÆ,&D¸–üÖµEÎ>ß/OÁ‡&üëËÏ'‹)¢˜M§É•4¹ž%óî© {ƨN/ñ1ƵÖ*—`w[A•ªpÐÎCl—Gãç’¦“ir¹‹Ÿñõj‘,â¯Ñ3¾Î&‡À9Ôø¹¤Ëñ,™D{ãg|ʼn®ã¯Ñ3¾^΢bŽa«7ÔÁ6Dæ®ç窧Zà]OB¤ú8]B‡ƒq#RÊjUhZ×®¤&«wë&á çÀùt&©}Ð5Xƒï˜>yn˜³ª \7°â_óž‹ÛYD÷nç7æ™Z¹¶‰Ã’’ÙÓ{Ø »ãbév/e`H€e«…·¨R©«‘m2g×f“T®8¶2¢=ØY¶¾¡”>¿÷º~ä²a¸ú
+»QŒÄ¦±Eßš&dP hàȱç(ÊwAH×÷ܶ5´ >#U4¨ðÍV
+ 'ZDʦ#ÇÑ©/Dg|ˆ)
+9ƨà)`ˆ<e]éLqY4k½1¾N>hh¥Ð‹‰©Zñ3ôBr;ð 1«
+ÉÜn§A‚3Y-jJ€7?gNBª[K[UU¦Ø“¶‚g€¶cS¬€V<Ó2:oD¥3Ê\Y:›¨¼
+„E½ú,á»gòò+r
+[¡rª}?5åÞß@þ@9@\ü. s™……ý§®½ÉKcYKÂ÷_ CQSD }È/uÈ»Ý[(HyÌÝó\øïýí.È¥„´©][õyÝ‚ªÎÄp°Á'©q`MX–B¼Á¯\&>/¿¡·ïP!å½¢D¹HÓƹ§i­ýƒiÒÔ¢3iÚ1fÀNrk'½ÒBˆY!jÎ] œãEöphC/Ä!¶à1ù^€jƒ”¯…ìeÃc,S¡ÅpÌd Æ”ÝØí5zϺ;{¯þ(á ã4 ÆWž¾›Ö‚ùP÷f ~°”£³BOÁôÜY¸±Ä½bße¡TÙÖàµôt$ß%ãà#Iz7½zÝ­kØð)Zw:vQë
+qxtðÍF{ü
+ãfÏaò¥œÅÀ`®bVÒîùf&L“{‘ eaÀ±ú©õâ½z‚Š`ÃùkòrEäåàœ¨ºA\<¹tÍ«›Ã²n•+ã¡ ¦ÓÙ¼ëý¤<OnžïyÇðô{Kç²²gäYŠsÃû?mÞtá‡+ïùtî/Ýdû+ [¾š_á8¸Xç£ë ¿À}ò÷“
endobj
632 0 obj
-1867
+1689
endobj
-633 0 obj<</Type/Page/Parent 497 0 R/Contents 634 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 200 0 R>>endobj
+633 0 obj<</Type/Page/Parent 476 0 R/Contents 634 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R>>>>/Annots 233 0 R>>endobj
634 0 obj<</Length 635 0 R/Filter/FlateDecode>>stream
-xWÛnÛH}÷WÔË œ…EÝo~Yx&ñŽ1'k+vA`Ñ"[RI¶¦»I¿§ºI‰¢`±¹¢š¬Ë©S§ŠÝ i€¿Cšh<£´¸ùeuóau3ˆ º|˜-NãM§³xB“Á4^Òh/ÈHÚð#ƒx
-^ØÉ%éè–”%ü+µ)DžŸ(Ó¥¼íDxØI¥F
-'I”T{Ž½Ó²iâ~,I›LŽö Í+ \²àho4Â/ÔQ<Š·”êr£¶>;äÂ54^:QóCÎèœ6¹ØÂV8A|%[Èö¥K¹LqÖ·¢X‹®–¢2y®ö®ö? %Sbˆ¤¦¡Tÿ©³£þª”‘Yó;`/M¡\lõµ—ÌŒ™XÑ㆙DQ:ÇÈB
-trj­råN|ƒ8 â#û\H3 è…Uî%‘‡p¸@ ÝöÚZåI¤lö­ßdÅ´ÚIðPà¿Õ…¤uµyBZÎø ¿g’­Ju|ka†§K)3Æ­'3óöšýŒ‚ç~¡ÑF¦P~“Æ* ÖmǸ¨–^"4YN¡
-“ÅŸ@ó,ý‡% ÑkhËd6ôÍxéþE<‹éådèúYç*Ux‚ÈŸföºÌܾʫtb‘ &z¾@Q^‰h­%UìÑý÷<<ëoªÜz­8{ã–ôÒ°¸…S¦=Ðì
- §´Û ‡Î¾Ø&n†þ&…ÌP=6ûU•øOO+š
-¤™Q|Ùɽ* Øå96Gash D9‚ü®e*¸˜¬Fn•å¡ó*OxË¡×>?¤$Ö'Œ%Üîmà«D‡a…±Àø7}àï@XYÒÉw
-_^
-èc2UI;±ß+,H²d :.¹,œÙ ³lò@ë’µE+^|ŠB—±ÈŠì¾ÝÃoÍJTYºïÜÓ£'
-‚ÝœÝìá¥ä‰Ü?vм…†Ä@€SÆ¢NÏ?¹‰ÝÏî8~çYfíÓ‰ÌDÐ 6ÓV+TÞȃö#cX8G¼@èT\Ö½SÓ'‰<™€ZX HxS ðàn¬Õ™çˆËS´ƒ¥¯N{ÅþQæZ°‚²Û:ð³Ë¦?QŸO› ]Î}ŸlÑá½´?5;×UÊ~ÖµJxqù`¾Þ)×iØϘ×üÅÞÿ-¦û¬P%KL8ÿúÔ©¤ Ù«F'¿Ë´íhn‹Á¿B1@6¨h¦/+æÿ=+K/³>-Þ¹ö ˆ;Ô2GÒ5¹—G/
-´Á=áÎp+6\”ëncèÁá-è×÷h¤ÀÐF‘Z˜&‰Ó:·Ib¤}U.IJì Œ]’Ôü
-6¯ÔÄÚŠ“×k?ÜØç‘ÒÜ«Ùº«í™®ðîÒÃqúzé»&¬(ä¿ñ[‹‘Ú4Ùxæ°¯-¿€1}*¬ãL rª¨×|+±¿ojöðfW§Ê×á#¯/¼ð»ªD¿`RøwkÖPe´¿\s–<wNÞö‘
-‘î~öâ‡éfCWžÖ\ ü©)µ¨×©áxˆeu¶ú5;z¹ÿøË=/BEé½N+~Ñ8ï½álŽÛ{ó‘ßÀþ§×œÉ|Òll“)†EýŸ7ÿç‘;%endstream
+x¥RËr›0Ýóggwa!a vwIK2±óI³U@ÄJ
+“Ôé¶ÃŒ¸WºÏsÎï@€Ó'FX&(šà4³B ¯üU²N‘—àŒsŽ¼˜gƒn{Üý¢Ý—ü)ÈòÀ¿Þº9Dºa$« KÐ ^FŒO^ é[›pz<®ü­6Å3öÚiô¥}ik«Jô{ 劽t‰ÊÔ¾í?=Ý#æUÿëkÒÉS8ÛÙªg…mBIFmÂÜžýØf2¼Èîo%Ëî³Ï…Æ’Tˆc%,¦Ùæ9õþiZš¥ÃEŽ˜Ö´ëŒma«q²Ùm§vªUô¯¬¾ÛF™¶›Aµ%fR;Jy KZO ÊÔêV©œm&Y„$¢1³eš°ÕäýÅ,"VŽ¸Ø½ï‰Á(Ðæ þ7@òæ.¿¼Ü~`ô‰ã˜<§‚ÓÌñ:%ÛsL»U­'‰$e^]¤£ÁåÉîôWÎ>é¢'ÀŠ? ©Jõ¬GcqÈZÒæòµëuƒ+K1ºq¥\¯…·ÇiÌÖD¶Š&4¯ƒ7jÇendstream
endobj
635 0 obj
-1963
+419
endobj
-636 0 obj<</Type/Page/Parent 497 0 R/Contents 637 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 207 0 R>>endobj
+636 0 obj<</Type/Page/Parent 476 0 R/Contents 637 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 238 0 R>>endobj
637 0 obj<</Length 638 0 R/Filter/FlateDecode>>stream
-xW]oÛF|÷¯Ø7)€D}Z’ó$©Ü°“6R>
-øåH)&ä{w´l´ýï=RE§@Z¶%‘Ú›]þq1¡1~&´œÒlAQqñf{1ºžÓdBÛ„?Z¬–´iŒÇcÚFý›„R£«’JgQ&-ÅZõíµùFZI2²ÔÆY²UšJ‹©t.S)¹¤ªŒ…“1Ñ}ßH¿ô_ÃÅûuT â<§D›Û¯cNfÁ
-š/øý.§Í³~›¯®Îúí-ºìí¤a!¢½Êµ€„À¨0Ñ.{@m’,—[çp“R?qåËуâP÷ ÒÅhäY8ºÛÜ^ßÜ®7£wë/7ÁúËÚ×‰@-q55‡€çÈç\;çíT‹æ ÙïöRA:"ËE˜{EƒÉÉbÌh>_¡_ÁÛl,šw oÎ|~å»ùäOÞ
-vQÔz¤Ÿzùð%â»`&94›©Їë·=ø,0ÖQU@þ>@@컞ÁS³á‹`@ MI¢}æv>¸E(NÃNiDÂÙÐÊ¥ZÇ$Ë–Ë>âን4å½{µ—‚Û*Ú‘°sCƒY
-évP/Šuˆ* 8š d/®Õ_±B=3 kt}Ùì}J£ˆ†igˆõ)ÉEê³D´}†5¨™”¬êrœñÕ´t˜)ax'ãîňÆ.ñ1
-Î¥°nÀ:šÎ©5R—Á5˜¼¯ˆí1×!k5NÅÇSïÖŠµªŠ­©°üćAç×T,¹‰“Æ/jí¤;Gò:ÇÞÈ…C¯Jo–MêŸ!` j=MøëåröúUEšÖVE­@á:rb;Õ›;¯d
-zÁðØayoBf1¤Ì<芛‡6zÀ³#”n/±lWjƒeùŠÔ€Eä*ŽÈ·-À=•Œ q€ÁÀ/ê¾x®Ù\Y¢Z¹´<52UÉg]¹a[‡}sGÖý†îƒÅèä°ÃðÑ,…
+xW]oÛ6}ϯ¸ov
+ä…–(™­Dª"7Øößw.I[ŽÜ C –Éûqî¹ç^}=™Ñ?3:ŸÓÙ’Òêäíêdr}Ió)­r|³<¿ UFÓd:Å“tøq#·‘ mdYS*4ÝP!ýpºúŒ« šÍÂÕñü"™ãòp…Ó’~+¡ŸÈš¶I¥%““Ò¹i*á”Ñ$…*ź”xJp@üñ©
+_(]P©¬³#úpýn`IèŒ2“¶•ÔÎHˆàˆƒ˜Òxv\ã„…1ÄœšJm•ÛxãVTkA,6jÝú
+m¬c‹Î˜ÒT†¶µŸ)“ë¶ðqghh*MȨn `l=Ê¡¹:À°úNQ¢ÿ_´dlèµ´î ‚
+sãŒLíek¥Ž­Ö™¯Ÿæž­eªrõD[® Bº¥|”å€ðd»Q
+¦’&6:"o‘m»LPßœIE•ì‡ÔÃuïÒgb·Nyò±ø,¡ p³1ºæaÈqd2méN9ÄÙ´çúa8CëôÐÖnM“Ù‡Ó„âùy,ÌݵWÞ–TI·Q«.F®@éZ¡_—[æ›Ç… N®_EÎ ©HSÞOןCÊKQø,am«Ê¤e›q>`[/‹C¸b®•úÜŠ¢,Í–ž@&œ(X‘­ùCÄ•ÓŸ¯ý$Ô)²1ÜhДýåžûh
+÷öÄgXñðnE€ó‹ J0¢\5 4«;?øŠTâKà
+éÅ®\›oÄ bÛ<W©‚2!ào)…u#f)‡‚s
+mÏx}†5ÿ<y8íE
+"eÎl#¥8²¨ƒ W–Pÿiðˆ;ŸTVö›a1-÷Ý›‚µt[‰€ëX â’€o,_>‰ÔµÞ>¹§š£ÀMÄÐ@ B«|H,Ì¥ÈÐãÄy(ÝÊ£¶¼g™†sK††CûA242ÚÀá#tTºx»-MèGáx×âóåy¯Ï“‹nj9ªE#*úÛ‹gr½³5ögÿ¯- –žŠãŸi2ùKK·VÆ’È¢beƒ÷»x¿:á9ï‡=Íø¿?žÌ‹dFóóK ÔŠÎ^M÷Ÿ0y[˜Òübê§m·%¼Ñ~DJÍó<ã‰jyÄó¼I묭jî’nà{5õ |î¾)hHçêדÉv»Müå:1M1y~ڇͧ¡%ïÑcÌ5æEPR?Ëk‘~‘.¦9?Ÿ%g4_.“)'…ø—ñS—Jt¸øX­ò
+ÅŠóûÝÍŸÜ4ôQé³9Ñ“‹ “ =ÂÂP‘!ñÿJì /(¼#ªz11ÿí9t8\#ÒÐqøë§ ëË­JcMî8<c!#ºCA"éÖhåp—•é‹H|¨ŒF¿=«Hªèr·Lu†¯x4CFš½ÙwW à…§óŠIÍäBk@™1`Þ]yÔ8ÈûÛ{|ìÆlÇžÏìBSìFÕ<ªÐl|Ý&+(Å@„"Û½f𺉴ÉÊÒh‘¶Bsc¯‹ÈIF€‘é9†^Ê&©_G1©*eÓÖ´ ™IÛ,¸³ƒ„c§ìµÓhhŸ|8^tDÏm †KË3kYƒ *ÅISšû'üð¬a
+bÓYŠù²¯?–C>cÛ5Œ!ηí-ošÄ]{0[{¾Ñ5a/Û6
+³&BÏ
+>¸{κÏ@t âÿØÍkÀ€)¾gëå7NîåÍõ&°‰ñ‹!îrã€yóµxÐT¿­±'y¹s²Þ‘.7¼´°F‡;ÆÍ9
+ÕCè*9[\ŽâNÊo6¾VtíqܸççÿwÏbÑsˆ{‘i»Uó³-Qv¬}ªÂ SP¤ t]ÑM@=‰ÉÀÒ'ŒeÏG-QOÞ͹e{Nƒä‚Eb#"¬kGý|XÎçGŽ&é è¯ü¬æ%¡‹ ‰7´òïDÌ÷7xsÔ²×q ^”xƒ’Šî&æ‹Ó÷"Žçðª:ž_¼›u[¸öƒ—ÜÅùÓ¯ÃÙðÕ{Âàüíä_PÝÍendstream
endobj
638 0 obj
-1733
+1775
endobj
-639 0 obj<</Type/Page/Parent 497 0 R/Contents 640 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F6 9 0 R/F8 10 0 R/Fc 12 0 R>>>>/Annots 214 0 R>>endobj
+639 0 obj<</Type/Page/Parent 476 0 R/Contents 640 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 243 0 R>>endobj
640 0 obj<</Length 641 0 R/Filter/FlateDecode>>stream
-xÕXÛnÛF}÷WL9EëÉÎKaK¹4RêÐËŠ\Y“\f¹²ì¿ï™Ý%%Sê}hÀˆdr®çœ™ñƒ.uð¯K£õ‡g糃·³ƒNÔÁ÷ü£Ë?¾¼?èûÑkž £e4õ¢Óð)¥)¿uün@Ý.Í–lhx2¢Yâ,thÞhP!â[i©ÌÕr) -µ¡¯W’ȺVy¿G´Ò¥-(9-$%z“§Z$2¡¥Ñ½œ}oFfnèpemñæøx³ÙDÒ®¤‘"b=~Ú%ÃOGÞ µ{Ãh€ ß!kD¬ò²+ü,IçøŸ¤K]ê¥åðLIW³#º’v£Í-]ê\Y¼KóCq+"Ê¥Ít>Iª$q'T*© ¦\,Ôîö£»ÜžÈ;™êå¨ÌŽ'-TÀùßz¥©4wxHå¥iJ㉫9½œâc«Œˆf+Ùp„wJ…lô’B|0,Ѓ•*JÚ(»rïÃ$gÇIÖYÁ•ðÍ*Ñ»‘2‡»BÞD¨l±¶°‹¼U$£†Ç"­*)Ù£«”ÊñüRÄñSNª2^ëuI™Näü¥œêX}ñ¯fO$½QiÚp¨óô\0ç:ÂásÆ•{4w¹T1%ÊÈØLV»ò¦:)ZJ }ïʹ0
-äžix,× ˜FÔç’ÄFékú6`Ï¡ LœÍQÖUÁW8–cXªT¢glúøÝ00§³Eå½þé¢ny«HÀ]‹cOÿ5à\Xî4¡‡¢Æëé='÷«÷/íQtÒ‡óÞpB¨ÈË¿«©qááÆEÆœAí“[ù4òǵìŽuÔsùK+‹€JäÍc;\.ÆY@2¾jTi²£?ž¨?8=¢ÍJÅ+Æ<xÌnù³O¼wÄaî=Óô3£G…Ã{ˆ@h,Ë$Ñë4a!*U:{ÉÒÜæ-XA¬Ž™Æ–¾éuÃ#ƒuDó0â ¸$q?Ù…ì~·ÛÙ“¶ ðAô ×(]娔¤ +ši¢“Ðä³™ÛzÙ $—I38¡–¥ƒ¿ÆÌ{ ëS+Œ¥62±-.ñ߱έÑ)}¹Lñ¹<~ÊÜ)”ßž%I
-ó3Û½×Ûž±;4¶ÐÐmç9PÒIVÅ
-y¯JËz‚›ý‡ôbúm:{{ùåÓ§Ù‹ù|ú
-C
-=~=‚8aÖÍJ¼rÝ*êKÊ’^]Z3_½ ºlR7E–´’i±\§ôõËG¿|ø5+Uùmù¦¹ìï¯8Y»ÃAÔ§Óž»O{ýì±îÃÞyŠS÷´ÿè:ý€Õ’7Ö©ÈÂÊylÁ|<R¸5K~2ÒÆ/¯õ±¼sd^KZ @OP¦ŒXs‰’ëýK3g.8\=?tªsá0\€æSÏTt.^ó÷õúæ“óÁàòbF?À wD·p°f]`w×8A•3ºCóê%L&wE2à’ê€EÛ
-0ªp"ù¨vwªj¼Ï{OnsT¦õ§±¶–.¥1¼¼b_§`?óà|2ÆjŽ+¾x\¨@þ.Ñ¡þ)ÎìŒz£AÔõö;
-0 :î(ßþ±bçï å­*Š‡+Á1 ¸¾?.³EqY­læOѧºÿ¬¼OÂÎÔí çp8Œ†|”MÏ.ÏÏè³ÑßyŸ„>:J±Ùvw8ÂãíQÏmÅ'Ñ(¢k¾é=c˜Hî½ H«;ý(D¸ø#¶Bý~ð \qÚendstream
+xÕVËnã6Ýû+nƒx±bÉÛé.±§Ó yLcÁ
+«4¥J•†˜ÌéìžK{ä/)+Eö@JÒÑÍGÑ{|½%gÆ™s!¬#ØË=zW‚Òp”ÖY¿2W+C×)ꬹ¦~Ô%!eeIã Ѫà’j­ªÚòÜçÖb›bž9;ÂP­„ &p…Ø¢¦PË2'þ$Œ…Ù&lÁCߦÓïÓôËÕíÍMúa6›>Ë«^2›Iod6û}
+å\#ÕŽˆÒ•r»ÔYCf–ó\h ¦´€×àŽZñ²<>tZ3üÍlv`©Š¬  $c¨€¯äà”aú™&——G†à€û„lÞûdk–=p{T¾¬êcOàh“uÆj»Ôüç¬ÈkMÕ IJç@zXƒÒÂÕØz6â‚I‡à¤
endobj
641 0 obj
-1796
+1189
endobj
-642 0 obj<</Type/Page/Parent 497 0 R/Contents 643 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/Fc 12 0 R>>>>/Annots 231 0 R>>endobj
+642 0 obj<</Type/Page/Parent 476 0 R/Contents 643 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 256 0 R>>endobj
643 0 obj<</Length 644 0 R/Filter/FlateDecode>>stream
-x¥XÛrÜÆ}çWtž¸JíbïúÅEI¡ÂÙL¸vÊæa
-å°¥ØT|ÑuëHÇÃM£jųñUmÓ&á„©TíMÒ䪦L+ßpy°õô7…Žè¶Üÿj½à­¯c¾•kÞî”÷l ,Û²÷…­±
-r*äðéÒŸd«“g,b<!Û^³¸£ágBÝ1a]ƒÔˆ]¡žÑ±¬v™ Ý„ÀÊø6:ëSnQa
-8zêµ(&
-Z‚m¹Äæ0ûb3gfÁ”÷ßµ0|zóRŸAªKŠV˜À䣡ï¤Òd~O×÷×W¦­Í :gw GAxÂxH…Äê°§>í Ë™ÐfƒgP]+R£J·C‰½¨¨üÙyreÄÈܸ8QÙˆþekTUˆ6úàdKM)H(RÃJ+úÅ{„š&¹¾UU¥Kh£‰ 7R .¼‘Ú€ïbSÐô{aî^'ÛÒ$*ˆ>*h^¥-ˆA
-Ùþy/Åš ù®‰]R›˜5õb'–<« W
-1œ‰ÍO-û
-»*ì4 Ý̼Z¡h?õŽí6ª2¶J¬¬LÅd”ßÁ§7—¬a‚Õ:ÿ×èÝ타˘ítîø¿8xžG·“­mᶩuÖäÐÔVn•÷*‘ž
-ˈk¼ôÕ˜<Sœ¼ŒGs‘Çó9ÌWÇÁc<Z\ Æ_3®‰"‡©‚'
-!Êáàçdh;Î_ÁÛ0µA’$Ÿƒl~Û”ÆQ?Žw!ºé¡Ñzu0åox:›.1ßà( ÃÙd¾Â˜\üaÍÝLÏŽB"ú¹£kTCI ú*
-F¡N÷:­ õÍIµAØQgZõ#ø„îSƒ¢eЦP
+x¥W]oÛ6}ϯ¸{Š زåϤ/CÒ,]€¥èfoðî’(‹ Eª"eÏ{Øoß¹”Ç^ÓŠÖ¢Ä{Ï=ç\öÓYL#ü‰i1¦ÉœÒòìzu6¼RÓ*çWó‹­2E£ÑˆViïJûÂ6ë‚ÆÑ(ZP! ]Zçñ˜‘òŽ2±#~KïoÞôéFlTF×Âkh«´&z²"_Èn L£J¬%–øW«g?¬Îø´p$ÅüôËÛ³É<Ñ|1Ž.¨¤ør†ßv¤iÉ1Ÿ¬¨×!öÅóžF_x_½e¬72ÒÂ×6‘‘ÌšH4C'ÊDp ‡í¶ëÑÚ*³¦ÜÖHm[(-i'}ij‡·iØ`ãy4ű½ãù‚º”âÅ<º¤ùd‘Á‘M»Q—Á1ê“)æ=ü^¹”´2Ž¼¥7w·KRÁ”Â+ {t@-Ý%‹l½¦*wÃãÙû¿) bL³ËI4G“§ÓŽ>—ÆìrŠyOÓx·¢[
+e\@òW£þþZ옭 ,J“8Jm9üW?¤zh|†çd2Mh6›‚XÈd>AyÚÑg3™ÍŽò¸]½'§¼ YXÉš–÷×ä*™º×Ïf”öáߨTimÍ‘²ÈäFj[Õà âÚ†¼Ž„°/~i6evL/x† ©F­p/)†\sHz6Z”{™Á?)çã6¼w´³‹P©ÞvK™¥;ZKHZêŠòÚ–A®\Þ@óô=odz B˜ÎÆ88Ž§P@;úŽ<yÿ”«B"|ÁÉ4e mNK"ò‚>eFGGôÖ²Ž+ÿÈøSÂOÛ£ØëSªUú@ÎÎ65‰`b¥ªkV¸ÉÂBÄÌph~ekøãðvÖÁ×[6Ueëà^÷xî ëžO³=aoĽà3@;†òbšÆ­Nâ€vuhc„|ìz·ÈèSƒôà®E•ë[œWïÞÂݾêv»‚“ ¼Y7y]ºãvà(‘H¾–álÔÑÂ3Ü ˜9hx{€+î!‡(EbßÆ7àø,· PÁóµe|`c€‡YÜ9ï]Î {
+*¥sh0¼‡5’ùÅ[µ4®´ï’ЇÜjm·ŒÐºQO4hN¯ÛŠì~|^<ž÷èô‡ò‡N°OîJoÅŽ¡/e x@‚ƒè”/kt?h`cuc¼Ä°Ï¡ ‘â%ëÑ!ÑF;Bí@× „²nD-x:2 •x‚fm³&eQU¢ö*m´¨)—Â7¬4OǼ*eDWfGüÔ%ÌGŸ',Š5¸ãÎÃé¥`dJ[cÅ1$Ï4¿/CRJØ–¹¤w3T(ð,‘ãhÊé‡yd+Y£ñáÛ9/Ëpñ¨cøUc`Ç{Fì+ðhçpsÑUhù"Ñ»À€PqÖ„Ü
+-Ü{0Wà ‰²&5g•2}À*uªNˆñE!¯jpå+ÅîMì¸{©ÃTá½ácR+™÷I[´௭Y÷‰€>Ë‚Á~ Ý)CÑøm"q‚ —0uÐ_¡q/Qo¸FFßn °
+æPøR“4©Í°QçŽ>ô:S·Á1(^j5‡ +Í-ˆ‚îÿdÚÉ~xõ"¬:óv…û*•ûߗܶ
+«®ÚÐeP¤k+ù¨Ãé·p;Ö<ßÌ™Çj¬øÔ0Øc„q[ØÊI»}‰È[¤ùªãÞýnkt]X;®ÐiA
+×YØ`°6döèPüN8¸[Ð|!ªJø¢‚k
+ˆy <éTvm›
+wÄvî´/Ó¨Tèˆè^Àî*iAýMÀ„`ÚÆàšÄ¥µJBÛ`»#|¸ƒðŒ–‹î
+ObôåùÅ%ß–W÷×Wô¾¶™876mXvá¢âŒç L,ÆøUÖ»?½—MÜÕ÷ٌ ïÿ|ös˜û—endstream
endobj
644 0 obj
-2311
+1554
endobj
-645 0 obj<</Type/Page/Parent 497 0 R/Contents 646 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+645 0 obj<</Type/Page/Parent 476 0 R/Contents 646 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/Fc 13 0 R>>>>/Annots 261 0 R>>endobj
646 0 obj<</Length 647 0 R/Filter/FlateDecode>>stream
-xW]o9}ﯸâe‹ÔM)ý Oíò±<´°´¨<TZ93NbêÛ“¿çØž¦¬´B‚Ø÷ãÜsϽþ¾3‘ü™ÈÉ¡¼<–ºÝ¹¼ÝyñîL&Gr;Ã/ǧøÐÈAupp ·õîiuZÉ×*ÓÉŸ®‹ÞY™9/w¦kÜ:ÈÙWoŸß~ƒ‘W2™ÐìîžÀÊúµä_ʯ»· Öºµéæt뤆møÒöõBÜL"Ž9oæ¦SVäÍÇ«‹×Uüef¬–¥×+ãú`7´~ û“—Õ!]š®¶}£Y›¸ÕNU%rUŒ&«­ŠÚX5A¦*à,ü¯*ÊZwQL]:7uîAn–ºÆYzÙßró¶1 {O¾fQüÜï~6õBùFnð÷Rß?O÷ Çݽ&ƒ©ºF”¬˜{×/Ey-ú‡ª£Ý$ïAµhÐ#â6–NGÞ‘©úøÉÐÆÌfÚë®ÖÌ*25B¦1!z3í£š@Õà.šZ%ø…¯o«rŽˆª„¼—
-‚õÕ:TFT]ë
-.·×ï¥sëûçUñwXªÌ’Ü\]Jm )…È€Öœ<KP
-,`éëàXÌuH•ÓH`3„˜ÒI`™3wÂÂõ¶åH\— XKâÎXl0Ó¡mA}|®äzÄ"™õ]êCeM„ëYñÄøÐJIQ–0òjšÌ"›N‚=ÈÆ¢0¨%øqùùãÝ͇ë÷lÜJ>DÉ‘³â´¡ÙËTÈœ¸ë"ZÐ/XN|b©²#Ç¥@cä?„УP^ÛD`\N€
-&OÓÙQ¨½YFÒ ’Ö-Gù
-©“®nU”Šº…2Ïoýzöuä.Ó*Œs¿CG“P[Ìc¬Y›°€ëO1‘*¢šš„öú;pCC2•/S$ff<ιªäFñx½DwÎ5®íonšs^NP85øi aA’„‚Í@Å%Ó¥ÕÐÌ΄6]Îp«¦5ø*ze䑯¬ÕMb
-¶t!
-Ûý.$NR…Ø/Msÿœ)×^ÃÝèê«Î…ÙÖ?0</ð4®µW;K êj*]Ñ”‰ê …C­4°x,fÁÔ ¦hRê¸ÒmW
-5ì †#§¹Ëf}ä,…X!9¬;³²H”ÃÃ4Ôº¨J 3é‰n ë+ÓL¬œDjì»G%Ï :ä÷Ÿ
-“–7ì=C(Ûù?Š«á:èCrù‰<“„‡³W{
-?`°Âä…:`Ý\q®³ag)0ÄúeÀX¾¢k¯GQgõæRG°8VRvJ!/ ìŒLl…Ý EIö³ªC.“Ö´0Гû‘Gað@°Òè¹×crÜﲔ؞©{âû®#ÿž}M¹Ršã_y“†wx†×€`ú%Ù¸>?¶WÚ¬fev0ÔQ¶ª,7iI{ºÞ±¥ˆÁBÛåO@sÂì;‹yÇ•h
-ÙMÑ>”E
- f‘V‰_×;HÓ;7Þz'•Å³zH$~½²‡‚§\ç±óýcÁ`›÷4šЗGqä‹¿%]~ !Upt† u Z2¢Ušÿñe-œÒhwÒÃøB•Q‰.eëJÀžç«eëayŸ<n¦*BÄÓÓpÍ-&7Å"øDì‡ÕŒŒÂ˵£XÏxL–Ç:¤Ñá!:¼Çp}ƒ'
+x¥UMsÛ6½ëWì­LÇ‚õeÊé¥ã¤Mš™fâƺtFˆI8 À‚ Uýû¾H[r¦§Œ5c‚Ä~½}ûöŸÙ’ø[ÒvE뜊vön7»þ°¡å’v¿Êo·´+i!‹íŠLÚ’jHZëNª¤à¨WŠB£¨—­¢Võ½¬ñâèÈyjdzÆ[Aô¥
+ÊRïZ嬢£6&ÚÊg#8³{œÍ4_®Å
+³ÐhûMÛšt £LI…_ÊS©¤ G¡!g‘’Cþ*y®œ?J_²¾áD'7vý¡ë›oÅ-ÍW¹Øp¨ý*ßRº0¿O©üíjuÝÒ¶0C©ÆËùè-ë¤ZšKWS¥êéè5G¦ÀÙ†šŒzR C`$eOíP4üµ
+d÷g
endobj
647 0 obj
-1855
+999
endobj
-648 0 obj<</Type/Page/Parent 497 0 R/Contents 649 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+648 0 obj<</Type/Page/Parent 476 0 R/Contents 649 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
649 0 obj<</Length 650 0 R/Filter/FlateDecode>>stream
-xWÛnÛF}÷WÌC‹º€Dë.Ùh
-ØNˆ/•&@”Š\šŒ¥]e—´¢¿ï™YR¤i-ê ALîåÌ™3g†?ŽúÔß>M4œP´9ºX½[õ‚ÙŒêìÞ=ƒ zãàÔÿ×*JŽäM|zx5#’W8¬ôpÃáœtr5¢~Ÿ .žÌ¦´ˆå}Ññ…J v®ÃBGi¦(Ó¹¡<Ud… óÌh<v¹-"þ¿ëP–SæhglžîÒlýÆ<òî0§Ôì(¤Ï™>ýBÑ:S:§­²¸eã~_|?êQ·? 
-J¤Åúç¥%"–ymáXóqž\¡vkM sÝg:R Î/ëSô.ùy ˜èK›¼*ÙÖ…›å¼a•S_Y].HšžéèúÓý‚qdñ¡¸ù
- ¤¼#»Ôkt²•a®0ôÀBqˆ”L³ÌY£Éç
- ÷Hªlf£ÀþÍrÅ””9ße8+5¸DP
-\é§ÌÍy“"j(ú°ÍµtZ0;”÷׉ÙâáØÐË °YN!©Ò#³Ùb±ø–àòÂ+]ÑV~$@Yz
+xWaOãFýίUº$.@à€ò¡\öW⪩ÚØk¼={×·»Np}ßì:‰c¨zâ‰íõ¼yóæÍäÛÎâïˆÎÆt|Jiµó>Ù9øð3)Éqçô윒ŒG‡‡¸’î^ßß]ÞNþººŸ$÷ŸFþÙÓ=*™¥£IBצJï%ïÒÛñ Îî^í­)éGšŠj.øÞÁ‡::ŠÞŽÏGc~.)”#Q×RgꙖ‘±êIiQ–-‰ÆÆÊŒæ-ýf
+M)‘¶vÞ
+29ùBƷ㪨HèŒð2¥Ó²Ép¨VRnl‡ëè8F¬óÒ*ߎ"¨Ó¨ÓQ
+±Tª­ô¢#zµOM‰2WÁ  
+•ÒÿÄ¥AÒ†ÒR‚hœ!¡ì°”7 §íCu-|¹BÛíDUA“V>±+´½¾gU¬/³ÐÐ è »«wo&]
+_ ù ¦Ê+QªbW( 6ªø™yaupéP*pœüÖÀ
+K`Ý0qt-dGÊÐ,¶ÑAèDï•Wê…²FWxÕ(Ì—u¢›¯æú #ê‰0Ù<—p$H‹íÌç˜Íƒ¨Y«E…<WK#21G=K5·KŒ¼JÆÔÔFè¦"R¿Ï·þ‡cŒ¬
+7Bë‹èáhÐSüV‰–´„(ø«†ã?|KZDŒ-£ºÀ3ŽJ)écc\‹³4 àv¬âó•HHòfa/ƒໂÚ3ö†ªf €ÖÖ¸×íØ™ÖûKçÓW³Ùãíd’Ìf¿0ã›%gãËÒ›iõƒ1þÍl¿g3nõÔÕhÝm,®$ˆt¨Sÿ-¸ZÂùºq`æ¬v¤ˆD¾ë©L ³…ô\¨‰‚e±†Ù¼%ˆ úÖ40‹K¥Då\©`Á Y¢|lU"žbM.š‹ÅÝèv%nÜïv<'Óf½¿õF&´*ºÕ¨Ïâ>­7Œ¾
endobj
650 0 obj
-1624
+1511
endobj
-651 0 obj<</Type/Page/Parent 497 0 R/Contents 652 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+651 0 obj<</Type/Page/Parent 476 0 R/Contents 652 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R>>>>>>endobj
652 0 obj<</Length 653 0 R/Filter/FlateDecode>>stream
-x­WÛnÛH}÷WÔz¬X´$˶`°°c{ÆÀÆÎØòfè¥E¶¤ŽI¶¦»iEûõsªšÔ…ɼM.þTÕ©S§Šõ©‡ß}ºÐÙ¥ÅÑõäèvrÔKF#Úýp ¬&=º ’! {çɘð8"§iÎGzI÷l`ÿéÝú}šÌùÞ‹Ñ%M2ÙУIÚ™,5¥KkRMvN3Ò%ÍM®Éø~“ÚÊy}BÕŠ‚¥­â#jfß4­m•gD ƒg­p²òÚ‘"¯WÊ© ÷î{?ùvÔ£nÿ,À~Gy
-¸æÝ ­MžÓŒPåBgl…—Œ“ËJUÀXl¡‚IUžo¢}‹-Ž|Pe¦\Fï¨P©³ÿlHåÞ¶Ìá~¾.Kè«­(U%6¾jqa²G°°6w¶àªYfœNƒušmpÜ” "-aɹyÕˆ ÞõhÌøö©;8GZ`n¶$Ÿ:³
-ôKýà§Ów/ ,ÆSMZº|î 9ĹÔiŽÁÙ÷ ¨ W•´^êR–k˜ñdÊ„îç{gb3«}ù¯@ú»ñWK*qÍ6Å-ŒšDÀH"auAš&_gñÞtÏÆÉ{zÝØÝç™Tê˜DN©rz^åœR8K7ÏÈØÜJÝi>€%Ò¢Ë hz‰€Ïg–}oq å#§w¡UÎc>ÅB#@>Ìf‰%¤Žm;]Ø ó ñ+A‰ Øær&|-íš–øÚÜY9›U(=ÿãùªÌÀÁª4ß#8 ÷à"fÿ~øb–æF—K±Û}!»
-ĘÃ5¦{ìP 6ÒW(ã°TAj€¦ø…õ7í¦Ó‡ÛÉ}| ¿¬(Ï4êM™\ÍrÔj›<¼ŸÞŒ7X%T o@™à-È–ñ&8Ÿo~Ìþp—ý&BF[xf¸bÎÉÍðkŽbìþ°x©°
-FÕ¢tZ¡¸¤Â[ ýôy|uzw^«gÿì<ÿ‡ýÈËœ Ä”EX å1svÍY剀òÓ¯,Ñ4QðÃÑ%žûcˆ"\|fýÞ©õ€†ý‘Ø:kläÔ)šë5+VŠídJ²Žy‰xƒAFW`fAJTJ%W,¡Â3 Y(*hw¦QÊè`'¨E/ã}%-úƒU+P“@¨(ãɾ²=®J³`
-?«b¦×+ºté¶ Îæ9NâØá¸ÜÞ—l•å4ö«½†ñªÄÅF5;1²%Èwp!1MQ$({¹¶î•2À¨ètYr/aö{[BüVÆ£ÝÎóoWO·-s1Ï¡ä/=½yütuÿÐ>Ìewx¤ÉßÞ(lj¬°kðm¾UÐ8EoÊ´BHþ<º–’¥\¿é| ‚ø¶§FWi¨øV\S‰n”¨Sð7Q¶‘‰-¤ÙHjšlǼì
-ô]öÆôFês,{9« AÄ΀£œ……³ ¤41»Ò¸Ž#Q>"¡_¤¾A*Vúm¦>Ì­¬v@5Õ2õ’¯ôÌêiG͹(ÿI¬L1ˆldÑsiÔÀ¬ kKz¥)Ó
-0|ÉmÚ 7@¹½#³RÊ1ôEeüp‡5+Cí'ØÛ
-S>]'tÇM–i«©Á*²AýAr²ÅÇ"‰=rÔ\SßÞt—4â™JEUxËV}‰‘$în‚ „„Hõìä„Ž·•ô‹TÊ1€Ä¨¤âÑVLK‹l ’ÆH¬¾]3^ÊW3 q#†}½}S¹Éhn£|K‰ñ‘KØüQaFÁHhÊšBmæÎUÊÄ
+xmU]OÛJ}ϯ˜§Þ ‘@ )oáãJH%¡ÅWU%¤«õz’l±wÝÝ5iþ}Ï®m’˜
+HðÇÎœ9sæ̯ޘFøÓôœ.®H½›¤wöï„ÆcJVxr5›R’Ñh8(‘ýdÃô]éÌl-úϱ¥Lx‘
+Ç$rgȲS;Ú*¿Qš<X^+çínHÉF9*…õdVGHí…Ò.Þ­öw’üìh0¾žCß±¬¬ò;BxíÕJ±=¥)˜2eYzcw§´¶¦*©à"eë6ªt§0¯Þ”TZ³R9Ÿ’ШÑÃ&ÃùÕp2Ü¿±Ý–çvÎsA/ý­±¯Î ¯Œ&Ú8ÏÃ7`âÈË ŠÅxcRÞ‘ÙꃚèzŽïw óá#)JªRxÄÐtg
+°AÏmÍkšbOy< Žwä6ÂÆ£Ò`ÀdéÜQfh±L:|”B#YÆ%ãC{ZU(£íÖ>IÝ+eCa Ï…xß÷Œ¸Èh™×€#®ËlͱV )òœ³Øðçù#X~¯v.%;GB‹uäw/1ôG!ŒVÆBry¸°ÚDN ù¡eñÐñS”§´g;‰‰;Ç_úŠ¯Ébí*Ü’û¯$w“ËZ'Tá@鯊!¥ˆ½d[(.F$W¸å„©€ê
+SE™s´$f¹Ì[MàaLßi^=òÜ’`éGŸ¹´÷?_Ö¾Ò^Ã?LH3ýlwÜEE3þï–×Qlf˜œÚ Âô¤Ç†ULÝõèG)³Æû68$xÁÉ•ZCÄÙ澓µ0è GÌjÿÙûÚrqOOVÙ »mQXÌîÓÝ-4J>Œ',WY‘æͨ°xFt´±“6â„èsô‹A3Ýù
+ÿ[ž›˜§‰Ðw°
endobj
653 0 obj
-1961
+1001
endobj
-654 0 obj<</Type/Page/Parent 497 0 R/Contents 655 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+654 0 obj<</Type/Page/Parent 476 0 R/Contents 655 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 11 0 R/F9 12 0 R>>>>>>endobj
655 0 obj<</Length 656 0 R/Filter/FlateDecode>>stream
-x¥WïoÛ6ýž¿âV h
-8Še;¶S`šnY tY׺؆º(h‰²ÙP¢+Ruóßï©_‘[lØZ °$êx÷øÞ»Ó瓘ÆøÓbBÓ9%ùÉõêäçÕÉ8Z.©ûSnq1¦É,ZÒl¹àŸü,%eXŠ«é,šÕOâ n´OfË9.Ã;Ýl‚×°sû;\ÜÌ(Ži•!¡ùrA«Ô?Ó*9»–™AÌTÙ¤²V[Ú™9C‰)2µ­ð¬4"çûÒdJK;"åHYª¬Ì*Ík­”þµ?Tqõ'‰"%üº]Q¢•,œ}²út2¦óxM°÷™Ê÷Zæx@n'-*•ÂaÕë&s”Œu!Z{ ¬ [éÞYYþ"ÝË"3€ãs%-"†EåYòÕVúðœdùض¹“6‰pʽ0‰Å#~q!’Ù›©¥FZ*Œ£øÂ@˜œ
-Rë‹a-£IG95K€ìy­Ï.®¯¦ó†«+ˆ ÎïvHC+E8¥÷[m6B
-$«¼tI ŠÛŠšµe¶˜1C¸˜t) ¨v í×Góp#B·¿­Ò7Þæ¼çñ<€ãóåÆAÌ°è/­U:]Ä]ßûŽJ§3t®^Ã
-tEÇù/Åk5bþÐÉׄœý?
-§Étz„´KÕÉ2¢·ž<;ÁMá
-hèÌEßô±ŽšJÓɯ+G¡Ü{`ö 2â6uçeGLEjuxlsu û–9B‰%uÉ úôÉ<}¼(j”Í°uÎÝw6
+x•±‚0E÷~Åq
+½ÒWÆáG1 x•3(‹ý¯±wÝBÕ.H˜+ñµùiò¡ÿ°à÷r,ã@ѤO²EµÓìÈÞGÐF endstream
endobj
656 0 obj
-1500
+160
endobj
-657 0 obj<</Type/Page/Parent 497 0 R/Contents 658 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+657 0 obj<</Type/Page/Parent 476 0 R/Contents 658 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
658 0 obj<</Length 659 0 R/Filter/FlateDecode>>stream
-xXïoÛÈýî¿b /r
-#Å©ºªÔ>Ðè>*银íh2(yôA‡‡èšÑ„FÈqëUF¤lI£[wΕ£Ñr§mi¼.¢óÐòHÂx*œÚÆ@O¦ªh­©Ö~Ëm1q'yV®PÕ ì#ò2΢87£Ââíjõ”
-˜hž>Â'ÿå˜[þ
-ošØkê05Œ©Ï'Þ³Fù¬™IÝ,ÿa¦4Î8H§¾›NVô!(¢èy
-j0=‡á‘}7ItTxÀæÈUä.B»S´Áv8í%{˜sÐɵ{–¥$z÷ kÑ„šN &h2ó÷+5D­JÎé[â †Ác_™îûF³ sÛƒª×¬Š <T4I¢‡«S ›H5nôùÒò—ÒÏ&Ĥk­<D†´ÉÙ÷$P-Ž´Ñ¼å
-DN@ ^2È:Á˜¬BÛG’‡ÏJ¦Øm6´:íÊ2gÇšT1ÃS5ö­*§Î"ÈZ¬‡¥·ÓÕ«{Ãijƒ¶ÈˆtKÕÀ’´ÇÀ“wŽ#.ÖlÊÞŒ…¼Ã3¥>hšT+¦XÊËÞ­ïôÑœöŒé/&ä¡î-øëkêAûžÉÎ@yd«Ÿ4D9×Á³q(äàšÙð [ø1é´,†YŠÉ½×Žpîšy¬”ÝÆK«p W©½wðºý¾}zs9€¯óyÌŽ$Pœ4ÿ¯…žAZx×À0× ´
-Ãt
-PRHQ¿‚¸´Apò.E¯YA×Ä B¦yNÒ»¨Äi­yN¯föµ é5‡³À€­ß™†¼ÙîmQGˆAäèg.LòǘþY—p0¦î^ Ù²ŠpvñÀ[îD¡,°aƒŸÇ ž ëd ·`Lkpkl­áisàì7äÕUü»Áa–¬~îß`¥ùû~—EL"¦¹›a¿Xº9IÚÒ-ù¤—`ö# øú§›îÅ{~u=›ã;ƒy²v÷ï>½ÇvîÛü®hk¬JÅor ì4Ý>½^à«…ò4½¡ó;ÃÆl[/·ÑG8ßòò÷–_Ô£@ÖÐ?;Ãÿ…—1Bð Š|upq}èrâå9‡Á×ÿ8ù+õ–’endstream
+xuSKoÓ@¾çWŒz
+RœI8R
+uU®›õØ؇Ù]'äßómì)ŠâÃÎÌ÷˜ÇïÉ‚
+ü´]ÒjCÚN>•“÷_?Ò² ²Fd³ÝQYQ1/
+¼èéÝ!¦ tzWþDÞš‹!ïv¹›/‘9½w‰› ’xG¾¦çýýR®¢ÑÁG_'zWùS¤}I© ¾oZ"E½“Z¸"ãT¶*ÒÙ‘ö.JÅE7­7gº˜›,  ÛÅj ÔpâàvìûH¨´]ŸÄ5Äî(Á;Ë.Eª}
endobj
659 0 obj
-1902
+521
endobj
-660 0 obj<</Type/Page/Parent 497 0 R/Contents 661 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+660 0 obj<</Type/Page/Parent 476 0 R/Contents 661 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>>>endobj
661 0 obj<</Length 662 0 R/Filter/FlateDecode>>stream
-x•WïOãFýÎ_1ŠT5H‰IBH€~â8è¡¥wiQ…ÚØ›x‰íÍíÚÉå¿ï›];?Lû¡wB€Éî̼÷æÍøûQŸzøߧñ€NGeGŸ&G'·Cê÷i2ãG£ó1Mbê½^&Q[å¶"&=£TÏç*Ÿ“Ê©Ìci¨H$½”Vš-…µkmâÅ:*¥X è-´–¤ÄRt<y?ê".Û}ÿ;~íöOƒ?2eîî5r.cUò‡Ä znDÖ!‘ÇÈB/ÂåáMƒÝMƒQ0䛾üvó÷Ûýï×W÷oW×_îoÂðYå±^Û0¼.‘yñ—4Vé< ŸŒž©TÞ+[¸‹{Ô­ïÙè’Ö*Mi†ÃHpÎl:4Ó†¤ˆò
-h5qúŸ0 »àË3RŒ>0JÄJ‚Ç ©l©M!òÔ^²È Ùh§@eP…]zI¦UÎÅî…ÆUøˆ-„)(“y Æ÷¸hÖ¼+ù€¢°‰ã$h*¢E¹ä$95§éójÀ7—2–qxì)â~:½F¬úÓ]#ŒÜƒ Îé×ÕÍ„ÈÙ øs #3½ªyJu$RèÒ ß»:‡4ÇÐÙ hÊ\6á±—Ñç« ÓæPh$XÉuG3)H´¾shbÕª
-}ß8~öñx”ÈȉôC¯ÔX.á) ÆJI-ƒDùI‹%5…jILõʻ䞋€éÒ¦A”ûËÃÕ£Gd;¸Ë¿³6’]Auý£êÑàŒºµï dP.S  •Ú@ .ünE6 (–Ór΃…R¹Â'½k Õ:òû=OÆ 7!Ê£…„emgC£2[B ,¶h—Ù’ÏB`™Îyžø Ýᚹݤ1|½d?°AuY=
-9{ò<ü.á›ÉÖ:í`AÃó1~à §g~½¸ØÁø,8‡Míö‹óà<è‰j4s®ÏÚ,`&3 ƒ§¸›2{MÿÌ  ×ìöÀÕºÖ?ÿq£ãªfѶí›dubÁÊ'(¹b®[—Ë,‚¦°b½&»”‘š)À]$F—óÄ™ÐA£. “ÚøN9¹=Ûí\ÛUƒW¿Øìêm¿¤‹(¥~O”ó‹1F¬ô
-:+jëvö
-Š•à<ù
-/
- áåEø
-­LK£,)|¼êëíYt[Xy/sO˶•s¹®c3'­] µÿÔ·2ý¶»¬èNtdÝ·író†Ú `¶j"Hd
-ÆĪ*çu‰…Â$À„ÄnQhÔÉø¦VoéqLõÏß`X©yw¯â0—¸Ïv¦zQéPVÂ’u¯Â¢¼”&S–2¸¾á™òFèY‰ÑU% |Üð幊OVKÈÎóÁ‚ô±cg®sªöªôÆ)TkßÐH`‹©kE‰+ŸàMì m+y‰A»qí½ThYÀŸo Kl"Œ'æ0J“¶Ì ›iéái„g ÉË9û¥ô‡.´:5x«’Nïï 8F/^*À«}q†×ÂãÊ'œC¸hsÐ
+x•UËŽÛ8¼û+ú8ÖŽ­1lonY`Ì!/ÄÁä°ŠlYÜH¤BR#8_ŸjJòÌ8‹`ÃÈÍêêêêæ·Å†Öxmh_ÐíŽt»øë¸xùæO*Öt¬ðÏn £¡õj½Æ}sçRð¦×Éz÷âø/b·´ÙŒ±Ëâ°*}s—ÈF¸iè«óƒ£T«DŸßÝ}!å ½µ:øè«D÷Ö?Dzw¤Z=0‘±UÅ]¢Ön"U>Pà.pÄCëNÔG‚"É×´ÜÜŽ)OÁ÷Y‡øV ¹œI¢Ÿ`&Öµó?Y‘mÛ5ÜNÈ©ævEÇÔ+¥E¢V&›2ˆÕ}“(ù«ÔÖ%>•eâ=xŠç˜¸ CŠ"èDôá,xÎqXMÅnµÁÞ;&íÛ´£oú̇…}òF3—’JzÒ%Y#ĵjš39Õ²™´ÑÚ÷.EXéSYÍÚ_QŸõŸ gÑrVTòIµ%è÷É|E]ð¨U~? =U¶á|¦ PК«¡-•œ†LwTd®wîVù±R<P|K‡ŠE|?ð‡?Hš Œ‘Ö‹w`
+¾øà±ÆÈRpyum” =ñ­®*ÖµÐN r§¦sŠqðÁà
endobj
662 0 obj
-1861
+870
endobj
-663 0 obj<</Type/Page/Parent 497 0 R/Contents 664 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+663 0 obj<</Type/Page/Parent 476 0 R/Contents 664 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
664 0 obj<</Length 665 0 R/Filter/FlateDecode>>stream
-x…WkoÛ8üž_±0P\Ī‰致iï\|¹ØEQœ-Ѷj‰TI*ŽÿýÍ’’jÓkPçaš»;;3»ú~Ò¥¾º4ìQ@q~ò~zòöÓu»4]àÁÕ¦ u¢N§CÓøôN‘[I*Œ^¤™¤$52vÚlÏi<¥ØHᤥ\I %ÒXŠF—ÑÛhÝE–ÆÂ¥ZÑ­p¢EB%¤q·±ç$,md–áûÙôÛI‡ÚÝ~ÔC§­[i×N­sj¥[ið'Œ£{©ÊpOëÁ襹m!ìô ßÔY™-(µd‘µL(U$È—2ž–Všèöf5‚Ž‘Vª–$ŠB
-®HÓ\\À€D·“C4¸£¢4…¶’#Æ¥1R¹lK¥Z+½QuœÞ ºàâ¾ê’b€…<<È“­u2§Z9£3zJf<ÖÅYg:Ù®8¤ñG+ò9^¥y–†f§VJnÌ2+HWm³×È­Q$™Åå¢stV/
-ž-Ž
-'8:gèS
- Tÿ[£¦\8Çù{Yiuö,“›ìðövðŠ(ð5I—Ò˜b¶Ð*‘*æ²E /)U‚J *¦0Z¾r“Ë休ïVMtÖ>ÀzåÎ@ðuuRªLZK-+¡ÑÔmé[y r1Û¢©—BX»Ñ&±8¼•¶U‰Qó$ÿ8þðøõaz÷×8r/nvÆ=< $Z…¨/k”RÉø¥E$’ØØÂŒ ,3žîn
-
-ù8=Áœ¥þh„׋«!^{øϳ4ŒåÑn,÷W~ îóU„¿Dƒˆ¾¤
-Fäµ=ñc€kØÛü¡vÁ)täÍ’âÆBÁ‹;7ÙBÆébë½Lm¹[¡d!¿™¥kðìY,¬jŽ:.ÈþV£¶òô5GeS§|O¬Ë,©C…ëùÆ
-¡ƒ)‹Ùu<Û¼'
-$Ü`rÿ¾zÞï2jà{>a¼×hcPÙ²(´1~Bbï^uC:ÑàÒö£«£M)4dÑd%ü};“EYn#¥¢/£Koi ¾ˆ:¡eõäêö†ˆßî]…5áà Úñ¢1ðÀ9ô"UõˆK¥ÁÞÁ y¿D…Z°ìa“ /¿{ºõú#P)ЭË?‚“ã5°G½nÿ¨¸;@˳a7³à/s½,!þ9¤µÏ’§'%2“œ^ê"äc‹Ä#RÈÙ—YaÜë €_È¢ßC¡uXN¯Àë£èàn^ˆ2ãudÉ‹ ÓCq†oƳÙç7 ^×`‚Uyáüå·Uðj·Ä6hÒâÛ¼ÿµcf3æ7vÉë^‹ÒÅ¡T
+xuVMsâ8½çWt͉ÔNX lÈ3ûQ•C2Ù
+©™aË ,y$‡ýõûZ2”l%T,©»_¿÷Z?/¦4Áß”3º¾¡¢¾øº¼øõ¯/4›Ð²Â››Å--KšŒ'üRŒ¾oE ïʬ•)éÉÙ*¥¿\þƒMsšNÓ¦«Ùíx†m£ÃÂÖ¨JIO/÷?H`'^”¶óô¸$Q¶5jaÄFÖë=‘ÐÚvÊlH¤]kûFÁÒZ¶–ø±jµæ¸ºš^§hµ¬×Ò‘­ð—¶ÊŒé›)$QØ*Oø/­‘ø"§vJkòRòžÖKçc†gÛØTñn¹§N:IFµ“YäXW¾÷ó±Ž7d„Ó¸ŽU’2T·Å6fä* EÆùñþùΙWf;…‚ Å*®¬Ñ{’f§œ5  ÷«g7ã9÷a‰ø°;é[øÈx~·•FîM Þ8»q¢&kb6±¦Z¼ý+ï‘dé€
+taøht‚WaMpVkœVá8~ëY(ìI=FYèÒÆe)³1ÑWY¤30w‹”ÑYƒì?¬
+à ÔÕ‘>šh5Ú)—>>?ÇRRÞmPÖd±k[¶dG{øìßI«µn¿ºÄw@¥r²à­ /:’ã¤X¬Ù-ƒD)8a|#œ÷÷%Òö£Æ"fa˜C‚ùM±”ÈrdžØV—qé§ÄóOI&Ü»T¹-yŸ_lmg¨R\4y.ðÅó,á]jî±F&†gf
+$ŠªbI|æ v
+â5ù ¨YgLøãÛÃÝýãj5l¤Ã/QcZö¦ddÀ‘è7à›ŸØ
+lJÀÕ,Å”KÆ¡\z½.ÎÉÔ PkHˆTÑjáè `6æn«Ø\ qòðp²‚ÂOËÛ»²T $2߇¥Äx¢# B&¼åN%_ð™Ÿt»Ùˆµ–tw¶+ƒ÷¡Újôt÷
+wÄHEqoh¸NDÛÀJxnûpÅËC$/E©o—Ÿ8
+?w#çšÈÈ?%®žJkúeŽËçGÒº®Ã“3aýï z¾˜C¥¼xt3ãÜ¡Þ¿/þf ÝEendstream
endobj
665 0 obj
-1795
+1340
endobj
-666 0 obj<</Type/Page/Parent 497 0 R/Contents 667 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+666 0 obj<</Type/Page/Parent 476 0 R/Contents 667 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
667 0 obj<</Length 668 0 R/Filter/FlateDecode>>stream
-x¥WïOãFýÎ_1:éZN‚@BH€•øuWÚƒP⪚괱×dÛëÛ]“sÿú¾ÙuÇGÕJÕ‰#ÄöÎÌ{oÞŒ¿îôéÿú4Ðшâ|ç"Ú9xLý>E)5:S”Ðaïðð¢x÷N;yFï¢/¸mØܶûGög48ÕÓé˜öÉ-¤‘$ðcu.IY[IKN“‘Vg/’–Ê-(ÑË"Ó"QÅé”î"*NU&íŸHûý£Þ
-g‡A§Ç{´ô "ÔçDKû™pµ°)2:hJXÃ…g ‡Èê?{|øu´¾ht4êhx2Æç~@Gø=¥þùÅ=‡ƒÞÉÁ'½Ó]MnÏoî>_NÉÇžûæèŒUÊ,u¥sœ/9gÑ4ù\pìxúã“Ä08eïµµŠœT.À ŒÙ&a(* ÿ=|ð%Æëú§j˜†VâÐñ°ßC9-‘F@™DYÊ"Qßh),i£žT!2d *·ÐÄÍkúE/
-ú™"iJ |Y†žL_¾9 hÉ3gU‚§<+©6œw‹ÄR[®ÇäMEt<`àÃc”²ÉÔ4.ŸŽ;ÜM¢k: p®êÜ¥*CŒœÞlßIóƧ‰º¬DˆÌë:‚xŒdÉà³.Ð)¥ŒUªbÊ%îE ¤ Y8{ÍwŠò=‹‚ÐPÒ0vMo/ЃL?d²%äa¡I¥}¼–Z¦Òpãõú´dc€xô_n®|?´Œu^ŠBÁ0ú¹°¡WùäFò›“…EƒzGáÖûx~G·¢O2@4žÓ±ÎzmÉ*–jRÅ2éy«b£­NÝþž¥¨!™ U¨yåØ¢8»I2‚œgÙ£©”MçøŽH,¼ Ž†Ó:azº†àRp J.…'c#ù Üvƒ…]À[“J„l¼9ÇDÊ]‚Rï{ÔÆfz~ë, F¾—v¿§ÓœsvðÇ,ãð–$|œ¡2c?`óö¬«ÂÀbÞg»“‡_?<L>Ýoùãw=ãòq¸XàeØBÈûå¶ö$x¤Ï¥Ù£{£raê•F½½jämpz‡Š ?Wå÷wÎÞõ|ÓYᇸâébh2=У0%(ç÷è
-öXè^¸…ŸO
-,´Œ:Ñ7h#Çet‘㨠‘u"š¯Öø‘¦RÖ˜-pOÝ’·¤0ê|ŠÛ‰šÔ…Èñ.Þ–°aÙPsólPâ\«äy‡Ý@ÙoÐŒ"v{|é_0ƃÕ®ó¶TcañÞ‡e
-z
-å¢Æ.@ÆÏ| ¿ÑïÒ b³œù¨Xf€3g4Ò•RÔÎÍ/~+qò2Õìh¬âò¹ˆ‘‘äá­Q/''€wµ'lüyɉ"µºÄµf†bÃõûlËß.Ïf³Ç›»»h6û‰om³¼°ÑÛ©—õƒÖîílþ8ÌfÜ6ê©áhe–\HKăÍóÔ>ßfð¦ýôœÕ QÈε›©Œz+ÓWò'
-K1Û§Ÿi[‚ð¢¯u³¨±'¡1@%ú+…ä2ð6ÃåÇV±ûŸA6©¨2H,ÛÝÙWâÆõf‹²2®ü†ÔÉZÍJÑFqÖ“¹-€°{„uÙû9vŽíáiä¦ÅýaÀ5AW¯¬‘éõ姇›è÷¦04®Çƒƒ;›­_iƒ`«,ýklÓ·nRIX¡ø¹ÂLIB¦¯ÉýÕ’€¼e 1*îMT‚6Êu"³¢åelËSüÒÔ)uí‚y…Žäõ7d‹ís+ñF†åBÂ5ý7µ×h(ˆÉñþÆïC)º‹ŸheÔ,]M¢9êÁû“¦ÕúØÜûx{†78pqŽ™¬¿à=“6®Ø;×;ç~¸}<ÀKf²û?ßA†ã!jÒñˆÓ Ño;C„ã¾endstream
+x…WÁnÛ8½ç+=¹€ë$Ž§½µéÛCÓlí¢{(° %Êæ†"U’Šª¿ß7¤h+j±E$µÅáÌ{oÞŒ¾Ÿ]Òþ]ÒzIW×TÔgo·gçï_Ñò‚¶¾¹^ß椋ÅÅ>)fÚŽ¾*³S¦¤¯Ö=øçÛq`E——éÀ‹åÍb‰#³íAR7<é{dMÊS)½ÚY’p¶E A…VÒ„s/Ý£t„Ï‹ƒ
+²­“ zCÚš=¹Ö…ßé²—Ãe³!|ù4‡•BÖÖi…kMLñ‚^\^¥Äð /wþ¦ÒÖBò¶x:¡_RYGN~o¥ž(X¤äÔ#’AE^ž¾NÒ^éD@=»ž*¾ÛlH ®û79«Ñµ©N¿mœ-¤÷8æù"”к_ '–׋UFHŒÕv¯¤§–O !U7ZÖ8v˜s´…S;<B(ª”A(M;©mÿ±=‹ôòæ0¬nÖø{‰¬2é—ëÄáËÕ«˜Á‰öªpÖÛ*Ðg@$Ýs%8¢[¤þ ¬×\Ã'&•ÑÂ
+¥^
+çç$+à €âQ"Kir®=1–Â)ÛzÚˆz'h+EMµ¬wÒy ”…-e~h´ð äãÉV`7ÿ&wú6û¸ù|ûí9%™2ÑPêð?mÄeQ[a$Êp“[ÔQ¶aA(k<ª
+Æ SÚÎÓÝ–jyp©L¡Û’õ梵0bYó…ŽD‹ì!"†Cg˜(ô‘¤§ ßX«Ý¢ÃÁ¶û‚CÊ,)
+ÚÙ²gf"ÝA¢B`uBÙ"37¹¹i]c½ôÓÉ^Ä|ÖE>ÂdµHÓÖ±KsÃ3¼ ˜ûtjRSâI»CÓäÞA¾Ê€õ:b3ÉGìlð}©UÙ
+M‘3ˆÎ !ô‰Ëx’˸PÜ6"¬@ƒ¥ô8»`'×aö*GðÌ–~Ao{*•ƒêÁ8üÄõ¬+ …ª¢­%]å²ÇåÍVR‹f꘬ÎOL›Ë>ÂBP„Mn: nD=Ð58ÏÕúüæÿçjµŒ&}rž;„¡ †ƒ*ð»S¡80&OGÎ`6[äù‹ççÌ
+ŒšÓTIÁÃú(:h|=–…ö4}ªfècà˜\(P3ìt
+Ï0ÝžÀâ[(ò?À1"sĆ£KK•Ù€±d±¢ŽÕ_ål b¥ãì¼m†Fn€<ÍÞ£6ùCðD˜£8Y`h‚±8ã¸÷ñ!w(2ès𣻨Œ×!„t<lØ>+xUJËŸJÖ!AÄdmh‹^#<Ç<OíÁ#ñÈøþ˜@¥LT, &‚ý]F“HwÅœæÑß ¼ÄøV#&Ý}Ø`ø±Æ'Á!Z‚ÞÝm¸Ê¸o°­g’Æ fœÇÃ8÷¦ÑÙ’1Æ÷NÔ5wœXºJ@¤I#Ç~â
+ ^êŠu˜#Ÿ s‚mRç8és€œø®H,«'*käc‹8kâr†¯a~ìþÇÌ€Ënyrg²¿,¼“} õ¸ZÏ÷'=,p€ ¢rðÞ
+Ë~‘ Ì°fù~‰“j6—XšV;Ç3(:8ºbfëÌa¸u“¦><œ7¾a±¦lÞ'ekcÃËHØàÞ Ï c
endobj
668 0 obj
-1764
+1681
endobj
-669 0 obj<</Type/Page/Parent 497 0 R/Contents 670 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 10 0 R>>>>>>endobj
+669 0 obj<</Type/Page/Parent 476 0 R/Contents 670 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
670 0 obj<</Length 671 0 R/Filter/FlateDecode>>stream
-xmVÛNãH}ÏWÔÓNˆI 0oá²Ò’°ƒW£‘Vm»÷`w{ºÛdó÷{ºmçbF@À—®ªsêÔ)~ &4Æׄf—tuCi9¸‹Ni2¡x'7óÅ£ñxLq:Üæ‘ËyG–éš2Å?c]ÞDS¼?Œs¦ïRezkiÓ?– e‰DX&QXM†­ÌØÒVº\*·6Ò:³‹(Î¥¥JdXŸ<¢T+'¤²án°_l›zr]úÔ–ÓÚH·#„WN®%›sÊuÉ”IéÓfwN£ëŠJ.66—•='óîtE•ÑkYð9 •
-ÕªîñƒÍîžÝYÇ%½ ·Ú¼['œÔŠ°qQøß(GÞÎ
-…dWŒåh]F×­C’¦WÒx` ÏúxߌØÀhU4{FlŸY/›S­@©(
-ÎBÃ_Ï`yv‘¦l-= %6߃ÄÐ;…@2ZkÉþÂô°‰œ@$駖…C§OO*Çfä%÷Ž¿ eÄ‘V¶ËëA
-d ¼»&²eR k·ÖR¸¯ÀÖÇõ¸¼ÿöã%~Z-#÷Ôþ¥Â'^÷ƒïC?dU\X_âEµ éñÊN׆C¬ÖQS)ÑýúèÞ<Z­wÐZ¤ ®FP,%0+
-Â[a!ú)ï,6´à1` ÓÕõ-Vìt>Ãß—øͬ›¥=o—öäfù…Ž}}´¸ánÖèŸh0(Kk¯ö0‘¾äQsjÔΣۈVÏ‹§å¿÷«eümõW˜å¯{!C¸§àéÃœLgÓhŽÿ°Ž¯g><Šÿ{ð?EÌendstream
+x…WMoÔH½çW”¸lÀ™ CŽ,«`ÙÍ ö€„zìö¸‰í6Ýí ³¿~_U·='Z„’ ÛÕõõê½ê'ç´À¿sº\Ò« Ê›“·ë“³÷xrNëo.®.i]Ð"[,´ÎOÏj³áŸÖûoú§jºZgÞ>_‡Õ*Yf´®4Ñ;‡N¹=íL]S±oUcrU×{ª­*H«¼"[R¨´×ÔØ¢¯µ'ÓRè]K¤Ú‚øk>|A/Ï_eK„rê´·õƒvTömŒm=Ž›ÁépJ°àÒ÷$¯þÑk2ú³Íõô ?|YÈó1øGî9:/ß°E_ö¾U×ÕÈcÊ’Õò"[qÐë
+ç¼»CvA»RÁyçìƒ)°"d³G5<
+¥öTZG_L»1ÈŸ®¬½g»èÄvÚÁE»%¿÷A7]£¶¡RZ­ &ݘl£©°-úpH׊ýº|šú¹‹N÷“{23ÄgcÛ¹-©¢ gé¨g1î¹­ù
+(^F˜Š(“6c ‘óÐZê=€ÃÀÚ:Ûw@j/½ú}}ŒÓë7—ø½ºâßKü8Me‰7tŽIà‘x}±$†âSÝo·jSkºîÙH( ÓÇé!­åevÁ°ø•á Rµ·tßÚ
+ëéÓõ‡ÒG•º/`QœÂ,
+|é¼jmm·…@ÉB<ÂM$2aÓYï ç‡ZúNç¦ÜSaÊR;$‹I=vÚh¸
+EL Ár”ˆM*„¾–}MO¸4LQ ÷„«CrèN_+‡¤0­qÜŽŠ’Ñ{L`"7”{¬µ*Ó®uÀ FÕ¶à2`Íîf‰Ô`) žÛEél#ØóDƺà‘bP×XET˜ë
+*9Ù ªp89Ù%Ã'|‚úx{G…
+j£¼žyGéà˜]X&JöÓê
+ýÜÓÞ v¨ö'gÖ¨ÛàT˶ÁÙºÖNøÊĤá!EAžÆ¼RíV i
endobj
671 0 obj
-1019
+1730
endobj
-672 0 obj<</Type/Page/Parent 497 0 R/Contents 673 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>>>endobj
+672 0 obj<</Type/Page/Parent 476 0 R/Contents 673 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
673 0 obj<</Length 674 0 R/Filter/FlateDecode>>stream
-x¥WMoÛF½ûW zrP›¶dG²{K‚0Ð8n­ =ä²"—âÖ$—á’bÔ_ß÷v—’B‚¶
-[îÖMùKÌcvB3¸£ÝèZÛÞ nVMß1-]oMkëJדܶ°TZ<ïL¥ù¤¥iµÃK )-bJ§C€#>3=•3 u[ó’ì
--OªZ«IP®7æqµªr‚´”ˆ³%"Cšõw¿Í‡×¥®Yôß;Ík¾P¦jð~Â0>ñyÀù¯Çw’ª²tgòXö›‚UyÓ#غ3i¸ÿÞf}©q‚%bªÒ"OºÝšI ¦K † ;vK7qù°’ÌV
-%@¤­óÇ›F+
-ç%Ó.mÍy3¨Xˆ‰[·s®ÎDmJ8g¥y8ïë”àªÒt;1Áß‚BH²@
-x
-$Ô7?\#?63ò"?}’#x#Y ò™¡
-ø*}Woýeïhêc7Z­ÅUдÑío ÓùÀÇuUhdt‘Áø_öï_Ü¥qØœ/“ŒZ ÐÏóÅr2røî|äÁ±‚£Àg.^ýy»±œ’ªÞ;Dóÿ˜?Ÿß@ ÷
-àóKÅ€!·Õ¥ÈçÓ­Q>®‡§'¿i„¸ýÚ?) ¶6îà,-y'¥Y·ªÝ}~…ÿ=nf˜¬~y$|<t ÇQ²8ËÞưר¯@xj×`6ׯïÅÝÍáËÚÕeøÞô3_ý ‹Ô%ì±[™Îõòzœ_¯oø
+xmSAnÛ0¼ûsLXµlÇrNÒ=´H[=Óe1‘H…¤âú÷J2b† @"wgfwvßf)|RdK¬6Íì>Ÿ}þöi†¼äÍf›"/°H‹ryó[ù®x²Òæð)aô)ƒbô|™%Æßì „ ú]ÁŸ|P ¤08(£œ
+µ °%:¯„)pp¶k#Å;ûÚµ>AnáTÑI…P)ŽÖ½BZßçòÌ«(€´é*YFÚ1Gmöš°‘À“Nráe¥È°^°¦Çý³û¯Þ:eHdºfOI¾kÛZ3û~æ(l#´™Ik‚³u­µâ9–bÝX‰6¥uš$N…ΙLàéñÚ÷’xFü³XQ[sà_¨¨ø¬hÂ9êµ·ø
+å°‹Ûq»ÒM–Ä=å^ì#§÷~‡'g_H€G+»èq?x}>d͇´+Û»ÎÖÉ–›ËåÙÜz~Íþ ƒPŸendstream
endobj
674 0 obj
-1669
+543
endobj
-675 0 obj<</Type/Page/Parent 497 0 R/Contents 676 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+675 0 obj<</Type/Page/Parent 476 0 R/Contents 676 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
676 0 obj<</Length 677 0 R/Filter/FlateDecode>>stream
-x…WMsÔ8½çWtqª3_äãÈn-‡„,™r‘m-bKF²ÇëýõûZ²Kf,u÷ë÷^·œ¬h‰_+ºXÓ朒òäÃîäÝŸ[Z­h·Ç7ç—´Ki-—KÚ%‹G'­#£©Î%=Þ}úF¥Hr¥%%¨©q’îvü—%¡Sʬi*"-JéH8>ÙQkš"õ¾Ñ¢Vù&Ü柊Þ,élµ‰Öˆ¾Øñ ¾?ÉM«i¯
-ÜDÎà*Q‡û„•„ïdJqÇÑSS
-åsát-ɃÔT˜ ŸÕ|NÒqöœ¨mô,°};ûªtjZrÒ9…âQ…˜†^ŸGÛ>a`Ttdâƒ2#W êôÀ!gÜã3RŽb©tÆHøÿ…’fØèjñ,}æ{cËY¢7Ÿo¯?Ý==iøÄ£Ñ.G(üÖ2A Âv\ƒªI…iݘ°Ie-mÉ ¹X™*+“»!1‹Ü][Sè9¢´Bר‰§JØZ%M!,¡æd`´Û\%9Õ¶qüh͈‡•{i¥Nd:Çö:M'ƒÌ»Ó1ñÊšƒJ™`$´W#dÀ4<¨d¨&GÜŽž÷E“e".$]šykÒ†9÷´¸¿¾}zK®CÒ%
-Uw {q@L\DÄù’Ìyè$·F«™C@Ú¹ÖØ”IU·Œ‰zٯɬW4`¼jªÃuÀíêA|Zô’Õ¾AìNàô~³ÂÏíå~®ñQöÁR®hi°¥l¯.¼¬_Lå*ÚD+ l&kz„ʈ© ­Ù†ÙÔþa¤5› `àûÍá£\$'’ÿ(W3:0…X°Êªé½üKêizJôœ„ÝÌ:Ñ*—‡v7Hm8?»º ž3Í`ÑÈÈVp//î<qž&K­*Lçï›Ç›ÞÞª:7ˆ‹š¸P ¦‹|ÙàC`¢FµIb]£’ia½ô3+E CrªéØ>‘Ô,¨H!{ …Û`ÈdPO.EÊD ™rô×Å{äÙÀÓv¼R¯6 “€AX:ÓŠŽIÀo%ZVÁoF ¹ÞXŽé½7À­`B[´²òÑç5±Æ|¹ÿÝ[Û ](Þ“*‹¼|+á`’¡[•Xã̾îÉ£!,î ‘ï/òòî'a½³Ø[ñåÉIQÂH¼ÉŒ†®¿¶÷Î5‘µ¸:UØ朵õÿ
-ÛlÂàœ*lÑ_˜`CN_¹Î÷'*Û!pÛ¨ÞéàË0W•ñ€˜çðoA ˆ¤ëwù°3‹E Fç '€ ó
-ÐPjŸàdÀ7ýDî5ìLò Çh&‚ð¼±òG^1Áa¹Ö‚É,àø›_&µdÙø…¡¾{xð€EÏúꄉ¢j4’(Ž9„1ÃshÎrFHäÚðÊ&)'Äê“%Ž
-P“yÚùõvÿ¦óëåety´°]E[öÖÂp‹{.$eçûˆ
-~E…Ïð
-¨òe†²f°ü9ž ý²ËúMŠ&eÒÙ€g)´È|kO9 Ÿ£…òОí:÷nSSà"H¦`ŸÏr\>3¯
-lÇF:FroUÉÛÝßgE~|YÒ°ÉÜ0f´o´ßí„_3@?ß²SÞ s¶Úkv§d‘‚‚b“b©Ý“ï_0l¿˜þÌ({ƒŸE®[Ìõ¹P;bnàù~âZÐ’Ù"uSz©“›á…¾YŽ~» ÊÄ“&ö31ùbbUöØÌò1TÞʱ56$¾gþM!\Ñg
-;6:S±ó
-hÄC«¼·^ eOË;ý¤ÕÜ6™)œßdA`Á[
-*ñ3}vùË‹X¿Úm®~1w.{S_a2ñ‹äòÈ®o?\³Û|ç™~c4« KŒÁ9 §Î±ÅÏ7ÁíÅ®Æ÷.Þ_ñ)¤ô÷É{£×nendstream
+x•TMoÓ@¼çW¼c*QÇqÓ$[ˆ T_*UBÏös¼°fwÝϬWmá‚"G–wß›y3³ûk±¦¿5í
+ºÚRm·åbõá-9•-V¶»=• åYžãK½üdCd­9*g‰mCïœmÕaðã—‹òª7´^OÕ—Å>+P¿,;!á $D:ò‰¢#5u¢£²•B#¨:Ñ”=PÄöžëŸ|@Ô{÷¨Á›V&žAÖWH?T«À¦â÷½VlkY½d´¤Fy©£ó'ÿ“<YaŸhÑ]*%£¼w>#0ÏHœ9P°Ü‡ÎÅ@®M½sºœáé©G@ßZˆj×È(dትnN$}RaÛAküÙ:‰ËZÅe(Q‚FS%^ø<öG-dœ
+\GRœä}±·UZBFtÎg
+wÊLÃbœ…¿¦‚98/„& …\&_‘ݤôsÕ½h,yCaÀˆp5I8íÓÈ[ ;kiþ Zàà°î;FÅØfôé}¹Ày§ë"Çòf¿Ã{øít=ìŸÎî„ÿº6»M¶Çµ‚l·‰°¾-þ
endobj
677 0 obj
-1683
+608
endobj
-678 0 obj<</Type/Page/Parent 497 0 R/Contents 679 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+678 0 obj<</Type/Page/Parent 476 0 R/Contents 679 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>>>endobj
679 0 obj<</Length 680 0 R/Filter/FlateDecode>>stream
-x…XMsÛ6½ûWìøäÎ8´­¸¶“›ã439Øu+eÒ["A‰1 0
-Ê4ãñX&‰ý|ûöQßO®è?Wt;£·7Tv''ŸÞÑÕ5-jܹ¹Ã‡Š.‹ËËKZ”gïŠëbVГê4͵{mJüÝ4¡\ÿ²ø†“×tuO¾™ÝâäÙb­ôô9YGOóù95žÕZ…Ái
-kø
-õN{mðÙP§Ì–¾<}þ‹l¯
-Y‘ßú ;_Ðç@ªmíƳûKzsõ¶˜±Ûø
-€§§ÅX®Á³ÿÇùŸÏDhz œž}m*dŽ¾o&‰©²´FK›¡“y²f,ë8=_Ä`D­C±$µ¶Y:å¶Ñæ`.•Ù™ááÕÒÚ8I1w#"*×H„Ü` ÎÒ;ÃÅðZvl t
-ÝN½0Tßy 6 ´²¸ÛZû2ô2fô@c[ø*Ãêçň÷ñðHÂ*·f³nÀ‘àËr-@Õ1&ù°í5ˆð¸o)V]KUFÚ4œö
-•¨N­ h˜WAHù)Ž)i—e¦ú‚˜¬\Øfƒö½.™cð “nn6À*Á,ËZanáL<€ÑVLê”Z¥éÃi¬ë*í°Uøˆ¦ýÿxnüûXÌ_'k/QS<üÌÊÔœ–Áa鱯Fœ e²Ï}C7MÛ&^n­BœÔÙj
-l(Oã¨:Òº ˜€;
-wÈ“ÝÛ)¼˜°áòNÞÝ´œjiq?¥ñ
-«HÞC¢à…–Z”€i¤ÒxõÃ貨…²›(Q#üD\±y˜¾å‹
+x¥UMo1½çW̱HdIÒ( Ü(R¥R *.Þµw×°¶$äßóÆ›¤! ©jÚF»ã™7ï½ÿMi‚Ÿ)-gt½ ÊŒn6£ï_ÒlB›oËm$MŠÉOª«;mtQ;žm¾#tNÓé:ž­Š‚¯´-µ•ÔŠ@‚l2¥òäjêÏ’¶¤c *y¯l$òªS"(I[å²Ó®ÕUK;E­ëEGo*g­SL^1€ §×CÙCŠðj
+†:NùJ 
+C1´Jj—`ŒG<Ž2³o°G9ÑálåàANÆ.ŸXÜ9Z S
+" ¾­Z
+z
endobj
680 0 obj
-1862
+830
endobj
-681 0 obj<</Type/Page/Parent 497 0 R/Contents 682 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>>>endobj
+681 0 obj<</Type/Page/Parent 476 0 R/Contents 682 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
682 0 obj<</Length 683 0 R/Filter/FlateDecode>>stream
-xWïo9ýÞ¿b¾]*•4 iÚÞ·BTé8âNª„œµ7kêµ{7!ÿ=olo³]8tBHµçÇ›7oÆ_Oæ4ß9].èùŠŠúäÅúäüÕ’æsZ—ø²ºº¤µ¤Ùt6›Ñº˜8/•ŸÒºÒ´m•/E¡¨*RÛ-‘ «ö$º¶R¶Õ…hµ³”ßi-§OÚn´•´Sþ@J„à c¨­D‹«J¢ÖÑF®¿œÌèÙüùt &ÒYEðÏÁ8ñ÷óW?;iDýyŸLOƒKûL&T;ÙEl pV’}Œ,œ½9ªè¼nçc !³[ø!Ø°­w†Jm:²âÓƒ`½2j'lÛ'x¼¢®‘¢M®‘±Û¬§0í´ >ú Ttøîæ/’®èjà™ÐŒ0ÖÎÿ
-Q¡Oæ´Ífàññr!Lé®eúåúþè‹ÛphàZ¡%¤vçPµ| Œ½Rì "Vw@µˆx6šèmK½í<R
-9s†S)KÍ R*¢:„P¨©–¶Ê*A¶ÆEÂGÈp“e*纔\; -;4@"R»wþ- ö¥f ãNÏWû>ŽjzÂ{ –BQ)x`è%aô±Ýð ¾vÊÂQ
-]¤!z{s`!”®ÚŽ—çŒA¥§”ôø¨ªÝR§‰àUÛy ‡lLлۗQ
-~ÃO=s…qàÐ^·Nõ|æø„ Ž;3†Î–“ò>ÞîóGµ…Ìó˜JN‡-±Ç\PÜXÂ&99ýiVL{ǸŽâ‘Q†uøÀòÀJ®¾5<‹Ñõ bò ;è1†‘k‹ùQ¸"‰ƒb‹B°ü°pŒª–”‹Ý‡Â@Ø~r8 ¦dÁB©¨Æb‚ ‰Ù–”“‹'u(ö-ăà0~Ñ|¼>
-Är½ÃÚ…/ÉE¿î `ÓakõFœGaè±–·gБ×yÌ ÔaѾJµöÞÅÕVA2ƒÈ1P°¢ •‹z<¢lØEƒH2ÍS¬¹Âó¤ë<€Mm*do—/—à(; -sVìžÄÚ“zì6¾ °ÄÈ=ηXlyŒ 6êp„bby098Úts
-ë*i¾ºœÎñ̽æµ+Ò–Þy÷2J·Ã'ßz–?»\à-,'ÿó´¼\âqo¬ælRü÷Éw=
-ü¡endstream
+xuRËNÃ0¼ç+æX¤’ÚôH¨
+ÁÕµ·‰!±‹ ü=›„„,Ë+{wgfÇïIŽŒWŽyódŸ\ÕÉÙÍE†zË/³y…Z!K³Œoädiì¢×֜ԯœY"Ï™§E•œ;©[ ÍFÿéõS„ÖÙØ´|¢'Øí!\‰žðHn¯%ƒ²bÝŦ›Žp¹À-E`DÜY;òS£Fø §ùùTìvÎîœÝi鬷ۀ‡õRtG+öŽì@Š) XpÅ^+‚'Ñs[h¨qG0¦øÛç™ÅØÁcUÿÁU¶ÚŒšœSÀÓêöå[xŠqŽ|ì´ç×Æ‘|£¢<HâÚq&BõÚhFlæ i}‡ä¢1Ú4\Øëú+ú€Ä³`Z0ëÞÒ‘ßu°a¸X,Òe5ç¸àíÛ£¿Õklê¿î–ó2­ø°§³ê»ï}òÚø­¶endstream
endobj
683 0 obj
-1748
+360
endobj
-684 0 obj<</Type/Page/Parent 497 0 R/Contents 685 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>>>endobj
+684 0 obj<</Type/Page/Parent 476 0 R/Contents 685 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 11 0 R/F9 12 0 R>>>>>>endobj
685 0 obj<</Length 686 0 R/Filter/FlateDecode>>stream
-x}UMoÛ8¼ûW¼cˆUÛqíø˜¤ À&È6.º‡^h’’ÙH¤Ê»þ÷;’œ¬ë.âȆ$òÍ›™7ü1šÒSZÎèjA²Ý®Gîç4Òºä[‹ë%­MŠÉdBkyñÕرŠL ™¼×6Ör±¦›ZSé<QÜjúËØô“\«½ˆÆV!êæ’D·.U[j¢#‡×ýÛ›¬¿&4ž^3T¿èÖ^“Ô>
-Ã[‚A½‚îQ0$ùn¿ Ph‘_í5yý#,gXwT›ÀË|#
-_éxRô6ÃD•–1çUO¢Ñô¢ýÎH|ïM
-â*îe/åxY\ÓÕªX0Ÿßf‹eÿ|š?ÎpÅó5HjDÛC`Ž ºr{
-Úc§Ê»ÔvÒ­-m´ï<XЗ=€/R¦,Lu„ñÄ–n‡}­÷¾+o¿Üw24L¦óDiàdoÙm,FÌêX˜»éääpÞ§6/*¢w­Îr?[óÿã~Ðæî8U@?´šo²{H9Ý1Å+‹„”.Ùx Ú;ÿb‡“E¨]Åü›æT
-7w‘fµÔ!pv”ÉfÚDmâ2œ8›ÕkxF»ºZWû,w7Gîþ\ºôñjŠëüz‰ë ÿ„² éMa¨ñ=_-sN¾¥ôªXt第S€²] £^fêyÌ †hŽ[Ì’™áCé!!ÿ“u}Ø]þ>éú CÒ[u ÆÛ»Ö]éÑHï‚+#}~¾#ÎŒ@[ðËís °*n ò“CÇF]ñ©W# Þöy3êI]å²}® O©›ü®q_>$GÄÈYðZ¥¬2gs"’Ù`fP8áÁO6;QPc~êÓ¦sÆð"A­†ýkÁøz‘çÓ‚÷œÈ×}|OË‚OiœÁïã—›ÇÛzöî»–‘>9™7™Þ}Ü­wË.Θb¾œ£0oz±˜õ€þý 6+’Uendstream
+x•±
+Â0
+]KZ1bmþ¾©ÎrÛÝq{ħXq¨‘”’$u”B^BÂsكƔG-ªk÷ðÃãØ6gì‡iÔÎikPjïЙ§ÆôöåÐÊ¥¼Š(ÍÂÆb£Ôà*küdïØiçÝ\Hjƾ¸ˆ¯?Ýÿ0ø5åY,‹@çÅÌÚJr o¤AFxendstream
endobj
686 0 obj
-1010
+162
endobj
-687 0 obj<</Type/Page/Parent 497 0 R/Contents 688 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R/Fc 12 0 R>>>>/Annots 240 0 R>>endobj
+687 0 obj<</Type/Page/Parent 476 0 R/Contents 688 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 264 0 R>>endobj
688 0 obj<</Length 689 0 R/Filter/FlateDecode>>stream
-x¥W]oâF}ϯ¸â%‰6ÈJ«*‰’.j¾v¡ÝVâelà=ã‡å¥¿½çŽmHP»«¶‰DbÏ×sÏ=çòõh@}ühÑðœ’âèj~t3?ê“ í?Ì
-˜ ‚ˆF“1þ‚IK^Al³ûÀôðö‚¢>Í—Øý|<¡yêÇñ&9¹^‹ÒICƒ~@³ˆ®óL*G?ÏOç_Žxí`T¯í ùÈyz‚Ƀ€n/?ZžÒ§Þ{5¯1ðAo(Š¦”hµÌVB{œ…}¦¤k­”LiC¯ÞŽHXÍvƒó€£<Iê`–˜:E,~âqH{ÅßóÓÏGÑÙE0 ³q4
-'ø[?å4cTÂÛ õ=ÎÆÃ7\R¡b¢‹2—N’PvHœ&·Î,}­¤u™VþN±$ZêJ¥„>ÜÒ>À}BkçÊwa˜£ó`“)T/"Pyøg.eµ -_&Ü
-X¢‚2c¹ R¯Wo m2·öc±°’t)p<ìÖ:Y0ŹPÏípF~+s‘)d(S~1S¿Ég‹\!T%ò€¦Ëº0hÍ%)Ò-ÅR*¬õÁÉ´Kqåꬣ¶6Y;›a¿?耨Í3GÖàߥ
-ãçvf2GFjnFÚÍ"ám‚ïÌê«Î¤«Êfç©4‡ô¼LÓÅïfè(í(•61Y „ÚSj<<Q¿TÈB,ŒÌ·í¨VHÒáURTxŒhÐÌ ãˆîŸæ³àæ÷›.A@’gÎÐã/¯: F–î.Ÿfd=•çv¸,X¯p{¸™{:>þvóiGG DÇOF;èÜDsÖ Ž³ ¿‚¼¼p­j:¾®Œa}m#ðcUÌί휽»H‚­V’TUÄÒÔ¡g*iëÌÑÒè…‹³ Ä3{ Û)qT³{+` “ßk,YiP`‹ QhrP 8†r ý½b­!¯‰ºdøY™H¤)A ”($¸ ÉÁ #­Å“ö‡ØÃÖÇYâ9ˆÎƒ_{—Y×é²IØR&Ù[}ž>ÌšøX
-¸×Ê^99첺bð“¿ôýðš¹|‘9{œ?oÄ÷µI— eEðDÄ ‹¯®Úê(º`ɪ­ž ®uú×ÞsðÚÙ½IG?rã!€ärl\yqÚm\V߇†HA bãÊQð̓°·ä×æÚ‹ÆlV
-7QÒš’ßØ÷
-Ld>¸Å Ï.XP4‹È?5Ö¾ïuZîcÂø
-…ÍéÑx„Ö¢>‘[ „ûOç·ÖÝyÔÓîñüm<ù½–áãÝ{u;“öýM¦0Zx`¦®á$ ok"\0u²PôÐÖB h³k™ç]’)XÎUºä–b±
-@4¡J3ëëc_{-÷O<£ÐÞçMùŽ‡ü5ÅYy«`“]WÎÝæ>æ}/¡*›õ|Ø óñè/‘ëÑëendstream
+xTÁŽÚ0½ç+Þ‘J»! °×J¥Ú R»´Ý«“LÀ•cSÛaËßwì
+ Ù{æ½7oü+É‘ñ/GU`±BÓ'wÉ|ó€"îãȪZc×"K³Œ¿4³ï’^¤ÞCèÍAè}Ø|Û>>ãH¶—ÎI£ÇŸ?ì~&î‹’Ìü°ÝŽšÁJF+…2{Í7%ò|¬w_¬Ó"\ØÒ ¤F¸÷$úZ H³´„%E¤‹!QK²uÆâ‡Ô­yqu%I{>c …£ÒB /Oô
+Á‘÷Œ3b` ùb¬<"Cm~‡ë81ãH·7­ìαì [²êü7îé•öŠÑƇúÂóƒ¾æe#,uƒ‚63hL´†%$Ä7¥L÷Qäƒqþ¢g°ƒÖƒÑwá¥ò•‡óR)˜šÎ\–WAÊN*štŠ3(
+J2<qÉ ÑöRKç­ð¬j#4+æ#­O»$!ºyX}ýœU–VX–Ët…ÅC•æ—ÂS°SÆÛ§6zÔoºÜ$jÃÍ [êÄ <NB „ }…=y²<Ê´TE±H—“ÂÓ=GW7WXo™Ø=æ›ââÃ+§÷°¡Y§FÁ Ç£±>
+~K¥‰i®vžá j"=Î
+µè¸ÅáÚ|ÃS=?»Ù¯ÊÑxä5ûãí­™·ÃûSwpì×^hy{Ýè Þt.ÃÔ V3ŽÕ<„£Ò“æbYÜ«r]¥Y98t㣰¾ )¿ÿ÷$Äöþë(«2]ó“ÃCSe-÷øKòë÷[sendstream
endobj
689 0 obj
-1596
+592
endobj
-690 0 obj<</Type/Page/Parent 497 0 R/Contents 691 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F2 5 0 R/F4 7 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 243 0 R>>endobj
+690 0 obj<</Type/Page/Parent 476 0 R/Contents 691 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
691 0 obj<</Length 692 0 R/Filter/FlateDecode>>stream
-x­VaoÛ6ýî_qÈ'phËqì4H3$­³ºÈÒ, ë0Ðm±£DU¤âùË~ûÞQrb;ë·!ˆ![äÝ»wïù½Ñ
-ú<ïék—_>©Êi[|}CXAµS)IGòMü­3 ãh,Ρ›­
-ÿÿÚ¿Q5ù‡~ûÈ17¶¦Ô’¤»iL_fÓG²Çc tt£ ƒIé¾Ò…'zÒƒr¶®Eו];Uõ¨°4—ùB¾28r™]S]
-N>;\l¨˜"~zø¹žˆ ‡c1 D ¹ùfhΔ¨
-E o”غÕXÑ´½¬ì¨ÜõÈÕ( ½-+ÅÔêbEÆâ[*dÞŠã »]|S‰Gdˆ)­äjª?ÜÖG[ýU‰þÍ3…"ÈÛÐîÝŠÀdÓ8:={‹æŒÎ&hÕÿº<õééøµ¨G‚>BØŒVʣȌ¤•)ø}]+SZWFK¨/ȼ‘®û‘votå|’Jaðç2®4‘Æ Ðßïfwñ‡‡/ ,éÙ!œÁ¤ÇXžJ‹F¾·å†Õßæk1©®1!ÖÜY1èeÅôêÏÐGyí<9ß
-©RV€…ÞÙ௠”B3½5—­ôJÒ@@Îx«ìVXI
-ú<œÁ-Øiœ]!*š :D
-|ñât^%iÊc(d|éáó€d¶ñL-yŠ­3ÙŒØÏ¡ê·[Uï0·7XO†œÿ5XÏZEã‰à›.
-;7†ùÕ/×W8”-Oyú`“:ÇA/=® 
+xTMoÚ@¼ó+æH%pÍG=Ò¨QOiªPõ¼Ø¼½ëì®Cù÷õ’DõR!!°wßÌ›7óžG3äüÌ°šcqƒ¢}ÙŽ>Þ}Æ<ÇvÏ77«5¶%ò,Ïù¤³G‹-Gìu-ðRtN‡¬Â£jv
+¾RN>l³Ò³Yª4¯³9kïœm  î·Xf9ŠZ‹ xmµLù·xÂQ‡
+¡8}¨ÐØÎ v]„‰Hæ”à­C©Áºô;^0AÊH"Çt¶HÐ¥Ó/‚ZB^ýy‹V…*ïJL؈éÐÚÖO»vÉ‘MDŒdRK7ç–Æζâ‚ÙëlˆtTèoí,Y7°{¼d^ÛJ{ìðèÚþ˜±®Quj²}b³ª¶`gÿL¢I©$û<˳%/³ÖQ×5*Åf GÔ¼h±ö
endobj
692 0 obj
-1117
+686
endobj
-693 0 obj<</Type/Page/Parent 497 0 R/Contents 694 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 250 0 R>>endobj
+693 0 obj<</Type/Page/Parent 476 0 R/Contents 694 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
694 0 obj<</Length 695 0 R/Filter/FlateDecode>>stream
-xWQoÛ6~ϯ8ä¥)P˶ìØNž¶uK[ h·Æm0 /4EÙ¬%R#)kþ÷ûŽ’ÅéТhmYGÞÝwßwwýçbJü™Ò2¥Ù‚dyñÛúb|wCé„Ö9Þ,–+Zg4I&ü"¯^ïD”£é4¡·ÖéW)•÷t/Ê ok'I›©—ëo¥sœ¿:hA¯¿Üóo|û?òí£Ù4Iù=®Ã…ïLp6«eÐÖ´¦s8êLÓ%¶n´§LTa+•‘6$ á«!eÚYS*¢ß;ç©öŠýÓ׫×ÖÈÚ9XÐå<<i³¥û£ªüú’‚íâžÎÚÈ.åNɽ6—8+
-oiolžèRÚ²ÔáÇŒj†¹Ãy ô…§ƒpÚÖ>zß8ap'‰€7ŠD„)
-<²!£=¸JZÀ_Æã,[m2}ÐY-
-Ê!&Ïý„•6¨!Cµ; k÷ÌêÖä ¹ƒÁw¬6[¶]†ÛˆþùýÙA¥Oyss~ß2† 0T®À½\ù
-BƒæëÛ Îƒí ·X$ šMoðoI)S¿{: }–Nðr(Ïè’œ×çOïéö§u+·z´Ñ†•ÛU÷Iëêv6¹IV?Ðmº|TT-t;à<ýˆDÌv2qFCÍ1“‘±®DÍqÉB·#rh«`S¨¬åÍšbú8[eÕð+tð3e–vßçΕq Ø:P³³h]hÁ)xªÞ+Uñ5%Õø´” p£nC>óÀ õ|§“¦Ê©\aÖeTª°³7ƒN:ip¿§YŠNþè[í^HáY½ÆØ3j;KÓdFÓ›kpŠ‡ÈŸíÓ‰[ÓþqÈ­5òÀà,¬Èbp’‚Ž~PœWTY1ˆ]ï¶WÛÏ°²išDQO™@†ãÕiôôL¼Jbžlµ?³“Ó‹·¶aä·*Fø:4ûvt
-^u»sxýƒ™Y
+xVÁnã6¼û+rÒYÕöº±Û[6ð)Š,ºQ·=äBI”͆"U’Ž«¿ï<Rrlí(rqlò½y3óFúg¶ 9þ´^Ò‡ªÚÙÇböçŸh9§¢Á/7ë 5ÍóùßTÙW%Êì¨QZ’=éü^uqkE‹Eºõ~¹É—¸—ÝiU=óyk(ì%¥ƒ?³«Ïc…«Ë•‡p‰J‡ëž ª•ÐvG¥ý—‚Ôšëöö@ǽe(>vØ©i"¼œ
+tL ¹úœÞ/>$XF´’ŽJk*1E/6Öµôó%@\YÞä+žäêqûåëöËÓÓÁKGOÙoݹÎÓ» ö³K^ŽC§BÓyU‚ÿ ÃÇûϱ2#‹ÐE[
+Bßé®OåÏÅ"Ô8ëXé‡û¿(~ Ò&¤œ(dm¯I˜zÚêbê7zÖÊWNu2,©Zš šž?³  Z÷ÔØz©è ¦_¶w £QR×£Nq„Nx´®¦ZQ
+rŠf{ÃiwÚúQ‰Ñ§'“KN¶ˆÃ:$›å”Ñ
+‚à8ay—ºÁ:U¯AÁÎ&P!cuZô—1PÙ_*“¬%@ðè/å£êàüŸ!;v>2hÍç
+B[üF•0<B…8ëÉÖbvœž A‘|W=㬣¹¡MÊDžV¤QqPPçÔ‹Ò‚í¤A¡\φ¾ž -^Ζœ±ÈÀI‚›Ñ:ÎÚo|Æ»•Ó­çÉÎ’½*#žgGQ‚l»hËA°oh£xÌàÀmÚè^uFïÈo\«“S°¸ÏÐ4ì)[”ÉT­üŽ-!"h¢^ÑûP½åx
+{\e§%cz%GŠ!ï¸ßmÝÂ+ˆ% bR„%™ŒXYcdX)&i€¹Ìçx¤æõcúù÷·¬µ÷œG¥EoÿUBcŠOœhZúÞƒ}²1½ÏLÇQ$µHE†ÏãÔ€¢†$œ0-'£
endobj
695 0 obj
-1480
+996
endobj
-696 0 obj<</Type/Page/Parent 497 0 R/Contents 697 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F1 4 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F8 10 0 R>>>>>>endobj
+696 0 obj<</Type/Page/Parent 476 0 R/Contents 697 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
697 0 obj<</Length 698 0 R/Filter/FlateDecode>>stream
-xTMsÚ0½ó+ÞôDvlCMÊ©äkré$m<Í%3!ËØ©-9’ ÿïJ
-´‡,­ßîûXŒR$ôK1Ë0ÉÁ»Ñu1º¼Ÿ"MQTî(¿š¡(‘ÄI’ àã—ZH4Ìü2ت•Ò`è™1¥KØm/pQ¼JºCóµ '{ÜqìKDYO üc°µ
-¨¥£@í—[ fO%¨“í‹ô©\c8oJQò D’uÔ ´ ‰ ª3–Ú¡Òì¨Ô@X*ØŽO·}¢4­hÂʳõ®a#–0 \H”<ë£ÅÇà\ I§@ïÄžŒT×¢Ìwhf/6WCK2”JŠS9*Õ¶jãÄÙåò<ˆÇ‚ÿ#çÅ·ëÅ[ö–ý+•G¡tëFÊh¿jæÜVè„&}š Ý.|>o¼frEvDÑsÿ‹
+xWMsÛ6½ûWìð"eFQ$YµÜ^:‰kw<“8i¬&=ø‘ ‰†"X
+ž¯táŒÎ£1,Üý
+Ø"Qi
+ÞÎ×Æxù°ähDI;#«évW‰ä’#
+.n-PPF¡ç¤©LÛÁ=ѵ_ªŒu>Êëí¤‹Ö´ÜúrƒÏ+üátÚ*ÝrDj}¾˜_ ´î†}ö¤hXPîÉ¿áeÍ:(‡
+ÐLÀ“‘’d.÷€žPÈ·Wï † 2°3™Ñ¤Æ×äiB;ålkÌÛÀ±ÔMä:DÎF{e™{Eô„¼{ÏúzÛ>†Ç\ïDÎf<\/²¸%ñ°ÓZ=Ïuä9{Î*WÖqg\7g È¡@>º^´Š3Ç8z=4°5àšPþ0òi¯'ÛA8%cX±g¯ä:ÿ¾ø›ÌL[è o£&§~ÚÈ{T®Aä=©#U}L>ïqo¿e:‡p´³…É¢$º˜8¦ ”|‹õ~ü žBg¬R#hÛO
+9:EQœ‰âñTµPÂÑÑ(…<ño½Ši/V#7Ì„XÙÊÏ F¡ËÊů42UO¡£ø †“<(ºG9°iÐÛ8–Öžèk³
+OɇW>"#y࢙ƒMn^å€Ý(ù~µm&¾·;ÄiGO¢ƒ@2÷ýê‡ WÃDœi d 8±®ŒÅÌÒè 䈣¹ÖßPt|ô·4zFM£¨øY¿Èsú Yf¤*·aÅ寱âÕÈ09€4‡Ð.Ð~vôgßjñß³o¹Ͼ_Ž{ý§n5må¬7
+pµßm Çm·†£GLÕ†-2jÚ8,—ƒçÖ¬Ï_OØJYwÈ%§ß/æ„g1V
endobj
698 0 obj
-642
+1610
endobj
-699 0 obj<</Type/Page/Parent 497 0 R/Contents 700 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 296 0 R>>endobj
+699 0 obj<</Type/Page/Parent 476 0 R/Contents 700 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F8 11 0 R>>>>>>endobj
700 0 obj<</Length 701 0 R/Filter/FlateDecode>>stream
-xÍœ[s¹…ßý+æ-›ª„æp8¼ä%åK6ë*_6+m9¯45²ó¢”7ûïsh
-u„ËátÎí`2ý¨s•ˆââÉ«§O¤»¬Kzù»Ñü¯UËéfb•]?ZÀ*û^Z?\¨U>þ~ª6ˆ1Cá…1ÃvDVTÄÉŠ˜¤lO¸8·©£¥h] ±b&èmOÿ)éI‚>l§þaô¾ü4¬Š
-Œn<šÚJ$¬‡œo†T Vá¯Á’
-xÆnµÏ RGw“°žq»z?4™>¤9‹µ†…ñ<ˆ.Ô°Äœ&n²WkG“│9©>v=ë£9U„Úœ”ûž ʬêàÌIõÒgèF(ÒžÞm¶W›ýûÜ•¤DWNg☓ÐÄ&E*0 ZÃОñt³_7Ñ"`‚Ó‡s0É"¬=Œ—¨Cr4á‚ì¡•Ñfí¡sö úØw¬öPj{PBì<&DfE˜8{P};^È$Àˆ¬
-ŒÙBLÁ0"¶blv·‡ãyµ§ «hŨzÿ@€7³Šs‚Ç–É£¡ö6_©9kê—3¸Eµ¦xQ¬©_ŠÏ´Ö4µÖ”ô¡ç>XSM¨¬)Bׂ2}:kMIßNÆð
- HxvVç2Õ]ˆù¹·”öö-¤£—øÏÔ$a=ã´{—}©û´ËŠ¡<c}Ø_oÞßWçÍ!O~¬­›ÃÄMRO»Þl‡Q°Íùמü&?õÁ!'C dˆ ïÔzg†ªŽ&Ãêh†N_¡ê£Å°^‰öïO ªºÅ@Gdz\VnB^Òˆùub~LHP‹øõp—W.,b6•q`Jµˆh7ÙüHÈ¢…'³-`!b.A"‰Þ§bs¦ZÀ"~Ùœo‚E@L§¾(
-pq^Ï›‘†ƒE †
-€é •5’P,©b0ZÀƒ®‡]òB,G&1ž…(×C6ûá|5Ç*¶
-xÄꔬ“E@LZ¯Ü6©@…ÈÒ€†‡%hO¸Z »Ã>L³²3ôuV.Ö’±ò/ë“pA–Üa·Ãø$D-Ù†âªú8²^o{Û1‰0d3­g‚Þö„Y6<’ÀîÆsqÍ Ðûpyü5õ‹€@¾fD*àÛÍÉLÒ¤”ñB3ÃўÓ4©ÀXˆغôWU—œnVÇ!/ËÄxgâŸME”ë+²ú¸ÚlÃ9::Ö‚4•CJ<‰I$ž ŽŠ+“¨ÁÑ7Ë
-Ø*¬·Ç ³þbj"—pamv,õK6.Èf±®´µÄ9 ³ZÕGc}´ÚŠPÛ­¢™1A™¾ g¹ªW+c€"= ¶Ý„ˆöňDõŒOZoB-äT¯7(¥{” ‡I&ööÙ D xÈ*™kÄ~Ã4f
-õ„ço.þ ,¤ïdþaH*à!o¯ß¾/Ò‚Þp-’Àe³_þ«`H¸kºIõD‰|æõeÆ°˜™œ$šgJ<¦y»ÙO>)ÁY†°’Ûh€=åÍÅãIaJN×ÃúÙ0´€§ ç5Æpê&ƒE|cR1ÎæÞéÐ8‰)L&¬xÅ#Ç‹â$¦K¬i\dˆ¶TÇYÑ °›£† ·=âíÍ*Çñ$Ú5ðÎSKÐÛžðâ:Õ€$Ræ ÷=àò;/%˜"(Xæ¸j$°Ç<?ì—…u  êž¢`Oy{8~øs˜dì+Nõt1õäLá•åL <ã&^-Ì%ºâ ¹ã$²XCQáùÃÑaÌ–`zÆóÍêýþp2ar•ª"Û°®. íQ?ÈÙ…#ç©dÏ<Pþ‚kVÛ¢¨¾¬»b‹† jQdaøuZ”¶B‹*b¹ÀPœ2B´B\¬·y+™4謒ѰLÐû¾/ž‡FDù{ý‡{à‡º´ Û#—)7l¸ †íïiÖr~;CmÛ!$›2AÚ՞ݬ‘’
-- ÒZFÂÚŠp,J°ê ZÀ`äçÃú°M…À,¥+Íäórø8l5 =ìP±ÝÖËi|„ êFBøã£ÆŽT„DsxvfHGVŒ›½Y™Nº²•iŒ) ì+cb;’2o!ZÀC~~ýâï¹/I&&!k ÑRRØXDñæa”ê%Æ$Ę²od ZÀž…ENz²c &𘟉YâÄà!¦Â™™ýpè"¡àuÃÙâDòðªÙ¯œŸF[TD‹”;D"Ì[¬/ë˜ú¤!+ë[ÍY÷ºpÛ8mK¡A¸ ÆAwÝ”SºØ8Šhñ/¬’Ò8ãÕêö–ã’É“å“$®¯ËÏØ Ú¯v1óhº€ì›5óœí­Ãì›cƒxQš´[Êá]eoe[64iB ûdåŠð­o0ÿäãnÒ 9ÃúÂô¾¯Ò}«5%ü²4öËÌV%ð¤‹!f(c…ô ÃŒÔ%’ÝÍå@S¢ã…6''@wp¡vZº/:±Bʲa…èRÂ>’ Aql†¾ 5ÓÊè}_‹Hú~Ä™ %ü‘(즇TT¢{Ö«‹äÈYÄ\–›¦6(€_x
-xÈÅj÷n¼µ¬|¿°Yç€ ¥œ®Ú…‹lŠ”ÝáE
-Üó8%î#…Œó^F¨Ñk_…Û»cn–a`aãŸC¹ò36Ù¿ÜìïÊV;‰‚­ºÆýžç³ØÆ Ù×üÂ#4Ù¤µÀNί5e¤ dH³Ó¸X`¡! ŠÐèˆÛÆ ô¾‡<Æ^áã›Ã)N ˜P¾Ú£¦GþmÿÚÂ9KXªKNM.¨ä…&z›Hš§ Ñøøª—¥L˜ñ¾C„ÆÁYéaû1ç`Ûö+ÙÂoj˜¥qñèn‰6âC„ j—±BÚ…ö0Bc*¡Åò
-†Ã…zH6œÜ2Ø”üâ3Ùoj*lšGŽ€s*V¼(Í3A†ˆŸ÷÷gß?ZœÓM‘ò,9w½ï!¡yö§‚…õMn¢ùüO;f»™ÌéÍ…xA ƒÕ¹ŸòŠÕ„?éÃìdôñvE¨¦¼D9Fü$õÑ*Dh…ÃÑMyE+Sžlvà8WòOSòwX
-Te6ˆ­„vŒã<„ìÂ3QAlc’ Ï/ÌåVjηf
-9Ì­É™”Ä·€„ j[¸€À-9;W’º¤çâŠñüu¶Rh³( yÆ+­ƒÞ÷µxy8|¸ /Åuÿ'‹wר88 GÌ¿NÂ5j8qô΃öØ‹Ùr:iÑž+ÆÛ¥UIkÅ~œ/WBïû„]jUÙ]þv£?›kk’8&cJïÔª¢~ Z 5Æ|ª‘œÑëmOào.Hô—*W"† LOxwÄö oU†5Læ`R…# ÕÒ'Ihº¾Û#Óð°Ï[„-ie† Á˜!iO2/°¢1Â7†b=ã¦|Œ‚UJ¾‚a¤žQŽóX©]5R¸n·‡œþÌB`Ð#{ü4©€Ç s_>)¢«ƒã_%{ 5,«žbîFÀdª¢XÏhðH²/Iõaµdk…h€Y©€gyÛc)vÿql‡èЀ”íAwlÁ¬%¤y
-
-
-r¼(ƒ¼]ø™¾¸Í0†“z.éF­·­¾,LH ¼œF¹Þ·r·(a ˆp±‡' nåZÊiXß7çlÇ,Éiø,Á(Ùb·Ö?NÆ¥¸NKÑ–ÂFL°
-vMš –À¾4 „
-S൘ $
-XN¬69–‚ðÏU&°ëC>Œd XœºM,á4 »ípÊ®Ÿ…2e~7Íš
-X BâÉY|)»ÞŸÚ.lMöJ ÛÏÑw¼ N´l0ƒý]!&BX·Bfâq3p˜Z4 áeACÐû>?´ŒlÖ€€S4zx¤4*ñ®`]?¶I
-ÒË:GѾ"¯/Ó“°œÇÉß•¶MQªGÐn‰€Àa<ŒAh
-±Ïµ †ü·Gh
-q‡suä­í§ #TòŠLÒ_ð8zŸE>ÐòƒÍÖ¤tH
-E^ßÄ ²ÞjÄ–‡¬L¿ŽOøK<[À)!ZoÅxµúÍ—Dè°0ç„Þ÷Ù²Æñ° p@` (€ŠyF9ô"…žl–Y½ð„Ý°{WR)X(Æ'¹Ú£dÁ·Ú4¶bÈãƒæM<‚>ÔD"\ا°-à¯ò¢“E2äàÆ Rp>•à`è¹vE€=¥x–`>À³øŠ(Ó#|ÈÀR€¦B™'B{jruØ­6ñ My×㿃n¬áçeo.h¬!)Éî5ÉXsû4QÓ@ì¶cDlä™~Ð$8–„6Æ TÀWÇŽ9Ò‚èÑS´€§³&øp¦iS-P!Š³&, Ǭs‡Ðâ~gM
-ßÇ“D
-›¨úŒJtÏúñÉ«<³
- œ÷b¤†ð
-ÏY…áR5-C±žq…÷§›wwçräÆj¹r hX©€g’ž‰U` ©.?
-àž°F”vÄÌò‚’•˜B–²å(Ú“| Ÿ7Ìçˆ,± f®P*àA+ãŽd€…Ó£Ïð#­9-ÇÆeN ?gÃGE—[‘…ùßîYó[þŠÁšz)¬y¿:Þôr3/xÙ:g@¼ë´¦& ôHþ™½Þö
-»L§ß]È̼"ù||¤y~XßíñG: ošôÍç!_ô»ü
-_ÇÿÛ£Ç)endstream
+xMAkÃ0 …ïþï˜ê9™‰smÙzlÔìîÚÊêÒÄã.ôßO!= !轧O?¢†âªa¼´ðƒØYñ¼×¨kØž7mg`”TJÁújHPN®Àa¤}¼à3¹BÇ;n8:¤‘EqÂtr™0§Û% “§øKòɞś‰Ö´²î Ï 7kû• {Ô­‘ ÿGqؾï¶øÈéL¾à5ùÛ@cq%¦qI߬®Íj«¾"Íqü^YSFˆŒRR¾ãJyˆÓĶiñi£eÇOÛPýÀü•¢Qçendstream
endobj
701 0 obj
-5352
+218
endobj
-702 0 obj<</Type/Page/Parent 497 0 R/Contents 703 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 340 0 R>>endobj
+702 0 obj<</Type/Page/Parent 476 0 R/Contents 703 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
703 0 obj<</Length 704 0 R/Filter/FlateDecode>>stream
-xÍœooÇ‘ÆßëS ‚ÃÁy‘õÎÌÎþ9àp%;Q`ÉŠÅœ‡ÃŠ\‘›p¹ÌîÒ’¿}žª®î~ª†v,Y”c6‡ÝϽÝÕÕÕÕ=ûGm3Å¿m³èš~Þœï}qöèó¯VM7mÎÞ4í°š´Í|1kÎ.šéd:ÅoÏ?;[¿¾Þ4û7Í“ýÍiss:þöìo¾<{$´VÓÊOßþþQ?ŸL›ùl…ÿîšy?ìáºy%(—Íç_Íš¶•?ÖÌü9ú»³I‹ûk„Û5ËÕ¤óìT/ö§¶¶›M–øÜgŸMþþéúړͼë&stÛ¬¬ìÁºíó¯ë$tn×£÷Ò“«õíisÈÝDò]3t‘eÅ2”n& º¹Ÿ,|[¬8êÿüâÙ_r H´kÚ~9™y„•GÄËÍa·=·û› b-H°MØ“ö’uL®Q_lOÇ! KØ`€X…Yß\©vM×Íc¯
-$Xü ŽAÊìaÓÊäé3‹!ñ®Y 2w˜”ŠG„ÿÝnÞno.s§öÖÎÄh™’ÊG67‰Ý/0ã¨#ÆùÕúæ’šÂR±ý…X·Å*Œ@<Y&fÛ‹±8H⎠·eBWÃ#5Xó• ³ ?bÝéc±”åh ¬ÂˆrºÚäQbLwÚOúÐ’„1êdd‘X¿úJþ0Va„hŽ›ó»ÃöôCn kAZ â2)ÁG¤‹íúz©+\?…•üì™ä'Ï°šcÖØäI6y°*«
-ý”éêr!ó-ë2^§Ì˜ð‡ýÛüÙIƒ9'Ĭ86á´Ïz’¤é¶ô
-D '‰€Xµ£d"b]> i0Å°´­B#¬B$¼Zï^
-ëÄu,à:ÜGÉ"åxµ>l¤c;D€?ߪß3´ “
-‘¦áâͤ›;çÕ.(ªÐ²†6®có°Ž™ZÆ ¾ŸåÉàòs‡õù‰“($[X¢9”Ù¾)o·§« ’x¬ÜPñ  ½+ _Žõ†ô„ã {âõ²0Uh瓺fÙc|DJ*‰Heëèëç‡ÍúTB}–²hŬ¹!¹‚‡ìÖÇ¿ç.ev|˜IaThnׇõnƒAN‹Šxš_²[Å.xY"`} [Ê&É{®E°VÓ›E1 YëñãöšQÉô•é±9÷Xl†$ór±ØQsÆ6› ɲÁ ±?bµ2ór cGÐ}v›)p›Ø!0%ƒ#…=zG2±[IXxˆUˆõétؾ¾£@Z˜/¶Ç˜F®9V!’šÝúö+•“Ó_¾·ë–æl%­;[,4 Ñwz0ûå ú ÉOÙÜ—AÏ,Íw;–Ñ#„<·$ݳ~5C';½£þåa{s¢5œ„ð™;Œ•GÌ«»ÛÛýá”ý Åu/JÓ¬gPÍ‹”íMD|·dÿ\;23"œù²–§‘§8RŠ™¼“!Æ–å¡îÛu+^ÁgsYvl/šŠUQfy6—àýã<f–3©Ej½®\C©#àû‹;]Ð¥M°_æðËgü(?„ŽBpU(3}°O'66ÄΩ{‰ôáMÝêBêäVî8Šx³½¼;¬%Ø‘¾™Oåþ’Åð£tI‚„Žé%ñn­™>PÇà€Ì¯«ÈÅ’åèF*‰0ÿ°daþ1ÂÊ#ä‰D,äNX)þDr Ž“+DÐ_oÅ1ýÇÿI#à^ýê]ÜOÝìÄÉnIÌôúù¿+—¾­†—úÎHsÏG°âÈxµ9qÏ’N:¶Ç u+”§‡í÷㊟%!039Ùs˜LŽœ7´Ý"ËelJÆFÆ—ïpÇÆBR¸kD§¡g2;‚t³àéî‡KÝ–¹Ú·ÎÚV#€4rú@ÖÐÊçðº›Ô<.‰Ð{SÉ<ÏaåW\
-F’1™9%kÎ`ƒoH® ×ëÃeÙ¤°Mö¹“+DÊÍÝîu½NÀB`–²ö#G ®‹ØÈ°ÖÔˆ]=¨¡ž'[Ó'Éîô[S¿’d~;=TkêWr%ZSÍC«µd‚Öu+ŽŒÇ4I†¾×M¢ƒXy„¼ £-sEã™y&—A$)@8¢\Uˆ ï·Õ°IÆJ„oŒUˆ Þ—‘
-Æ„ulV!2âe R‚3Hv˵hü"Rêé/K
-‘“vÅ ’ëR°‡±
-ór}þ÷õeº>‹=ê§Ê;„ÕK39ÓPÝ3EïWý_0#è1mÏ+– 3Èÿ‘#€1¬<ò)C@Jp™5Ž“ÑtÜ°GÔhAìúcF ã™ô“¿ £ÒÒ ï^hTä*9ÝâßÃbÓ§þc}“@ˆÉÛ^öŸîï'bÐ?»ARþúZ3EeLH+³KŽHÉàõäz‹ ð:"rüôëŒHïn¾öȦ–S›ô@ƒ1÷㇣FŠ
-ãÎéI«Bª ¶Å*Dˆ³MÖ‰§”CN×”\!Rà)ÅN`›ï'½Et׸Ó³#•!qäVl´:X¡©1%ñAYŒ4è]_‘F,PnV:‚•ûpn†$b=­˜07!3=!dßX
-înaò8Š=ngZÜ+‰ÄtäÍC°
-‘ŒX<ØÔ|’OŸï($gÔËZËçtú@C_îõP¤Ñ5½.µNŸŠG„ï®Ê5`Òè+”:n@*jÖ
-#BÚ"j6—"vGÒç{ë!Ê—TKŠÆôÁšêb=¸t?ïõŒ•b=f=B–Õ!j0gzÜÿ°ÞˆQÏïUMž 0dÔ0=Ù¼5 Å Ãž`å¯/Ðy]•Â5µê@™Iν³NLZV6O1p¤ÈÅ‹™XU¬™?R®ë’^4kµ^éôàÕ5#W!r#XƒFà|fé?H® È¢íÖõÍV‚ƒ]Wä:r|´ÃBy×Oîßùd䈱7f¯SoÆXmæ.=Hø]®$¥‡2÷8 ÅÄ´ðØu樻3R‹W áÚõÉPi9!^6‡Í?î¶Çm½ÈjX^àH™•+Äö|»YËy§\Þ'YóaôßŲ)—™Òƒõ "4\p¶æ¾[³ZnzáÛ”ÅÝ_ ×zyØßÝ\HWÀi}˜•Œ>ÓGùEèÜì,ñK«Ô1‹xáYëÐ5¦ou/áç„æºf„È®’öQ,†Áé%a‡Êbsø$™T`àúØÂ7Gnµ·£ÖxwK*q·rìÛab;¼wa!œ¼K0FŽ˜à]dE~°”äÌÝ´‘þ’{Wê%Ò™¾ÆÃYGÜë f`z}“Îé(+â1 ÑóÈì¡Ë”iÍ°òˆy¾>¿ÚÞЪ[…br½Õa29rÎwÇrÇ:Y1%é)Ž|-&}ý²
-–„/š€÷àO•+DíÐX†¢ Œl4B!SÁ:PЛ¡cr…Ø’”!¯‘
-ðò°Çw‘íÊòÂ*±=9¥qŒ\Á·ƒ–KÖ€€í:+\Á¾<öé%<XÂF]÷Eða
-y»3ñJv ,V»Éýî·ŠÄnät„ ©46À6¾eäªL,G<23Œ!îÕ™¢
+xVÁrÛ6½û+vx’gYVË9ºu;ͤ§:íÁEÔ$À
+])²Žrí”l­ÛS£\­½×ÖøËÍsC××1Ì»ÕÝb…@é~aò·ö$<y]7HÃ?e)ÌŽ·¥ÂßTb¯òqRÒfX•Ý1„%½»~oíëœ8ÉJËçC ôÃ
+dÔ0+€'€9)dƉ H홄ª›°·#†ìœnÏä…2UBWâC—Cù„2ÛšÝK©¼§e´Ê³aùµÆ¢Ø©”ÿJ+´ó
+9q@yÉ7JÂ@'.²Áå&ŠÇÞà”-u3Éyê>?Ü,a8“ºO¯æ±*møesû2­n?⿹[óo<hh¯×wÇ{1îÔÿïr}³¾YÜá~Ž[ÚúÃDÒ?/¾F¼endstream
endobj
704 0 obj
-5099
+1267
endobj
-705 0 obj<</Type/Page/Parent 497 0 R/Contents 706 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 366 0 R>>endobj
+705 0 obj<</Type/Page/Parent 476 0 R/Contents 706 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F2 5 0 R/F4 7 0 R/F5 8 0 R/F6 9 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 275 0 R>>endobj
706 0 obj<</Length 707 0 R/Filter/FlateDecode>>stream
-xÍ›[sÛÈ…ßõ+ðhW%4q%ù”Òjã]W­í]KŽóàŠ¢dlHÂáÅJþ}NÏô
-‰ròT¸PO‰Š7¹Ž,&…óêó©„­a@tÐñlwÜw7§Õ±ívâ$”‹âr’s«êÝ.È=¹Ô>ëžÒ¹Gõó\¦#ë£wF„7ï–Ç4—H$E²”Õ„ñþçR¢°Pêd.qbŒq~ßwÚ›uX 0Qfß+H6"õ¢A¾l11!ãÅ‘z1ÃM‘aJ“SºF¥0½íWËýݺ
-Éàμ™”²³<âõ!ú±˜þ8¡^pɬçeØi„¼Œä×¹ÏóÊæyRÏdºµò¬þ×î>¥')$ɧÈN£×ûV¯ËEb° ZvN’8J·ÿWÈîbŽ©õë´‹D³@’¤ ‰™dÍðŠ­˜ÂJˆE¹fD¼?‚<oWûîÐÝöYÎR¸´j$. Ò#Ò«õ¶;®ûȘ…ìk,&aP|Vë›Ó~ ‘V6jcƒâ€éb¹ÙÄ(£¹ç¢Y‹¥)šá‚¢YÏpÓGsXbc´”¶ 5ô¶g¼Xn{·‘H¦×\ª#ô¾G\®÷ÚUOa¡L°9rÐ`Ò€ç¾=®ÞIÁO·dÒLM©«Ê°¨G÷…
-IUõj2,ë$‚'°h¡ŒÐûòûætwŽ~j‰H •4›KádPàIç§ã;œÛÕRvPýD#@œ˜h§<î9öb›~‘¯¾EtÑ(Åi‚„ ŠF™t<A¿øDo+a>“ºÏ½íXû£0‰†i,5ˆ¹\{
-V0„ÏPt€§<û¹GlA™¡<â|³éb2Ij"ý¿âøõ5‘ ir33s aÊ…pA¹¾Úe‚ê’å5ëc&8«õá´é—<I ц±½o¸X®Þáø+ÃáwÝEh œG§eØLÄmX¸ N¥K`—ŸÁ£$?¦3Ilè}x¶;±äÚêDj°Šž2¬„÷0žh¤óS„íIXÏ@£í¶½;íƒE(¾q lL*t·ú3w¼bR-ä€fcÒôY|žôùTz ÷=â·vÛÃ󇚊õ·(ôŸ[œ{fÒÔ–D.È=a³î™9÷¨^
-o•@tÏ YmÐÆŠ ‰Î;…–H9ÖTµÔ%mÇ u·«Úž‚jÿ&6sðRÀ*)´=Û•´Òb›¡ QZ¹Þ¶¼¼,’œ˜Çè2έ^ï[ýŦŦ'!X6´Ž‘Xȯ/ß\½gâ ¿ãhJ (ÖtD´œ…
-ÝÈñ$^ô¥^eUʦ›¡ÎÆ FLd5(…{ÄÓó?âÑHjæw<
-Yˆ­!
-öö ˲ÀNÇ@Ò
-T¦°ÜÙ&d(SÔñ eJ±¨0BÊÔ1*S*ׂÂz%z#ÆeªG„ŠÂˆDõ _¦!–KˆPOøX™J¤XN IážÄSRË”B´Þˆr=„§$ËPð.†!¡L"S¦¹À
-èј™9½"½oíº¡Ì‘”¹¼r³Vè
-–ÂÞ–‚×Ô¨4¢Ü1¤÷/«ÀhjŸ4À3¨FˆðrÍš¡<¢˜ü'y•U` ãE±žajÕ B­*C½3îP¬g˜ZõpÇVªr17©9ñ"…­Á5ÞõŽ÷›ÔTØq
-É P©Æˆó¡ŸO
-Ù ÉË'£×ûÞô>Ë
-éd;%ÛzkG={ÀŽöp8­û—e˜Ü¨%þaæEåÍàd‹€ÀÁB‚@þHüÓp½d 89¸È¦òö9–u  ™œKÒ
-õ„¸¥
-¼ˆùÜï-šŠªå\vøº±‰T.œ£Ã)õéCü6! ÅÂü¦&ýº4½d´Ø¢?¯<kÀM—œÆŠXjàvÖ§@ûYíûßÇv¼vzT/`õôÉ@NX>Á°è
-l Ý‹ M®AGDÇ2C‚1b<5C=ÇŒ„õ¦Œ’˜ÍˆaÄ(LY}ït°)ýÜ}þ'òüÿ¹3ü±JøáUæHSùc•p«‚µøæÿòüùOç¾þûSÚû?w«ÓïýúW÷ñ¯þ: Yø¨m[]yþ8ûÌ…Ð^endstream
+x¥XÛŽÛ6}÷W ò².°+˲|Ù¾µ@¶
+$hâ %z­®$*½^÷ë;CR$E;^¤E ºpæÌÌ™3#ŸÌ!Å?sXg°XAÑL~ßNfO¥°Ýã“ÕzÛÒ$MñN1ýÔ*.Y¡*Ñ©RP½bmÉd ßX³cPH·†õ/¿lÿž¤ðåhdÚ1ÉŽç{º={Êa>7^²M’Ñ+ŸT¦Œqc/KÒdIŽ$†÷â(¡å'ð”€B´JŠ߬z¨<Ð`{à½9ü«ñ¾W‰†×óâ(+u·ÏöB§{C”|;QV’JÈsðV€‘kïZ‹ã¬ØS_ZtÎàØs E]/=˜(–6Šé‡/~'uJa]WŸu‰ ã²©úëÖÛ25¬ëõ³çê•·£0yxØF8_˜ÚûÙ³Çnv².äì4{%«®¦ä¨{@IâF]CqàÅ‹vQXûÌË‘Ì)û
+³gVµ½Òïî*Õ“5,!!ø¸û4aNÿûúÇd¾BLùŠòÓÀ&s5|#§øl­«ê™KDµö‚ ÌÓM²²¶†ãcòfOa¬çØú•ª;#¾620~ê©›ÀoítÌš÷p"šùÒ·ˆó­P:'X—»ù¦S…,w £æ{E!>hCáX-Zæ vå;`CbËœY²}ì{ÞªŠÕõùþáRpڣɠOÆÔw„åºçïT÷þƒÑaOkM(õXs*®ØAsClŒ†ÌžV©1fsǧ Q‰òH ‹zˆÑ$Ì¢Õ ¥Ä©ƒÀΧâëöA/Þ†Ms2ð"Û¬’GXlÖȧ‹E2·W1ðÒ(•çÕ§½+ë°;+¥{nT¼  ±z„¤G„WV‘ø=J—gfè ÁcŽUºFÔàÇ=Ö‘úvºÉLBÛIñZ­C¦ì8V¢é˜ªvUMš©g—ëà¤õÚ°ÔiÍ8ìYaÏaPm¤(/Ø¢îP¹»(t#Êj¦—\QG¢0pF1Í÷{“ýqÇP|éz½Ö €*³X.“«žkQÉÓ9²À\ùê/–‘ª|æoj{¤vFQ‡ö Á¹©Ž » ¡ÿòeî° hn0CAè1Vœá£2â
+‹Œ‚m@k€¹¼à3’×pÀ˜éçÜäQ p ö …+„”¼ïM«7¶]®‹]0š+R€jƒ‡oÊÚµœª6ÎP¼V›¼yå}_áNFl=Îp4ËP¹jŸ¯]=Æ:É:fÖ'vv‚Þ‰ön ®iÌ,Ç=‰d ‹¸s劘å‹Q ÿŸh‘j…¢xDÿëÇdø¯‘Èé2YOiX;ýHÒbô¦>nÏü9:"Èù±œY¥Ã%2”µK]d-œ¡ïªZ,kÑðBÎÿGY3øZØ>¸‡é½ÜÒd,v¤ui7ÅÖNž€ûŽŠÃúNtZï{ð¾­…?v±ÈËG2m¥•î\Í"#–¸MòïGŒÂì)Lþ Y„,¹Œñ?éÒ¯Óf
+Þ)ܨ5‘çQµ|çG©
endobj
707 0 obj
-2938
-endobj
-708 0 obj<</Count 12/First 709 0 R/Last 818 0 R>>endobj
-709 0 obj<</Parent 708 0 R/Title(Table of Contents)/Dest[699 0 R/XYZ null 756 null]/Next 710 0 R>>endobj
-710 0 obj<</Parent 708 0 R/Count -19/First 711 0 R/Last 729 0 R/Title(Chapter 1. How to Install and Test SAMBA)/Dest[501 0 R/XYZ null 750 null]/Prev 709 0 R/Next 730 0 R>>endobj
-711 0 obj<</Parent 710 0 R/Title(1.1. Step 0: Read the man pages)/Dest[501 0 R/XYZ null 726 null]/Next 712 0 R>>endobj
-712 0 obj<</Parent 710 0 R/Title(1.2. Step 1: Building the Binaries)/Dest[501 0 R/XYZ null 589 null]/Prev 711 0 R/Next 713 0 R>>endobj
-713 0 obj<</Parent 710 0 R/Title(1.3. Step 2: The all important step)/Dest[501 0 R/XYZ null 174 null]/Prev 712 0 R/Next 714 0 R>>endobj
-714 0 obj<</Parent 710 0 R/Title(1.4. Step 3: Create the smb configuration file.)/Dest[504 0 R/XYZ null 735 null]/Prev 713 0 R/Next 715 0 R>>endobj
-715 0 obj<</Parent 710 0 R/Title(1.5. Step 4: Test your config file with testparm)/Dest[504 0 R/XYZ null 375 null]/Prev 714 0 R/Next 716 0 R>>endobj
-716 0 obj<</Parent 710 0 R/Title(1.6. Step 5: Starting the smbd and nmbd)/Dest[504 0 R/XYZ null 264 null]/Prev 715 0 R/Next 717 0 R>>endobj
-717 0 obj<</Parent 710 0 R/Title(1.6.1. Step 5a: Starting from inetd.conf)/Dest[507 0 R/XYZ null 750 null]/Prev 716 0 R/Next 718 0 R>>endobj
-718 0 obj<</Parent 710 0 R/Title(1.6.2. Step 5b. Alternative: starting it as a daemon)/Dest[507 0 R/XYZ null 262 null]/Prev 717 0 R/Next 719 0 R>>endobj
-719 0 obj<</Parent 710 0 R/Title(1.7. Step 6: Try listing the shares available on your server)/Dest[510 0 R/XYZ null 682 null]/Prev 718 0 R/Next 720 0 R>>endobj
-720 0 obj<</Parent 710 0 R/Title(1.8. Step 7: Try connecting with the unix client)/Dest[510 0 R/XYZ null 505 null]/Prev 719 0 R/Next 721 0 R>>endobj
-721 0 obj<</Parent 710 0 R/Title(1.9. Step 8: Try connecting from a DOS, WfWg, Win9x, WinNT, Win2k, OS/2, etc... client)/Dest[510 0 R/XYZ null 328 null]/Prev 720 0 R/Next 722 0 R>>endobj
-722 0 obj<</Parent 710 0 R/Title(1.10. What If Things Don't Work?)/Dest[513 0 R/XYZ null 750 null]/Prev 721 0 R/Next 723 0 R>>endobj
-723 0 obj<</Parent 710 0 R/Title(1.10.1. Diagnosing Problems)/Dest[513 0 R/XYZ null 573 null]/Prev 722 0 R/Next 724 0 R>>endobj
-724 0 obj<</Parent 710 0 R/Title(1.10.2. Scope IDs)/Dest[513 0 R/XYZ null 501 null]/Prev 723 0 R/Next 725 0 R>>endobj
-725 0 obj<</Parent 710 0 R/Title(1.10.3. Choosing the Protocol Level)/Dest[513 0 R/XYZ null 390 null]/Prev 724 0 R/Next 726 0 R>>endobj
-726 0 obj<</Parent 710 0 R/Title(1.10.4. Printing from UNIX to a Client PC)/Dest[516 0 R/XYZ null 735 null]/Prev 725 0 R/Next 727 0 R>>endobj
-727 0 obj<</Parent 710 0 R/Title(1.10.5. Locking)/Dest[516 0 R/XYZ null 611 null]/Prev 726 0 R/Next 728 0 R>>endobj
-728 0 obj<</Parent 710 0 R/Title(1.10.6. Mapping Usernames)/Dest[519 0 R/XYZ null 750 null]/Prev 727 0 R/Next 729 0 R>>endobj
-729 0 obj<</Parent 710 0 R/Title(1.10.7. Other Character Sets)/Dest[519 0 R/XYZ null 679 null]/Prev 728 0 R>>endobj
-730 0 obj<</Parent 708 0 R/Count -18/First 731 0 R/Last 748 0 R/Title(Chapter 2. Integrating MS Windows networks with Samba)/Dest[522 0 R/XYZ null 750 null]/Prev 710 0 R/Next 749 0 R>>endobj
-731 0 obj<</Parent 730 0 R/Title(2.1. Agenda)/Dest[522 0 R/XYZ null 702 null]/Next 732 0 R>>endobj
-732 0 obj<</Parent 730 0 R/Title(2.2. Name Resolution in a pure Unix/Linux world)/Dest[522 0 R/XYZ null 459 null]/Prev 731 0 R/Next 733 0 R>>endobj
-733 0 obj<</Parent 730 0 R/Title(2.2.1. /etc/hosts)/Dest[522 0 R/XYZ null 321 null]/Prev 732 0 R/Next 734 0 R>>endobj
-734 0 obj<</Parent 730 0 R/Title(2.2.2. /etc/resolv.conf)/Dest[525 0 R/XYZ null 431 null]/Prev 733 0 R/Next 735 0 R>>endobj
-735 0 obj<</Parent 730 0 R/Title(2.2.3. /etc/host.conf)/Dest[525 0 R/XYZ null 281 null]/Prev 734 0 R/Next 736 0 R>>endobj
-736 0 obj<</Parent 730 0 R/Title(2.2.4. /etc/nsswitch.conf)/Dest[528 0 R/XYZ null 750 null]/Prev 735 0 R/Next 737 0 R>>endobj
-737 0 obj<</Parent 730 0 R/Title(2.3. Name resolution as used within MS Windows networking)/Dest[528 0 R/XYZ null 264 null]/Prev 736 0 R/Next 738 0 R>>endobj
-738 0 obj<</Parent 730 0 R/Title(2.3.1. The NetBIOS Name Cache)/Dest[531 0 R/XYZ null 206 null]/Prev 737 0 R/Next 739 0 R>>endobj
-739 0 obj<</Parent 730 0 R/Title(2.3.2. The LMHOSTS file)/Dest[534 0 R/XYZ null 656 null]/Prev 738 0 R/Next 740 0 R>>endobj
-740 0 obj<</Parent 730 0 R/Title(2.3.3. HOSTS file)/Dest[537 0 R/XYZ null 367 null]/Prev 739 0 R/Next 741 0 R>>endobj
-741 0 obj<</Parent 730 0 R/Title(2.3.4. DNS Lookup)/Dest[537 0 R/XYZ null 256 null]/Prev 740 0 R/Next 742 0 R>>endobj
-742 0 obj<</Parent 730 0 R/Title(2.3.5. WINS Lookup)/Dest[540 0 R/XYZ null 750 null]/Prev 741 0 R/Next 743 0 R>>endobj
-743 0 obj<</Parent 730 0 R/Title(2.4. How browsing functions and how to deploy stable and dependable browsing using Samba)/Dest[540 0 R/XYZ null 525 null]/Prev 742 0 R/Next 744 0 R>>endobj
-744 0 obj<</Parent 730 0 R/Title(2.5. MS Windows security options and how to configure Samba for seemless integration)/Dest[543 0 R/XYZ null 629 null]/Prev 743 0 R/Next 745 0 R>>endobj
-745 0 obj<</Parent 730 0 R/Title(2.5.1. Use MS Windows NT as an authentication server)/Dest[546 0 R/XYZ null 577 null]/Prev 744 0 R/Next 746 0 R>>endobj
-746 0 obj<</Parent 730 0 R/Title(2.5.2. Make Samba a member of an MS Windows NT security domain)/Dest[546 0 R/XYZ null 300 null]/Prev 745 0 R/Next 747 0 R>>endobj
-747 0 obj<</Parent 730 0 R/Title(2.5.3. Configure Samba as an authentication server)/Dest[549 0 R/XYZ null 590 null]/Prev 746 0 R/Next 748 0 R>>endobj
-748 0 obj<</Parent 730 0 R/Title(2.6. Conclusions)/Dest[552 0 R/XYZ null 635 null]/Prev 747 0 R>>endobj
-749 0 obj<</Parent 708 0 R/Count -3/First 750 0 R/Last 752 0 R/Title(Chapter 3. Configuring PAM for distributed but centrally managed authentication)/Dest[555 0 R/XYZ null 750 null]/Prev 730 0 R/Next 753 0 R>>endobj
-750 0 obj<</Parent 749 0 R/Title(3.1. Samba and PAM)/Dest[555 0 R/XYZ null 702 null]/Next 751 0 R>>endobj
-751 0 obj<</Parent 749 0 R/Title(3.2. Distributed Authentication)/Dest[558 0 R/XYZ null 188 null]/Prev 750 0 R/Next 752 0 R>>endobj
-752 0 obj<</Parent 749 0 R/Title(3.3. PAM Configuration in smb.conf)/Dest[561 0 R/XYZ null 735 null]/Prev 751 0 R>>endobj
-753 0 obj<</Parent 708 0 R/Count -2/First 754 0 R/Last 755 0 R/Title(Chapter 4. Hosting a Microsoft Distributed File System tree on Samba)/Dest[564 0 R/XYZ null 750 null]/Prev 749 0 R/Next 756 0 R>>endobj
-754 0 obj<</Parent 753 0 R/Title(4.1. Instructions)/Dest[564 0 R/XYZ null 702 null]/Next 755 0 R>>endobj
-755 0 obj<</Parent 753 0 R/Title(4.1.1. Notes)/Dest[567 0 R/XYZ null 669 null]/Prev 754 0 R>>endobj
-756 0 obj<</Parent 708 0 R/Count -9/First 757 0 R/Last 765 0 R/Title(Chapter 5. UNIX Permission Bits and Windows NT Access Control Lists)/Dest[570 0 R/XYZ null 750 null]/Prev 753 0 R/Next 766 0 R>>endobj
-757 0 obj<</Parent 756 0 R/Title(5.1. Viewing and changing UNIX permissions using the NT security dialogs)/Dest[570 0 R/XYZ null 702 null]/Next 758 0 R>>endobj
-758 0 obj<</Parent 756 0 R/Title(5.2. How to view file security on a Samba share)/Dest[570 0 R/XYZ null 521 null]/Prev 757 0 R/Next 759 0 R>>endobj
-759 0 obj<</Parent 756 0 R/Title(5.3. Viewing file ownership)/Dest[570 0 R/XYZ null 344 null]/Prev 758 0 R/Next 760 0 R>>endobj
-760 0 obj<</Parent 756 0 R/Title(5.4. Viewing file or directory permissions)/Dest[573 0 R/XYZ null 682 null]/Prev 759 0 R/Next 761 0 R>>endobj
-761 0 obj<</Parent 756 0 R/Title(5.4.1. File Permissions)/Dest[573 0 R/XYZ null 439 null]/Prev 760 0 R/Next 762 0 R>>endobj
-762 0 obj<</Parent 756 0 R/Title(5.4.2. Directory Permissions)/Dest[573 0 R/XYZ null 183 null]/Prev 761 0 R/Next 763 0 R>>endobj
-763 0 obj<</Parent 756 0 R/Title(5.5. Modifying file or directory permissions)/Dest[576 0 R/XYZ null 669 null]/Prev 762 0 R/Next 764 0 R>>endobj
-764 0 obj<</Parent 756 0 R/Title(5.6. Interaction with the standard Samba create mask parameters)/Dest[576 0 R/XYZ null 228 null]/Prev 763 0 R/Next 765 0 R>>endobj
-765 0 obj<</Parent 756 0 R/Title(5.7. Interaction with the standard Samba file attribute mapping)/Dest[582 0 R/XYZ null 590 null]/Prev 764 0 R>>endobj
-766 0 obj<</Parent 708 0 R/Count -13/First 767 0 R/Last 779 0 R/Title(Chapter 6. Printing Support in Samba 2.2.x)/Dest[585 0 R/XYZ null 750 null]/Prev 756 0 R/Next 780 0 R>>endobj
-767 0 obj<</Parent 766 0 R/Title(6.1. Introduction)/Dest[585 0 R/XYZ null 726 null]/Next 768 0 R>>endobj
-768 0 obj<</Parent 766 0 R/Title(6.2. Configuration)/Dest[585 0 R/XYZ null 298 null]/Prev 767 0 R/Next 769 0 R>>endobj
-769 0 obj<</Parent 766 0 R/Title(6.2.1. Creating [print$])/Dest[588 0 R/XYZ null 689 null]/Prev 768 0 R/Next 770 0 R>>endobj
-770 0 obj<</Parent 766 0 R/Title(6.2.2. Setting Drivers for Existing Printers)/Dest[591 0 R/XYZ null 459 null]/Prev 769 0 R/Next 771 0 R>>endobj
-771 0 obj<</Parent 766 0 R/Title(6.2.3. Support a large number of printers)/Dest[594 0 R/XYZ null 682 null]/Prev 770 0 R/Next 772 0 R>>endobj
-772 0 obj<</Parent 766 0 R/Title(6.2.4. Adding New Printers via the Windows NT APW)/Dest[594 0 R/XYZ null 298 null]/Prev 771 0 R/Next 773 0 R>>endobj
-773 0 obj<</Parent 766 0 R/Title(6.2.5. Samba and Printer Ports)/Dest[597 0 R/XYZ null 682 null]/Prev 772 0 R/Next 774 0 R>>endobj
-774 0 obj<</Parent 766 0 R/Title(6.3. The Imprints Toolset)/Dest[597 0 R/XYZ null 492 null]/Prev 773 0 R/Next 775 0 R>>endobj
-775 0 obj<</Parent 766 0 R/Title(6.3.1. What is Imprints?)/Dest[597 0 R/XYZ null 381 null]/Prev 774 0 R/Next 776 0 R>>endobj
-776 0 obj<</Parent 766 0 R/Title(6.3.2. Creating Printer Driver Packages)/Dest[597 0 R/XYZ null 243 null]/Prev 775 0 R/Next 777 0 R>>endobj
-777 0 obj<</Parent 766 0 R/Title(6.3.3. The Imprints server)/Dest[597 0 R/XYZ null 145 null]/Prev 776 0 R/Next 778 0 R>>endobj
-778 0 obj<</Parent 766 0 R/Title(6.3.4. The Installation Client)/Dest[600 0 R/XYZ null 709 null]/Prev 777 0 R/Next 779 0 R>>endobj
-779 0 obj<</Parent 766 0 R/Title(6.4. Migration to from Samba 2.0.x to 2.2.x)/Dest[603 0 R/XYZ null 750 null]/Prev 778 0 R>>endobj
-780 0 obj<</Parent 708 0 R/Count -3/First 781 0 R/Last 783 0 R/Title(Chapter 7. security = domain in Samba 2.x)/Dest[609 0 R/XYZ null 750 null]/Prev 766 0 R/Next 784 0 R>>endobj
-781 0 obj<</Parent 780 0 R/Title(7.1. Joining an NT Domain with Samba 2.2)/Dest[609 0 R/XYZ null 726 null]/Next 782 0 R>>endobj
-782 0 obj<</Parent 780 0 R/Title(7.2. Samba and Windows 2000 Domains)/Dest[612 0 R/XYZ null 352 null]/Prev 781 0 R/Next 783 0 R>>endobj
-783 0 obj<</Parent 780 0 R/Title(7.3. Why is this better than security = server?)/Dest[615 0 R/XYZ null 750 null]/Prev 782 0 R>>endobj
-784 0 obj<</Parent 708 0 R/Count -13/First 785 0 R/Last 797 0 R/Title(Chapter 8. How to Configure Samba 2.2 as a Primary Domain Controller)/Dest[618 0 R/XYZ null 750 null]/Prev 780 0 R/Next 798 0 R>>endobj
-785 0 obj<</Parent 784 0 R/Title(8.1. Prerequisite Reading)/Dest[618 0 R/XYZ null 702 null]/Next 786 0 R>>endobj
-786 0 obj<</Parent 784 0 R/Title(8.2. Background)/Dest[618 0 R/XYZ null 604 null]/Prev 785 0 R/Next 787 0 R>>endobj
-787 0 obj<</Parent 784 0 R/Title(8.3. Configuring the Samba Domain Controller)/Dest[621 0 R/XYZ null 656 null]/Prev 786 0 R/Next 788 0 R>>endobj
-788 0 obj<</Parent 784 0 R/Title(8.4. Creating Machine Trust Accounts and Joining Clients to the Domain)/Dest[624 0 R/XYZ null 527 null]/Prev 787 0 R/Next 789 0 R>>endobj
-789 0 obj<</Parent 784 0 R/Title(8.4.1. Manually creating machine trust accounts)/Dest[624 0 R/XYZ null 192 null]/Prev 788 0 R/Next 790 0 R>>endobj
-790 0 obj<</Parent 784 0 R/Title(8.4.2. Creating machine trust accounts "on the fly")/Dest[627 0 R/XYZ null 355 null]/Prev 789 0 R/Next 791 0 R>>endobj
-791 0 obj<</Parent 784 0 R/Title(8.5. Common Problems and Errors)/Dest[627 0 R/XYZ null 179 null]/Prev 790 0 R/Next 792 0 R>>endobj
-792 0 obj<</Parent 784 0 R/Title(8.6. System Policies and Profiles)/Dest[633 0 R/XYZ null 541 null]/Prev 791 0 R/Next 793 0 R>>endobj
-793 0 obj<</Parent 784 0 R/Title(8.7. What other help can I get ?)/Dest[636 0 R/XYZ null 484 null]/Prev 792 0 R/Next 794 0 R>>endobj
-794 0 obj<</Parent 784 0 R/Title(8.8. Domain Control for Windows 9x/ME)/Dest[645 0 R/XYZ null 750 null]/Prev 793 0 R/Next 795 0 R>>endobj
-795 0 obj<</Parent 784 0 R/Title(8.8.1. Configuration Instructions: Network Logons)/Dest[648 0 R/XYZ null 431 null]/Prev 794 0 R/Next 796 0 R>>endobj
-796 0 obj<</Parent 784 0 R/Title(8.8.2. Configuration Instructions: Setting up Roaming User Profiles)/Dest[651 0 R/XYZ null 185 null]/Prev 795 0 R/Next 797 0 R>>endobj
-797 0 obj<</Parent 784 0 R/Title(8.9. DOMAIN_CONTROL.txt : Windows NT Domain Control & Samba)/Dest[666 0 R/XYZ null 682 null]/Prev 796 0 R>>endobj
-798 0 obj<</Parent 708 0 R/Count -13/First 799 0 R/Last 811 0 R/Title(Chapter 9. Unified Logons between Windows NT and UNIX using Winbind)/Dest[672 0 R/XYZ null 750 null]/Prev 784 0 R/Next 812 0 R>>endobj
-799 0 obj<</Parent 798 0 R/Title(9.1. Abstract)/Dest[672 0 R/XYZ null 702 null]/Next 800 0 R>>endobj
-800 0 obj<</Parent 798 0 R/Title(9.2. Introduction)/Dest[672 0 R/XYZ null 565 null]/Prev 799 0 R/Next 801 0 R>>endobj
-801 0 obj<</Parent 798 0 R/Title(9.3. What Winbind Provides)/Dest[672 0 R/XYZ null 242 null]/Prev 800 0 R/Next 802 0 R>>endobj
-802 0 obj<</Parent 798 0 R/Title(9.3.1. Target Uses)/Dest[675 0 R/XYZ null 577 null]/Prev 801 0 R/Next 803 0 R>>endobj
-803 0 obj<</Parent 798 0 R/Title(9.4. How Winbind Works)/Dest[675 0 R/XYZ null 413 null]/Prev 802 0 R/Next 804 0 R>>endobj
-804 0 obj<</Parent 798 0 R/Title(9.4.1. Microsoft Remote Procedure Calls)/Dest[675 0 R/XYZ null 288 null]/Prev 803 0 R/Next 805 0 R>>endobj
-805 0 obj<</Parent 798 0 R/Title(9.4.2. Name Service Switch)/Dest[678 0 R/XYZ null 750 null]/Prev 804 0 R/Next 806 0 R>>endobj
-806 0 obj<</Parent 798 0 R/Title(9.4.3. Pluggable Authentication Modules)/Dest[678 0 R/XYZ null 322 null]/Prev 805 0 R/Next 807 0 R>>endobj
-807 0 obj<</Parent 798 0 R/Title(9.4.4. User and Group ID Allocation)/Dest[681 0 R/XYZ null 682 null]/Prev 806 0 R/Next 808 0 R>>endobj
-808 0 obj<</Parent 798 0 R/Title(9.4.5. Result Caching)/Dest[681 0 R/XYZ null 492 null]/Prev 807 0 R/Next 809 0 R>>endobj
-809 0 obj<</Parent 798 0 R/Title(9.5. Installation and Configuration)/Dest[681 0 R/XYZ null 341 null]/Prev 808 0 R/Next 810 0 R>>endobj
-810 0 obj<</Parent 798 0 R/Title(9.6. Limitations)/Dest[681 0 R/XYZ null 151 null]/Prev 809 0 R/Next 811 0 R>>endobj
-811 0 obj<</Parent 798 0 R/Title(9.7. Conclusion)/Dest[684 0 R/XYZ null 577 null]/Prev 810 0 R>>endobj
-812 0 obj<</Parent 708 0 R/Count -5/First 813 0 R/Last 817 0 R/Title(Chapter 10. OS2 Client HOWTO)/Dest[687 0 R/XYZ null 750 null]/Prev 798 0 R/Next 818 0 R>>endobj
-813 0 obj<</Parent 812 0 R/Title(10.1. FAQs)/Dest[687 0 R/XYZ null 726 null]/Next 814 0 R>>endobj
-814 0 obj<</Parent 812 0 R/Title(10.1.1. How can I configure OS/2 Warp Connect or OS/2 Warp 4 as a client for Samba?)/Dest[687 0 R/XYZ null 696 null]/Prev 813 0 R/Next 815 0 R>>endobj
-815 0 obj<</Parent 812 0 R/Title(10.1.2. How can I configure OS/2 Warp 3 \(not Connect\), OS/2 1.2, 1.3 or 2.x for Samba?)/Dest[687 0 R/XYZ null 344 null]/Prev 814 0 R/Next 816 0 R>>endobj
-816 0 obj<</Parent 812 0 R/Title(10.1.3. Are there any other issues when OS/2 \(any version\) is used as a client?)/Dest[690 0 R/XYZ null 750 null]/Prev 815 0 R/Next 817 0 R>>endobj
-817 0 obj<</Parent 812 0 R/Title(10.1.4. How do I get printer driver download working for OS/2 clients?)/Dest[690 0 R/XYZ null 635 null]/Prev 816 0 R>>endobj
-818 0 obj<</Parent 708 0 R/Count -4/First 819 0 R/Last 822 0 R/Title(Chapter 11. HOWTO Access Samba source code via CVS)/Dest[693 0 R/XYZ null 750 null]/Prev 812 0 R>>endobj
-819 0 obj<</Parent 818 0 R/Title(11.1. Introduction)/Dest[693 0 R/XYZ null 702 null]/Next 820 0 R>>endobj
-820 0 obj<</Parent 818 0 R/Title(11.2. CVS Access to samba.org)/Dest[693 0 R/XYZ null 578 null]/Prev 819 0 R/Next 821 0 R>>endobj
-821 0 obj<</Parent 818 0 R/Title(11.2.1. Access via CVSweb)/Dest[693 0 R/XYZ null 480 null]/Prev 820 0 R/Next 822 0 R>>endobj
-822 0 obj<</Parent 818 0 R/Title(11.2.2. Access via cvs)/Dest[693 0 R/XYZ null 355 null]/Prev 821 0 R>>endobj
-823 0 obj<</Type/Catalog/Pages 497 0 R/Names 367 0 R/PageLayout/SinglePage/Outlines 708 0 R/OpenAction[498 0 R/XYZ null null null]/PageMode/UseOutlines/PageLabels<</Nums[0<</P(title)>>1<</S/r>>4<</S/D>>]>>>>endobj
+1412
+endobj
+708 0 obj<</Type/Page/Parent 476 0 R/Contents 709 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F2 5 0 R/F4 7 0 R/F8 11 0 R>>>>/Annots 278 0 R>>endobj
+709 0 obj<</Length 710 0 R/Filter/FlateDecode>>stream
+xTËnÛ0¼û+æˆIq-·@ Ú9hs¡I*f*‰.IÁðßw—”AH"@ “û˜ÎîŸEœþ
+T%n6íân·¸¾_£(°«éf³­°Sȳ<ϱ“ˇá`<NâŒGÑîtW['µ§s£v­ñÞØNûàŒ ôÍw"
+¡¹õ×Ý‚ß4>,
+þúõO°)ù‹ê#iž~4xd[ÌâÝ3®ïÉ:£QJú˜Å·ûŒô©Ÿ–ž.Ù¾ö‹•bþh´e&ᣇJªû£–¦6’8Fá—¹¾/_›®Æ磈ޙpF+üo|F^UÕ ð’„| ´Jsà,j|‡37ý¿’ï¥LŠO§éï­‡Ò^:³×êŠi§Y*³œì ôöhÿf-AGÎ3‰ìxOhf÷o˜Y°ÙeJž„ ùï29i§y&±ðA [Ï(ãeï9æ@Ñqô’ÿp³ÞÍÖÛŠ<GäiBQ§´¹ØT¯'Ú>w=Þ~¿»Åg_Èøbeßê.^6Lf•²V)–¹_$ñ>ˆø| )N ÒZ±&#ÃÕÖÕ:ÛÒ.¤5‘\Eà.þŠ!•Èendstream
+endobj
+710 0 obj
+628
+endobj
+711 0 obj<</Type/Page/Parent 476 0 R/Contents 712 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>>>endobj
+712 0 obj<</Length 713 0 R/Filter/FlateDecode>>stream
+x¥•OoÚ@Åï|Š'NDJ èµ"E•U!j¹,öoc¯©wķ Á¡§
+!aïîÌÛß¼þ &ó3ÁbŠ›9âbðy5¸¾û„é«”+óÅ«ãh<æ›xto½®TìMi±3>ƒÏ4œW6QU‚'U¬R“k(ï+³®½¾XýŒq51ΨPÛ­±yw}7ÃdÒd¹š.£©¬7¸ËÁ•…F™†_ŸŽ±6Þáeäê8ƒrVZ%@ióýðåÆú2z~¸ÿ…­®
+ãå: Öˆ‹°ÊŒk…MnšÔ…VÜÃëT±²Àš—@\Ú47±ç“ßimCäcÐF‹ÓoF…5§ãº2~$FååDsîP/»„XïÃÆS|h‘Eè@Σ€òÑjì”1.vY¹C½MwSddK“Šcí–UÈV`<«™çèb°ªdÚ“{Rõ^Á Q­×:iDx¶Læk«¼Î[½-J "œ’ZóB>S^˜{ešb ãÙ`“²H·”’Iʨè§Ä:Бò
+š|äÍÝãLÙ¥?± è#•ç„ʽ…Óù7½gX;ZY{Ú:É-€KÄtЫ ¼¾»m]?ÂðñûPŽ;a$97b¿ÊoQyè®CKÂÁ.;‡Ùä9—†Ý+ z›ª\JVúÿaÕz‚zDGðåÑúî R˜\‰QØ”4NCØa'üÃÉwÂ6£oY¼è/M‡¢ëIR)Ýà½@?)”tX@,+ Ðäs—?Ãø8]\×·û²îáasÔyBO°í2öL?Ùec(j¥xSi7Z°ä¼´u5çP@I!:“Bñ5=òMW•Imƒï¿­œÑ˜ÝΣ9fËOùåæ´éËðåÿ¯Žn$ÉUf‹Y´äÿg÷b)/(äÇà/£_endstream
+endobj
+713 0 obj
+710
+endobj
+714 0 obj<</Type/Page/Parent 476 0 R/Contents 715 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F8 11 0 R/F9 12 0 R>>>>>>endobj
+715 0 obj<</Length 716 0 R/Filter/FlateDecode>>stream
+x+ä2T0
+endobj
+716 0 obj
+116
+endobj
+717 0 obj<</Type/Page/Parent 476 0 R/Contents 718 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F0 3 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R/Fc 13 0 R>>>>/Annots 287 0 R>>endobj
+718 0 obj<</Length 719 0 R/Filter/FlateDecode>>stream
+x¥WMoÛF½ûW t± ȤDI– (lÃnƲ©M è²$WrWÙ]ZÑ¥¿½o–\ÙV[·@ÄÉÝùx3óÞøÛQŸzøÛ§qBƒsʪ£«ùQ|{AIæK|9OhžS/êõð&;¹½ühOç_ü™þ¸9s6F Nü¤·” Ew”iµ,Vµ‘ô0‹ú,̆®µR2s¤ ½x;$á öè,éEC6#(+ ©-qt&ªTüÀ.oæG†…úü¿O?%£‹¨O£‹a4¡Š†ãIÔkŸJš5É ©ßo]Œpìe:—Ti™éjSJ'I(»•†œ&·.,}«¥u…V>«T"ªUNxÁDcVtBkç6ïâ8F—ѶP6ªŸD¤ÊøRÊz'ÞhíªòµoÍDþ=9o¹¶ÈDYÓ5))shd¹V
+w}p2ïRZ»¦0h["¡QÛÏÞ>:Q›¯Y m—jŒüvf²Ä4j³÷ã["~ámƒïÌšTgÒÕ›N—¹4‡z™çÅ7 t”v”K›™"BÁKƒ‡ïÃ/5ª
+#Ë]øªŠt˜J®³ºÂ "ZE4sÂ8¢ûÇù,ºùí¦Ël’}å
+=üüâ¡>j9êÃåã¬ã]6Gùl‡»žÉë
+´äƒŽD¦÷Ef´ÕKG.§t/Rf‹IÔÆ›ö+·0׭;?:GÎ%Ã12lžZ…ÿ« c¡a7y±¶,½*ãgT…"ˆ~|U[°ZÜhÖýå4z˜%që;±_ïÃ1‚ý'ïA½Cˆ¯#
+_+?öÜŸkèZ6HIS(Œ:HMAB 0Œ³kY–]’9z›gsÉ{Âb˜[q0Z;ŸÛóN‘ê¡ÍŽ‡Þßô…Mq’6 èÂoV-=øïÌ—aéÑE»]&Ãf ¢ƒ?Iï½e)Šä÷ýœõü~wrpÛì{VƯÒ‚}óôSž‡³¯:|0âþN%
+endobj
+719 0 obj
+1531
+endobj
+720 0 obj<</Type/Page/Parent 476 0 R/Contents 721 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F2 5 0 R/F4 7 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 290 0 R>>endobj
+721 0 obj<</Length 722 0 R/Filter/FlateDecode>>stream
+x¥VïoâFýÎ_1Ê'Nƒ ¿åR%wÐã”æÒ`]Tõªj±ØëÚëó®CùÒ¿½oÖv€œ®_ª(ðì›7oÞÌò­R!Mt>¦8mÝF­YÔê}O/‚! §¼à¿´æǽù…ŠÖ88 ‚1E á@¿OQܾA˜ÛJ¼ŠlO†ß’²¶”–v[™Ñ§eo@_ÚüðYV™ìËB•V&o¢¯­>u}$Ž’¶°$(ÖJfî'~Ô›) «ÌÝÁÄgn?1êÞ””DßÏ"ú¼˜=‘)‘©ÐÙ\i¦“ÐC¡2GôÎCÒ£´¦,bI·…ÙYYœu(3´éJ>2=²[³£28}¥ ôB­òËãÏ­ptLhtÁ”Sh8¦õ'MK–«¡¯ç R´EÁ±ÈˆVUý-ZíÁ>.ÞÒº0)y)8Ç![±¡6mË/{½XF;•Ù |A¦{ÿh)Ë]Ï2ý0ƒ­Kõ)Š‡b”€(‚0UºÒšy¨,ÖeòÒ„ð<pTbZ8ô±n™u¥R@ GB[C¾ß-SæUëó¬´Lm‡l‰ÒÐѼ,®Ê6¤ ^pTËL¤µA<cê6ÙÍê«Œa¨¤› ¤òúpcŸLñW®:¸ÜJAÎø†·0ðJÖ–†(ê¿-=
+'¯ºõ€¹´‘ôa!h‘
+ràû]¦Hh.\­á<6y]HãåÊÆöÇ>ž«ÂºÅ…„ÖÜn¹æXh’x\ÜGï?ÿ…ãyáŒ:é"<-}gò=OB•¿aÈòÚj$so
+ }¼Hu«*³g"‘$L×KdÓU›lí§®)¼CgÆ´Täô–Uê͇µÓ³qmÐì¥öÙK6Ì ³ã8"›ËX­U5秘í uˆ 0ñtðHVë¿­d¸†`-¦ÂØA­±æ.ë¾7J^a!…^Ó[º:Áç¾®ù¬0gŒvÝ!l‚K¢t'0Ì1£;œ¼»YÎ?΢àôÉ«”¿aYóòÛŠg £i§xeT$à<‘çÐÉË›³:ßuíMh2½¯•Ý{m¼aŽŠ98ÏËxTC§î ûE8,w쌗iæø
+¨æÞ¨êO"v%ü½?=ÀT±èV%°pÞ³©Æžü1çw_Uxžd ñ,”®çøSå+áÏæJlò×d;¤pyT^<Þt@òzñmbUšƒ_*IÂkÉg<ôðeU²Úx¥Ö¼Õv[…- ìèWõ›ÆÕGÊU+¶7ŸÖSŽ'AHÃá´º —7¿ÜÞàê5¼É齉˺p¸ú¼[…w'ü~Hþßï¾_N~1 'CÜÇxr6\¿¶þ—ûÁ•endstream
+endobj
+722 0 obj
+1125
+endobj
+723 0 obj<</Type/Page/Parent 476 0 R/Contents 724 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 321 0 R>>endobj
+724 0 obj<</Length 725 0 R/Filter/FlateDecode>>stream
+xÍ›ÛrÛȆïõ¸‹S•¥q$Èܤ$y¨Ê§¬¸åÜÂ$aM
+HÉöÛçï™ »aÙ¹X‹Nª¶ÏüÝ==Gþ÷$‰bü?‰Ê4ʖѶ=9Ûœ<¹ŽÒ8Ú\GI±^$Ѳ̣ÍU/âÿº}¶©>ì꨿ŽÎûîPw‡ý_7œüº9¡
+®V”Ð_¿ý“þ%Zækü·òtQðÃ.º¤÷˜úÃMôüe% ½º/o½<}}vñ«¬Êõ"×d_l
+QCŸ-Žó¿„-’-ÉÖY±XÁÖe¹XóÛúùËœ- 7/Qyõ¸q…–‰SËârËØÔUKIó#›dîˆ`$1… â1¡ïr£Dô%1jÉø;¿­îõÂGÈÛ¨p6’,_<ƒ$‹ ç/xEê}ñLÿ¯þS
+špWÝÔn¸J Ž™·C’ÊeKXÑëâÀ=LqPP— i ,÷ž“rZBbbõåŠ|!õL´ú³ûfwÕt7Á)BØFk…‹-EÄ„ÐÀ©xk¢ kj—ÕŸ5]54Þ­ÙÏàÔBº4‹‘XƒKÝÃäÒ,AÙ·]Êrï
+Áåáã`
+,¨™æÆBDÑA Hà
+QíÇ
+䆬9a9Æ‘ OP)=Ûl†/ÁîBÃópàb Ø5{9ì¹¹vøŠÄÍq…Ë-EŒ|R„
+–±¿­†zŠC!¤PN1÷Q- d‹©ªfçÎ$ØÁRKM;ÕšÄpKê§ý%!¢¦ãà
+!§¦RHA{\
+*XH´¯‡‡z ÏÁ
+¿ü1#‘»âY™ÀH<móÜâ(Ã!Çロs–û˜u,çbK(M/`½Y©g¢ÕÏzhÙ‡°‘fZÆÇAb(µÇ´©¯H¡‚E©¼RÐf…†p ‘J¨À(³YC¸‚eÜwÍ礌:è†0×B¶»'\{žpß$Ie~Îi;;Ä£{˜â1§ýœoî›e,÷Ñ#å>g„•‰GÖûØ‘z&ÚÌâ‘2’ÀLKx4 oF(IR€[”ž>N2„VÈA
+Â\ ©Æ@ŠFJHšÀ,áÅÛË¿!ƒWcZ¿jW°÷×ïoFŠÔ‚Ï@v’*Ì(M·þ<a„Lo,&G_™ÅÈû¦{³™ B†Ó—tY‘¥mK"PÒ#Eêè ‡f©ê‹Pá+”·—ÏÓ‰!T`àà‡ùÒ*kÛR¶˜¤I!ŽG1@úS&[ŒHkßžÅ%òà+KüÝ
+†ñ¾>þƒ'ǽu@k»$]¹…{†Wš@¸ccÿÀæP ÷,¶×^4ÕM×ïÅ8,dÚOR@.· ÜïÀ½”Öïåt«åx—2ÜÒ×(]Ó+NZiäØ@¸‘‘bËÙ,~·ýݸ³(4°0ÍE€‹-ââ…³¶6Ÿp÷ŸþýWPê.Üàóè¤É?ûà_õ~Ûë ™dؽ+±U OQĤKh(êf_># êý¶ß…ô"•àà<Õ-á
+3Ыú¡Þ¹YÅÉ‘¢×¸dI;V.Kâ#܃pɲ4kãwCÓÉù4ò`Á%´¡§\l)rò"D°eJçÒ
+Áåñû›‹ÿŒþ*ò+x)FÀZÈtSFŠ€Èi}«Lµ1…š4 à¼&†í –pîæâã·!0ëØÚ#-æÝ9ö1Ÿv 0 'án„ õ/ `5YºÅpvï(º{¿ê·1$¸ÁŽ–#õ‡ïå1ó…ˆwýnEâDÁ¹µ^E¿®îîÄ°‡ƒ¡ ‚sÓ’ú‹døòåwìtUëï?äÔË~[%á°Û{“c7ôÑ¡wê„]ð¥zè{‹¬<ï-' ¬‚Õ=¬" \n¸­7T[q_OJ½yt*XÒeí/¸&tÈú3™–n\Ñ !ehwÝÐ?°eåUÚ4¶7#¾v™1°ÜÕCÅbº…¤ãÒAHÜŘÖ5ŒÛÂÅVÿªê^O7º°Ÿd𬾎!\n!òøKˆ€Àº“
+*|ÔL
+ö“.«öÃ8~ù%²×‚½$ôcÕ ¬uçß“.>»q‡ØJÏIäµÚà¢l‹;êk·I¶
+FÁ…vL.t²½èCu ?àPü´cŠsy¦N³·FåØýøR¤|=tŠ;ÂØÀ 䔚‹-ટ6å…–¦³YEàbK˜Î§„ÄQ”ZÏÅV¾äº~Ðî÷÷Föo–'áX“r0Ý>£y û—ü0y'Õ‡íön›¹¥ìãpLàb yÓã²GÈXG ¥Mš[)—kÂé‡þ~ÚŒ" ðJ8Y6"P5ã²ÞÞÍá‹›¢ÑÙóŸÒÿiöÇ
+Óp²çfIì¯`z [¸¶¦Ú‰H°©SÄéÕnÒ á`\€eðK8X¹Ü‚ðÓ²
+~#5 ¸µˆ"„
+qùúldXà€R¶"`-cN¨5È!GèJÚ58'¦y 3›û›ƒÀÚž ?â Fx»I†‡ZŠuEc·9§K>ã Z}×w¿Ô~X®§á}Rc4Ĭ#Õ(_lQw<IðTÙÓLÔSyÈ·ä3ï#÷÷Ø/¦#o\ÞÔý|3ÝFR`!Vq4O–_hÕ¸àä¾{´Ý¤C¤0‚døBË ;vnA×2—e¾ž}Ryj…‰²;D%;¹¿ÙÀ¸ÈeOÙ¬YYê, ¥Î¬3õ×ÍÊ Z;ê÷{ªmÂyßâîò~£wü e8u{ÊUù‡„î/÷Ã@ŒIî‡îö÷DQúÌýx'
+¿ì›ý:/Cß,¢_J·þ¬á¤üï“ÿTõendstream
+endobj
+725 0 obj
+3185
+endobj
+726 0 obj<</Type/Page/Parent 476 0 R/Contents 727 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 350 0 R>>endobj
+727 0 obj<</Length 728 0 R/Filter/FlateDecode>>stream
+xÍ[ßo¹~÷_±OEúpÊþ–¶@Q$qÒK'i¬"…"Ëö^%­»Z]’ÿ¾ßCrfäErçøD‘ß'rf8œÒÿ>+²ÿŠl^fU›­wgÏ—gO_uY™gËë¬hºY‘µó:[^eù,ÏñíúÉrõi»É†ëìÅ°Ÿ6ûéðÇå/g/—g4ÀÊ
+úôá¯ôMÖÖþ¿Ëªf¶àÆ6»¤ß1ãÇ›ìé«&+
+úeàü˜øÕËÍ4õû›ŒLÐí²&ŸÍ5·ï6Ç»€€]¶hfFûnƒ¾\í>­Àì²nn—æ» Á4´
+TŸç³F³p¿e‰†'! Àæ•‚,ÃE¿‡Ãp H`É€HO3ñ
+,׫®„,a iËY­'X’˯‡i³‹4šEeE˜-Í4nÒ\ $ØÆÞ¯%öq÷WåÖ`«¥pŽ†dR‘¾yS•­Ø8M×ÂÉÀì[¸*߈§ÁDKµq^ï¡áãš6·sîMƒß<‘ßØ!ÜKWÎy±U‹Ó¦öèÌiÉ)ú¯öé«šOwÍBlo‡iãÖ[ÖÒ#^o¹ª…N£Ol\#.6§M3ÿ?¼£‡³wT\Î;ž’ÔÚ;|W“àå\œw<Å¿û½r H'£S¦¤ab»–K{6& 9IÚ½j6`Æ–¥{WB@
+$Hœ<¬eabËRÎÊÙRqIÍbÙI£‚»rþ¢#ѹFòUqâ/¦q¸òƒHšG½{fU.WšWØìð´‹×H+ÍɨbØ_÷7ÇqÀ±k¬
+^©ÛIu—;O1§Ç7¢§n±î(˜“«6ÛKà=“1(2î¶$1„ì­œ¶ªÂs¿ÅoWãM<Ÿ%Œv8EcŠð…åØwŸR@(a AäkVXä>,W "GA™€ž³ZŠ;r|›Ñ7UõP{ÜŸU%ì¿niÙpO¼“oD£HÇGÝR mby•! ØG ‚ÅÃÝ–àõÎÉàD)€¯;2Q75ž w[–å0l›‰TUðUä,ï BN¾¬jµý$¹¨„r˜Ú5¢¤åök´ ?Þ®bÌŽÐ6@wÈÙq8(îÖø>JX
+¥;rÒ(Ö܈N:‡ÕB[îEãC Ç‘Hщ'f.îÖ$©>(
+÷kº(jò%jUs”³|ö%È@¢ÀÑæ°5ÍÁ´š#‰AB@° K0§&ÈRúTcåë+Yu©š…ó.yö 6
+è9’
+Í|ýóð9ø€)vdÙn%<yîÖðé
+
+‹ä§5ÓjŽUôÐÜ‚m„† L@"€oéÌT4ÅœÝjLþMàààp5`Yx€fч„‘—¤žšJ IèiÍ8l·¾ ‹øo(åÔ.`ðsܼ+ÅPÆOé1ÀžÃY¦S‘ç¨#ÝŒÃqE1Ç#¿Î©e9›br
+s‘Âó¹FòH_t˜¶uÅDç$ w[¢)UÃÆ $¸ß2è](` Õ’ÀkY´ñI ö&œ'r.a€¥1æ÷•ÄZ¾÷)p—DÁf]cæ¾µYÌO.çLMW \ÝSp·e¹X­oû}tª¨•©s[̲X€Õr,Çã!í%p¥žÜÃñl½Æœ¢S”@Ðàê¸54Ìl'#h‰"ÇJzW2 ,‡É%<¸I2b©„–Ç—þâš$<sº%SóÁ€{D“¥“SbÀ€ƒ²0 Ljg"v¬DÁGÃ9c ,‡ßmä"¬~×E}-Suz}@yMϨ|#Y=jfö¨ØíÒ«#AáœÞ>)î¶ïÇo:wQ/HF_“zݤxÜoi¤¥ (j’¢
+¡êq «ÌÉÊÇ?>¼‰û1AXTpm’¦m²°ØŒi<„ /Y*°ïµ7f‡~×ãý‹»2ûá~QȶQP¹¤ÐÛ½ÿqŸ£‹ËZÊ`¤4/VýVDÝ ÃþMâ}§exƒgÈÎ=!=ü†ìH¬âwøØÈ(•
+b  =]_$ƒKWŠx¤K§çï.ž½~ûÏïÞ.?¼{3›¾ˆý‰ÀŠª:.×+ÿŽåûSô 8üH¸ï¶p[DM8à±!ñÝ–$Õô^ï-^§7FÁ#ÕqåB¸Ûrpn¤!p>~¤Kì¤"î¶$ˆpDœŒ Ð‘¼‰‚/èáƒÑ¬Kõ\ÔøÝ–Û¸¸…3þË÷Éý% Ò÷—4?QŽ‡¿/xh>¹|vñüY†ãý—ÍzÊ·õq‡Ëøøž±*šì§9ýùÏÕ“¾§I¢€ð÷³ÿ
+endobj
+728 0 obj
+2978
+endobj
+729 0 obj<</Type/Page/Parent 476 0 R/Contents 730 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F5 8 0 R/F8 11 0 R/F9 12 0 R>>>>/Annots 381 0 R>>endobj
+730 0 obj<</Length 731 0 R/Filter/FlateDecode>>stream
+xÕ[MsÛH½ûWðèTí(â7uÚr’ÍŒ«ò5±³™C.´DÛœ‘D/%Å;ÿ~ºÑ$
+ß‘b΄à¬é?·ËƒŒ<À@C
+/°t¯‘S¬y•#yT-™ YI{—å‘
+-+¥bñ6FH¡iB…©ð,¶ "2tÊSË-ÃÏ}w¸æ@À@‚„sàÆÄÃ
+ Sò3“¢ŽcM¨J‘¹Ö0ôã
+R¯¯ÚM»wCqK6j!ùe<S£*J1Ø´¢µÝÕ„ŠÈ? ƒM+½oÆÄ-×Øýó6òÿ`¤•i^¹U×ÕºR÷0ŽqÞŒõŽú™qýL10§%©t-à«I‰Â»
+Z:é„,Ö\ N•i
+–Û.¼kúM»£9Ö
+“[áTg¹¥zÖ„¤¢È¤I˜×’ˆà!QØ^!U³}a>žêRœÀÑ&¶¶ª' ¾ƒE”â%ÕT4AϘtãd¹lvƒ>$ e0ì:RC¼v4Tî»u˜‰ÏÔVCËóªÝùÊrò¡´õ´4MÜ
+Œ÷cîaô•45 ð?ÛæV”[ªK*[aÛš—¶,· Ëëz{%ú!‘ÞebÝ“ÐÀI·#g0 Ö–n`InÇŒD¢Éà© ¤TX.Uq•82ø‰‚CË‚ì?˜™DÆ ‘ÓXá6DÅcZ 47°Ñ®YúvÿgèŒÄ‚ é—a
+ ,Óª­×ÝU(n|û²[ÊÚj:Ï]~åŠ2þa4ýya²*[ä hTØ`öŽŠÑÌg öÝ †·¡¯Â3£Å†ï⽌b`±e¸lq<Åë¤Û¬„1Ä1m‡Ë-…Q‰$Ï£â¼â ,‘\¥F(PØ7ú¬–¢c‘0”na3X†³zs1²<eî¼M±”46˱»®û†”š|»YN3·¿þ¦”…sZhK좭Ì8Ár­wÄwEðÀ€L©tËb<ç„D’
+0™;•—O(ÆäÜï©Äöøú¸/ª=%þ¸> =¹ÖjÁIbx^X“8¨(ÍU)–[ž©ŠÒﯢA3. Jíciö÷0Ðx>D+‡.[¡~Ú^þ)òUœ>%Rl,¶424¸# ÂY¥ðŠÅ–a ‚9ÂÆ*Õ,·Óð   ÂÖ”®ÈšX3Û2Ù
+MXšM½û#hVÂ@² sGÕ—ÐÀ’D7u£.L¶ÛX¾,e!2ÎøXÑ{`]ÃúéÅõ^ëco)’Å[ß„hj}Ìà-E20§íÊÄú˜€mH20§e¸Çú·>ɨ-Ñ]ÖXT‡óJ6ÌÄ–EÙXÀÈö¨l¥I¸%©÷û¾½8+X0!ºÂ5ä @~ÇDG›úæ†Ï*²CxÀYÊŠiœàf¢OrXèa´?Ô™d6t×}ÀwÕM…G¨ FM±ÐÕÒ€.i?®Ð̧ÑoÏ’àØHåêG
+Ïr¾nq8($
+X{15R¡&ùåíÇó·nï##~Ày¹/G»ïûRVót¬£‹>îó0‹
+œr_žüêbÚ#n[ï—~_…ê»Õ„+´íE­#ŽÜg«Jæái:vŠ2ΈäŠdñB‹^ÖCq1ñïEFj—h/´èÓ`sc{X®¯å
+쥼䳴¡‚#€d·´tÉ.°ØÒ¼={:x
+ÜlÓ“ÉbK!õ @`ÀJ·Ðƒðœ–!t0"¨ÀJy Ò[x=”›ø˜îhH<‹'øðz
+£„Ù9Ø)Yl9.Çy xicd±%p‹þß)cŸù%ûEC
+rbŽ!îsè..œÓdÀ´‘ƒ±ÎÕ%ÖEŽ ÚFF;_—hOgß­#c½‡K°g³à{"G`q^.Y˜×ÒHñ‘#0¸  <§eãÃM`À5©4R ˆ¦Á`ã±=Ü-ž#3R`/¶¯ÿt¼íÆ°3¢@á.ÈJ
+&µ»>=ù[芀RìÈLWXlytøQ°|ÜcÁÏAÈ.Ù™ÔR`w7tB€À€»„øÙ†``ñ”aP¨À€
+% ÀãÄBwb‹¿Å Æáí#
+gdn³€m¨»ÞL›÷yôUl¬õý9»Ð3BÜQ$ƺ…~‚^ Ǽ#À¹zªÀ^h_=®ó´ ò‹‘ýáþŸx1¢
+ Xêd±e¹Å!DÅ]àÈi— »ÂbK‰F€ÀPÑ1°bðœ–AE¡DND«´bðbËà=açs\Jÿ§Zƒ÷
+¬;üƒT÷ÉýÀ•÷ÓŸb]°xâ’(å¿Çg'¯ŸDøÁÃï´i{Ñ-TO†)®IÑO%ý.vuܶ-åâøÍë¯Gÿ†K‘üendstream
+endobj
+731 0 obj
+3419
+endobj
+732 0 obj<</Count 57/First 733 0 R/Last 817 0 R>>endobj
+733 0 obj<</Parent 732 0 R/Title(Table of Contents)/Dest[723 0 R/XYZ null 756 null]/Next 734 0 R>>endobj
+734 0 obj<</Parent 732 0 R/Count -1/First 735 0 R/Last 735 0 R/Title(SAMBA Project Documentation)/Dest[480 0 R/XYZ null 750 null]/Prev 733 0 R/Next 736 0 R>>endobj
+735 0 obj<</Parent 734 0 R/Title(SAMBA Team)/Dest[480 0 R/XYZ null 726 null]>>endobj
+736 0 obj<</Parent 732 0 R/Title(Chapter 1. How to Install and Test SAMBA)/Dest[486 0 R/XYZ null 750 null]/Prev 734 0 R/Next 737 0 R>>endobj
+737 0 obj<</Parent 732 0 R/Title(Step 0: Read the man pages)/Dest[489 0 R/XYZ null 750 null]/Prev 736 0 R/Next 738 0 R>>endobj
+738 0 obj<</Parent 732 0 R/Title(Step 1: Building the Binaries)/Dest[492 0 R/XYZ null 750 null]/Prev 737 0 R/Next 739 0 R>>endobj
+739 0 obj<</Parent 732 0 R/Title(Step 2: The all important step)/Dest[495 0 R/XYZ null 750 null]/Prev 738 0 R/Next 740 0 R>>endobj
+740 0 obj<</Parent 732 0 R/Title(Step 3: Create the smb configuration file.)/Dest[498 0 R/XYZ null 750 null]/Prev 739 0 R/Next 741 0 R>>endobj
+741 0 obj<</Parent 732 0 R/Title(Step 4: Test your config file with testparm)/Dest[501 0 R/XYZ null 750 null]/Prev 740 0 R/Next 742 0 R>>endobj
+742 0 obj<</Parent 732 0 R/Count -2/First 743 0 R/Last 744 0 R/Title(Step 5: Starting the smbd and nmbd)/Dest[504 0 R/XYZ null 750 null]/Prev 741 0 R/Next 745 0 R>>endobj
+743 0 obj<</Parent 742 0 R/Title(Step 5a: Starting from inetd.conf)/Dest[504 0 R/XYZ null 592 null]/Next 744 0 R>>endobj
+744 0 obj<</Parent 742 0 R/Title(Step 5b. Alternative: starting it as a daemon)/Dest[507 0 R/XYZ null 750 null]/Prev 743 0 R>>endobj
+745 0 obj<</Parent 732 0 R/Title(Step 6: Try listing the shares available on your server)/Dest[510 0 R/XYZ null 750 null]/Prev 742 0 R/Next 746 0 R>>endobj
+746 0 obj<</Parent 732 0 R/Title(Step 7: Try connecting with the unix client)/Dest[513 0 R/XYZ null 750 null]/Prev 745 0 R/Next 747 0 R>>endobj
+747 0 obj<</Parent 732 0 R/Title(Step 8: Try connecting from a DOS, WfWg, Win9x, WinNT, Win2k, OS/2, etc... client)/Dest[516 0 R/XYZ null 750 null]/Prev 746 0 R/Next 748 0 R>>endobj
+748 0 obj<</Parent 732 0 R/Count -7/First 749 0 R/Last 755 0 R/Title(What If Things Don't Work?)/Dest[519 0 R/XYZ null 750 null]/Prev 747 0 R/Next 756 0 R>>endobj
+749 0 obj<</Parent 748 0 R/Title(Diagnosing Problems)/Dest[519 0 R/XYZ null 566 null]/Next 750 0 R>>endobj
+750 0 obj<</Parent 748 0 R/Title(Scope IDs)/Dest[519 0 R/XYZ null 491 null]/Prev 749 0 R/Next 751 0 R>>endobj
+751 0 obj<</Parent 748 0 R/Title(Choosing the Protocol Level)/Dest[519 0 R/XYZ null 376 null]/Prev 750 0 R/Next 752 0 R>>endobj
+752 0 obj<</Parent 748 0 R/Title(Printing from UNIX to a Client PC)/Dest[522 0 R/XYZ null 722 null]/Prev 751 0 R/Next 753 0 R>>endobj
+753 0 obj<</Parent 748 0 R/Title(Locking)/Dest[522 0 R/XYZ null 594 null]/Prev 752 0 R/Next 754 0 R>>endobj
+754 0 obj<</Parent 748 0 R/Title(Mapping Usernames)/Dest[525 0 R/XYZ null 750 null]/Prev 753 0 R/Next 755 0 R>>endobj
+755 0 obj<</Parent 748 0 R/Title(Other Character Sets)/Dest[525 0 R/XYZ null 675 null]/Prev 754 0 R>>endobj
+756 0 obj<</Parent 732 0 R/Title(Chapter 2. LanMan and NT Password Encryption in Samba 2.x)/Dest[528 0 R/XYZ null 750 null]/Prev 748 0 R/Next 757 0 R>>endobj
+757 0 obj<</Parent 732 0 R/Title(Introduction)/Dest[531 0 R/XYZ null 750 null]/Prev 756 0 R/Next 758 0 R>>endobj
+758 0 obj<</Parent 732 0 R/Title(How does it work?)/Dest[534 0 R/XYZ null 750 null]/Prev 757 0 R/Next 759 0 R>>endobj
+759 0 obj<</Parent 732 0 R/Count -2/First 760 0 R/Last 761 0 R/Title(Important Notes About Security)/Dest[537 0 R/XYZ null 750 null]/Prev 758 0 R/Next 762 0 R>>endobj
+760 0 obj<</Parent 759 0 R/Title(Advantages of SMB Encryption)/Dest[537 0 R/XYZ null 184 null]/Next 761 0 R>>endobj
+761 0 obj<</Parent 759 0 R/Title(Advantages of non-encrypted passwords)/Dest[540 0 R/XYZ null 682 null]/Prev 760 0 R>>endobj
+762 0 obj<</Parent 732 0 R/Title(The smbpasswd file)/Dest[543 0 R/XYZ null 750 null]/Prev 759 0 R/Next 763 0 R>>endobj
+763 0 obj<</Parent 732 0 R/Title(The smbpasswd Command)/Dest[549 0 R/XYZ null 750 null]/Prev 762 0 R/Next 764 0 R>>endobj
+764 0 obj<</Parent 732 0 R/Title(Setting up Samba to support LanManager Encryption)/Dest[552 0 R/XYZ null 750 null]/Prev 763 0 R/Next 765 0 R>>endobj
+765 0 obj<</Parent 732 0 R/Title(Chapter 3. Hosting a Microsoft Distributed File System tree on Samba)/Dest[555 0 R/XYZ null 750 null]/Prev 764 0 R/Next 766 0 R>>endobj
+766 0 obj<</Parent 732 0 R/Count -1/First 767 0 R/Last 767 0 R/Title(Instructions)/Dest[558 0 R/XYZ null 750 null]/Prev 765 0 R/Next 768 0 R>>endobj
+767 0 obj<</Parent 766 0 R/Title(Notes)/Dest[561 0 R/XYZ null 735 null]>>endobj
+768 0 obj<</Parent 732 0 R/Title(Chapter 4. Printing Support in Samba 2.2.x)/Dest[564 0 R/XYZ null 750 null]/Prev 766 0 R/Next 769 0 R>>endobj
+769 0 obj<</Parent 732 0 R/Title(Introduction)/Dest[567 0 R/XYZ null 750 null]/Prev 768 0 R/Next 770 0 R>>endobj
+770 0 obj<</Parent 732 0 R/Count -1/First 771 0 R/Last 771 0 R/Title(Configuration)/Dest[570 0 R/XYZ null 750 null]/Prev 769 0 R/Next 772 0 R>>endobj
+771 0 obj<</Parent 770 0 R/Title(Support a large number of printers)/Dest[576 0 R/XYZ null 722 null]>>endobj
+772 0 obj<</Parent 732 0 R/Count -4/First 773 0 R/Last 776 0 R/Title(The Imprints Toolset)/Dest[579 0 R/XYZ null 750 null]/Prev 770 0 R/Next 777 0 R>>endobj
+773 0 obj<</Parent 772 0 R/Title(What is Imprints?)/Dest[579 0 R/XYZ null 645 null]/Next 774 0 R>>endobj
+774 0 obj<</Parent 772 0 R/Title(Creating Printer Driver Packages)/Dest[579 0 R/XYZ null 438 null]/Prev 773 0 R/Next 775 0 R>>endobj
+775 0 obj<</Parent 772 0 R/Title(The Imprints server)/Dest[579 0 R/XYZ null 336 null]/Prev 774 0 R/Next 776 0 R>>endobj
+776 0 obj<</Parent 772 0 R/Title(The Installation Client)/Dest[579 0 R/XYZ null 221 null]/Prev 775 0 R>>endobj
+777 0 obj<</Parent 732 0 R/Title(Migration to from Samba 2.0.x to 2.2.x)/Dest[585 0 R/XYZ null 750 null]/Prev 772 0 R/Next 778 0 R>>endobj
+778 0 obj<</Parent 732 0 R/Title(Chapter 5. security = domain in Samba 2.x)/Dest[588 0 R/XYZ null 750 null]/Prev 777 0 R/Next 779 0 R>>endobj
+779 0 obj<</Parent 732 0 R/Title(Joining an NT Domain with Samba 2.2)/Dest[591 0 R/XYZ null 750 null]/Prev 778 0 R/Next 780 0 R>>endobj
+780 0 obj<</Parent 732 0 R/Title(Samba and Windows 2000 Domains)/Dest[597 0 R/XYZ null 750 null]/Prev 779 0 R/Next 781 0 R>>endobj
+781 0 obj<</Parent 732 0 R/Title(Why is this better than security = server?)/Dest[600 0 R/XYZ null 750 null]/Prev 780 0 R/Next 782 0 R>>endobj
+782 0 obj<</Parent 732 0 R/Title(Chapter 6. How to Configure Samba 2.2.x as a Primary Domain Controller)/Dest[603 0 R/XYZ null 750 null]/Prev 781 0 R/Next 783 0 R>>endobj
+783 0 obj<</Parent 732 0 R/Title(Background)/Dest[606 0 R/XYZ null 750 null]/Prev 782 0 R/Next 784 0 R>>endobj
+784 0 obj<</Parent 732 0 R/Title(Configuring the Samba Domain Controller)/Dest[612 0 R/XYZ null 750 null]/Prev 783 0 R/Next 785 0 R>>endobj
+785 0 obj<</Parent 732 0 R/Title(Creating Machine Trust Accounts and Joining Clients to the Domain)/Dest[618 0 R/XYZ null 750 null]/Prev 784 0 R/Next 786 0 R>>endobj
+786 0 obj<</Parent 732 0 R/Title(Common Problems and Errors)/Dest[624 0 R/XYZ null 750 null]/Prev 785 0 R/Next 787 0 R>>endobj
+787 0 obj<</Parent 732 0 R/Title(System Policies and Profiles)/Dest[630 0 R/XYZ null 750 null]/Prev 786 0 R/Next 788 0 R>>endobj
+788 0 obj<</Parent 732 0 R/Count -2/First 789 0 R/Last 790 0 R/Title(What other help can I get ?)/Dest[636 0 R/XYZ null 750 null]/Prev 787 0 R/Next 791 0 R>>endobj
+789 0 obj<</Parent 788 0 R/Title(URLs and similar)/Dest[639 0 R/XYZ null 247 null]/Next 790 0 R>>endobj
+790 0 obj<</Parent 788 0 R/Title(Mailing Lists)/Dest[642 0 R/XYZ null 590 null]/Prev 789 0 R>>endobj
+791 0 obj<</Parent 732 0 R/Title(DOMAIN_CONTROL.txt : Windows NT Domain Control & Samba)/Dest[648 0 R/XYZ null 750 null]/Prev 788 0 R/Next 792 0 R>>endobj
+792 0 obj<</Parent 732 0 R/Title(Chapter 7. Unifed Logons between Windows NT and UNIX using Winbind)/Dest[654 0 R/XYZ null 750 null]/Prev 791 0 R/Next 793 0 R>>endobj
+793 0 obj<</Parent 732 0 R/Title(Abstract)/Dest[657 0 R/XYZ null 750 null]/Prev 792 0 R/Next 794 0 R>>endobj
+794 0 obj<</Parent 732 0 R/Title(Introduction)/Dest[660 0 R/XYZ null 750 null]/Prev 793 0 R/Next 795 0 R>>endobj
+795 0 obj<</Parent 732 0 R/Count -1/First 796 0 R/Last 796 0 R/Title(What Winbind Provides)/Dest[663 0 R/XYZ null 750 null]/Prev 794 0 R/Next 797 0 R>>endobj
+796 0 obj<</Parent 795 0 R/Title(Target Uses)/Dest[663 0 R/XYZ null 407 null]>>endobj
+797 0 obj<</Parent 732 0 R/Count -5/First 798 0 R/Last 802 0 R/Title(How Winbind Works)/Dest[666 0 R/XYZ null 750 null]/Prev 795 0 R/Next 803 0 R>>endobj
+798 0 obj<</Parent 797 0 R/Title(Microsoft Remote Procedure Calls)/Dest[666 0 R/XYZ null 632 null]/Next 799 0 R>>endobj
+799 0 obj<</Parent 797 0 R/Title(Name Service Switch)/Dest[666 0 R/XYZ null 425 null]/Prev 798 0 R/Next 800 0 R>>endobj
+800 0 obj<</Parent 797 0 R/Title(Pluggable Authentication Modules)/Dest[669 0 R/XYZ null 643 null]/Prev 799 0 R/Next 801 0 R>>endobj
+801 0 obj<</Parent 797 0 R/Title(User and Group ID Allocation)/Dest[669 0 R/XYZ null 330 null]/Prev 800 0 R/Next 802 0 R>>endobj
+802 0 obj<</Parent 797 0 R/Title(Result Caching)/Dest[672 0 R/XYZ null 750 null]/Prev 801 0 R>>endobj
+803 0 obj<</Parent 732 0 R/Title(Installation and Configuration)/Dest[675 0 R/XYZ null 750 null]/Prev 797 0 R/Next 804 0 R>>endobj
+804 0 obj<</Parent 732 0 R/Title(Limitations)/Dest[678 0 R/XYZ null 750 null]/Prev 803 0 R/Next 805 0 R>>endobj
+805 0 obj<</Parent 732 0 R/Title(Conclusion)/Dest[681 0 R/XYZ null 750 null]/Prev 804 0 R/Next 806 0 R>>endobj
+806 0 obj<</Parent 732 0 R/Title(Chapter 8. UNIX Permission Bits and WIndows NT Access Control Lists)/Dest[684 0 R/XYZ null 750 null]/Prev 805 0 R/Next 807 0 R>>endobj
+807 0 obj<</Parent 732 0 R/Title(Viewing and changing UNIX permissions using the NT security dialogs)/Dest[687 0 R/XYZ null 750 null]/Prev 806 0 R/Next 808 0 R>>endobj
+808 0 obj<</Parent 732 0 R/Title(How to view file security on a Samba share)/Dest[690 0 R/XYZ null 750 null]/Prev 807 0 R/Next 809 0 R>>endobj
+809 0 obj<</Parent 732 0 R/Title(Viewing file ownership)/Dest[693 0 R/XYZ null 750 null]/Prev 808 0 R/Next 810 0 R>>endobj
+810 0 obj<</Parent 732 0 R/Count -2/First 811 0 R/Last 812 0 R/Title(Viewing file or directory permissions)/Dest[696 0 R/XYZ null 750 null]/Prev 809 0 R/Next 813 0 R>>endobj
+811 0 obj<</Parent 810 0 R/Title(File Permissions)/Dest[696 0 R/XYZ null 513 null]/Next 812 0 R>>endobj
+812 0 obj<</Parent 810 0 R/Title(Directory Permissions)/Dest[696 0 R/XYZ null 253 null]/Prev 811 0 R>>endobj
+813 0 obj<</Parent 732 0 R/Title(Modifying file or directory permissions)/Dest[702 0 R/XYZ null 750 null]/Prev 810 0 R/Next 814 0 R>>endobj
+814 0 obj<</Parent 732 0 R/Title(Interaction with the standard Samba create mask parameters)/Dest[705 0 R/XYZ null 750 null]/Prev 813 0 R/Next 815 0 R>>endobj
+815 0 obj<</Parent 732 0 R/Title(Interaction with the standard Samba file attribute mapping)/Dest[711 0 R/XYZ null 750 null]/Prev 814 0 R/Next 816 0 R>>endobj
+816 0 obj<</Parent 732 0 R/Title(Chapter 9. OS2 Client HOWTO)/Dest[714 0 R/XYZ null 750 null]/Prev 815 0 R/Next 817 0 R>>endobj
+817 0 obj<</Parent 732 0 R/Count -4/First 818 0 R/Last 821 0 R/Title(FAQs)/Dest[717 0 R/XYZ null 750 null]/Prev 816 0 R>>endobj
+818 0 obj<</Parent 817 0 R/Title(How can I configure OS/2 Warp Connect or OS/2 Warp 4 as a client for Samba?)/Dest[717 0 R/XYZ null 726 null]/Next 819 0 R>>endobj
+819 0 obj<</Parent 817 0 R/Title(How can I configure OS/2 Warp 3 \(not Connect\), OS/2 1.2, 1.3 or 2.x for Samba?)/Dest[717 0 R/XYZ null 301 null]/Prev 818 0 R/Next 820 0 R>>endobj
+820 0 obj<</Parent 817 0 R/Title(Are there any other issues when OS/2 \(any version\) is used as a client?)/Dest[720 0 R/XYZ null 735 null]/Prev 819 0 R/Next 821 0 R>>endobj
+821 0 obj<</Parent 817 0 R/Title(How do I get printer driver download working for OS/2 clients?)/Dest[720 0 R/XYZ null 600 null]/Prev 820 0 R>>endobj
+822 0 obj<</Type/Catalog/Pages 476 0 R/Names 382 0 R/PageLayout/SinglePage/Outlines 732 0 R/OpenAction[480 0 R/XYZ null null null]/PageMode/UseOutlines/PageLabels<</Nums[0<</P(title)>>1<</S/r>>4<</S/D>>]>>>>endobj
xref
-0 824
+0 823
0000000000 65535 f
0000000015 00000 n
0000000244 00000 n
@@ -1885,821 +1942,820 @@ xref
0000002209 00000 n
0000002286 00000 n
0000002365 00000 n
-0000002442 00000 n
-0000002524 00000 n
-0000002583 00000 n
-0000002635 00000 n
-0000002720 00000 n
-0000002773 00000 n
-0000002857 00000 n
-0000002888 00000 n
-0000002940 00000 n
-0000003025 00000 n
-0000003049 00000 n
-0000003095 00000 n
-0000003180 00000 n
-0000003225 00000 n
-0000003309 00000 n
-0000003354 00000 n
-0000003438 00000 n
-0000003476 00000 n
-0000003519 00000 n
-0000003604 00000 n
-0000003647 00000 n
-0000003731 00000 n
-0000003762 00000 n
-0000003816 00000 n
-0000003901 00000 n
-0000003925 00000 n
-0000003976 00000 n
-0000004061 00000 n
-0000004109 00000 n
-0000004194 00000 n
-0000004225 00000 n
-0000004343 00000 n
-0000004427 00000 n
-0000004468 00000 n
-0000004553 00000 n
-0000004594 00000 n
-0000004679 00000 n
-0000004717 00000 n
-0000004761 00000 n
-0000004846 00000 n
+0000002449 00000 n
+0000002526 00000 n
+0000002608 00000 n
+0000002667 00000 n
+0000002771 00000 n
+0000002876 00000 n
+0000002981 00000 n
+0000003086 00000 n
+0000003191 00000 n
+0000003296 00000 n
+0000003401 00000 n
+0000003506 00000 n
+0000003611 00000 n
+0000003716 00000 n
+0000003821 00000 n
+0000003926 00000 n
+0000004031 00000 n
+0000004136 00000 n
+0000004241 00000 n
+0000004346 00000 n
+0000004451 00000 n
+0000004556 00000 n
+0000004661 00000 n
+0000004766 00000 n
0000004870 00000 n
-0000004914 00000 n
-0000004998 00000 n
-0000005040 00000 n
-0000005125 00000 n
-0000005174 00000 n
-0000005259 00000 n
-0000005308 00000 n
-0000005391 00000 n
-0000005438 00000 n
-0000005523 00000 n
-0000005569 00000 n
-0000005653 00000 n
-0000005712 00000 n
-0000005774 00000 n
-0000005859 00000 n
-0000005916 00000 n
-0000006001 00000 n
-0000006094 00000 n
-0000006178 00000 n
-0000006216 00000 n
-0000006321 00000 n
-0000006362 00000 n
-0000006446 00000 n
-0000006488 00000 n
-0000006573 00000 n
-0000006612 00000 n
-0000006697 00000 n
-0000006739 00000 n
-0000006824 00000 n
-0000006866 00000 n
-0000006951 00000 n
-0000007010 00000 n
-0000007054 00000 n
-0000007139 00000 n
-0000007163 00000 n
-0000007210 00000 n
-0000007295 00000 n
-0000007347 00000 n
-0000007432 00000 n
-0000007481 00000 n
-0000007566 00000 n
-0000007615 00000 n
-0000007699 00000 n
-0000007744 00000 n
-0000007796 00000 n
-0000007881 00000 n
-0000007929 00000 n
+0000004975 00000 n
+0000005080 00000 n
+0000005185 00000 n
+0000005290 00000 n
+0000005395 00000 n
+0000005500 00000 n
+0000005605 00000 n
+0000005710 00000 n
+0000005814 00000 n
+0000005919 00000 n
+0000006024 00000 n
+0000006128 00000 n
+0000006233 00000 n
+0000006338 00000 n
+0000006443 00000 n
+0000006548 00000 n
+0000006653 00000 n
+0000006758 00000 n
+0000006863 00000 n
+0000006967 00000 n
+0000007070 00000 n
+0000007172 00000 n
+0000007490 00000 n
+0000007595 00000 n
+0000007700 00000 n
+0000007805 00000 n
+0000007909 00000 n
0000008014 00000 n
-0000008062 00000 n
-0000008147 00000 n
-0000008211 00000 n
-0000008298 00000 n
-0000008346 00000 n
-0000008410 00000 n
-0000008495 00000 n
-0000008521 00000 n
-0000008569 00000 n
-0000008656 00000 n
-0000008703 00000 n
-0000008789 00000 n
-0000008830 00000 n
-0000008915 00000 n
-0000008957 00000 n
-0000008999 00000 n
-0000009086 00000 n
-0000009135 00000 n
-0000009222 00000 n
-0000009269 00000 n
-0000009356 00000 n
-0000009398 00000 n
-0000009451 00000 n
-0000009538 00000 n
-0000009582 00000 n
-0000009669 00000 n
-0000009726 00000 n
-0000009813 00000 n
-0000009909 00000 n
-0000009995 00000 n
-0000010045 00000 n
-0000010092 00000 n
-0000010179 00000 n
-0000010226 00000 n
-0000010313 00000 n
-0000010362 00000 n
-0000010448 00000 n
-0000010495 00000 n
-0000010582 00000 n
-0000010632 00000 n
-0000010679 00000 n
-0000010766 00000 n
-0000010813 00000 n
-0000010898 00000 n
-0000010942 00000 n
-0000011028 00000 n
-0000011070 00000 n
-0000011156 00000 n
-0000011196 00000 n
-0000011282 00000 n
-0000011330 00000 n
-0000011416 00000 n
-0000011461 00000 n
-0000011547 00000 n
-0000011591 00000 n
-0000011677 00000 n
-0000011728 00000 n
-0000011814 00000 n
-0000011863 00000 n
-0000011949 00000 n
-0000011994 00000 n
-0000012080 00000 n
-0000012122 00000 n
-0000012208 00000 n
-0000012251 00000 n
-0000012337 00000 n
-0000012379 00000 n
-0000012465 00000 n
-0000012509 00000 n
-0000012595 00000 n
-0000012632 00000 n
-0000012718 00000 n
-0000012760 00000 n
-0000012846 00000 n
-0000012888 00000 n
-0000012974 00000 n
-0000013011 00000 n
-0000013095 00000 n
-0000013137 00000 n
-0000013221 00000 n
-0000013399 00000 n
-0000013442 00000 n
-0000013528 00000 n
-0000013574 00000 n
-0000013660 00000 n
-0000013707 00000 n
-0000013794 00000 n
-0000013843 00000 n
-0000013930 00000 n
-0000013979 00000 n
-0000014065 00000 n
-0000014114 00000 n
-0000014201 00000 n
+0000008119 00000 n
+0000008224 00000 n
+0000008329 00000 n
+0000008434 00000 n
+0000008539 00000 n
+0000008644 00000 n
+0000008749 00000 n
+0000008854 00000 n
+0000008958 00000 n
+0000009063 00000 n
+0000009168 00000 n
+0000009273 00000 n
+0000009378 00000 n
+0000009483 00000 n
+0000009588 00000 n
+0000009693 00000 n
+0000009798 00000 n
+0000009903 00000 n
+0000010008 00000 n
+0000010113 00000 n
+0000010218 00000 n
+0000010323 00000 n
+0000010427 00000 n
+0000010532 00000 n
+0000010637 00000 n
+0000010742 00000 n
+0000010847 00000 n
+0000010952 00000 n
+0000011057 00000 n
+0000011162 00000 n
+0000011267 00000 n
+0000011372 00000 n
+0000011476 00000 n
+0000011581 00000 n
+0000011686 00000 n
+0000011791 00000 n
+0000011896 00000 n
+0000012002 00000 n
+0000012322 00000 n
+0000012375 00000 n
+0000012462 00000 n
+0000012488 00000 n
+0000012594 00000 n
+0000012620 00000 n
+0000012739 00000 n
+0000012825 00000 n
+0000012867 00000 n
+0000012954 00000 n
+0000012996 00000 n
+0000013083 00000 n
+0000013125 00000 n
+0000013188 00000 n
+0000013275 00000 n
+0000013333 00000 n
+0000013420 00000 n
+0000013454 00000 n
+0000013560 00000 n
+0000013602 00000 n
+0000013688 00000 n
+0000013731 00000 n
+0000013818 00000 n
+0000013858 00000 n
+0000013945 00000 n
+0000013988 00000 n
+0000014075 00000 n
+0000014133 00000 n
+0000014180 00000 n
0000014267 00000 n
-0000014315 00000 n
-0000014401 00000 n
-0000014447 00000 n
-0000014534 00000 n
-0000014568 00000 n
-0000014683 00000 n
-0000014770 00000 n
-0000014796 00000 n
-0000014878 00000 n
-0000014965 00000 n
-0000015050 00000 n
-0000015137 00000 n
-0000015192 00000 n
-0000015277 00000 n
-0000015319 00000 n
+0000014293 00000 n
+0000014341 00000 n
+0000014428 00000 n
+0000014454 00000 n
+0000014518 00000 n
+0000014605 00000 n
+0000014631 00000 n
+0000014695 00000 n
+0000014782 00000 n
+0000014808 00000 n
+0000014856 00000 n
+0000014943 00000 n
+0000014990 00000 n
+0000015077 00000 n
+0000015118 00000 n
+0000015204 00000 n
+0000015246 00000 n
+0000015288 00000 n
0000015375 00000 n
-0000015462 00000 n
-0000015510 00000 n
-0000015597 00000 n
-0000015671 00000 n
-0000015756 00000 n
-0000015798 00000 n
-0000015866 00000 n
-0000015953 00000 n
-0000016007 00000 n
-0000016094 00000 n
-0000016162 00000 n
-0000016249 00000 n
-0000016323 00000 n
-0000016410 00000 n
-0000016458 00000 n
-0000016545 00000 n
+0000015424 00000 n
+0000015511 00000 n
+0000015558 00000 n
+0000015645 00000 n
+0000015687 00000 n
+0000015740 00000 n
+0000015827 00000 n
+0000015871 00000 n
+0000015958 00000 n
+0000016015 00000 n
+0000016102 00000 n
+0000016198 00000 n
+0000016284 00000 n
+0000016334 00000 n
+0000016383 00000 n
+0000016470 00000 n
+0000016517 00000 n
0000016602 00000 n
-0000016689 00000 n
-0000016744 00000 n
-0000016831 00000 n
-0000016912 00000 n
-0000016999 00000 n
-0000017081 00000 n
+0000016636 00000 n
+0000016683 00000 n
+0000016770 00000 n
+0000016817 00000 n
+0000016902 00000 n
+0000016946 00000 n
+0000017032 00000 n
+0000017074 00000 n
0000017160 00000 n
-0000017247 00000 n
-0000017329 00000 n
-0000017415 00000 n
-0000017490 00000 n
-0000017577 00000 n
-0000017650 00000 n
-0000017737 00000 n
-0000017787 00000 n
-0000017865 00000 n
-0000017952 00000 n
-0000017978 00000 n
-0000018041 00000 n
-0000018128 00000 n
-0000018191 00000 n
-0000018278 00000 n
-0000018332 00000 n
-0000018419 00000 n
-0000018461 00000 n
-0000018566 00000 n
-0000018672 00000 n
-0000018778 00000 n
-0000018884 00000 n
-0000018990 00000 n
-0000019096 00000 n
-0000019202 00000 n
-0000019308 00000 n
-0000019414 00000 n
-0000019520 00000 n
-0000019626 00000 n
-0000019732 00000 n
-0000019838 00000 n
-0000019944 00000 n
-0000020050 00000 n
-0000020156 00000 n
-0000020262 00000 n
-0000020368 00000 n
-0000020474 00000 n
-0000020580 00000 n
-0000020685 00000 n
-0000020791 00000 n
-0000020897 00000 n
-0000021003 00000 n
-0000021109 00000 n
-0000021215 00000 n
-0000021321 00000 n
-0000021427 00000 n
-0000021533 00000 n
-0000021639 00000 n
-0000021745 00000 n
-0000021851 00000 n
-0000021957 00000 n
-0000022063 00000 n
-0000022169 00000 n
-0000022275 00000 n
-0000022381 00000 n
-0000022487 00000 n
-0000022593 00000 n
-0000022698 00000 n
-0000022804 00000 n
-0000022910 00000 n
-0000023016 00000 n
-0000023119 00000 n
-0000023223 00000 n
-0000023601 00000 n
-0000023707 00000 n
-0000023812 00000 n
-0000023918 00000 n
-0000024024 00000 n
-0000024130 00000 n
-0000024236 00000 n
-0000024342 00000 n
-0000024448 00000 n
-0000024554 00000 n
-0000024660 00000 n
-0000024766 00000 n
-0000024871 00000 n
-0000024977 00000 n
-0000025083 00000 n
-0000025189 00000 n
-0000025295 00000 n
-0000025401 00000 n
-0000025507 00000 n
-0000025613 00000 n
-0000025719 00000 n
-0000025825 00000 n
-0000025931 00000 n
-0000026037 00000 n
-0000026143 00000 n
-0000026249 00000 n
-0000026354 00000 n
-0000026460 00000 n
-0000026566 00000 n
-0000026672 00000 n
-0000026777 00000 n
-0000026883 00000 n
-0000026989 00000 n
-0000027095 00000 n
-0000027201 00000 n
-0000027307 00000 n
-0000027413 00000 n
-0000027519 00000 n
-0000027625 00000 n
-0000027731 00000 n
-0000027837 00000 n
-0000027943 00000 n
-0000028048 00000 n
-0000028152 00000 n
-0000028514 00000 n
-0000028619 00000 n
-0000028725 00000 n
-0000028831 00000 n
-0000028937 00000 n
-0000029043 00000 n
-0000029149 00000 n
-0000029255 00000 n
-0000029361 00000 n
-0000029467 00000 n
-0000029573 00000 n
-0000029679 00000 n
-0000029785 00000 n
-0000029891 00000 n
-0000029997 00000 n
-0000030102 00000 n
-0000030208 00000 n
-0000030314 00000 n
-0000030420 00000 n
-0000030526 00000 n
-0000030632 00000 n
-0000030737 00000 n
-0000030843 00000 n
-0000030949 00000 n
-0000031055 00000 n
-0000031161 00000 n
-0000031379 00000 n
-0000031413 00000 n
-0000031447 00000 n
-0000033490 00000 n
-0000033539 00000 n
-0000033588 00000 n
-0000033637 00000 n
-0000033686 00000 n
-0000033735 00000 n
-0000033784 00000 n
-0000033833 00000 n
-0000033882 00000 n
-0000033931 00000 n
-0000033980 00000 n
-0000034029 00000 n
-0000034078 00000 n
-0000034127 00000 n
-0000034176 00000 n
-0000034225 00000 n
-0000034274 00000 n
-0000034323 00000 n
-0000034372 00000 n
-0000034421 00000 n
-0000034470 00000 n
-0000034519 00000 n
-0000034568 00000 n
-0000034617 00000 n
-0000034666 00000 n
-0000034715 00000 n
-0000034764 00000 n
-0000034813 00000 n
-0000034862 00000 n
-0000034911 00000 n
-0000034960 00000 n
-0000035009 00000 n
-0000035058 00000 n
-0000035107 00000 n
-0000035156 00000 n
-0000035205 00000 n
-0000035254 00000 n
-0000035303 00000 n
-0000035352 00000 n
-0000035401 00000 n
-0000035450 00000 n
-0000035499 00000 n
-0000035548 00000 n
-0000035597 00000 n
-0000035646 00000 n
-0000035695 00000 n
-0000035744 00000 n
-0000035793 00000 n
-0000035842 00000 n
-0000035891 00000 n
-0000035940 00000 n
-0000035989 00000 n
-0000036038 00000 n
-0000036087 00000 n
-0000036136 00000 n
-0000036185 00000 n
-0000036234 00000 n
-0000036283 00000 n
-0000036332 00000 n
-0000036381 00000 n
-0000036430 00000 n
-0000036479 00000 n
-0000036528 00000 n
-0000036577 00000 n
-0000036626 00000 n
-0000036675 00000 n
-0000036724 00000 n
-0000036773 00000 n
-0000036822 00000 n
-0000036871 00000 n
-0000036920 00000 n
-0000036969 00000 n
-0000037018 00000 n
-0000037067 00000 n
-0000037116 00000 n
-0000037165 00000 n
-0000037214 00000 n
-0000037263 00000 n
-0000037312 00000 n
-0000037361 00000 n
-0000037410 00000 n
-0000037459 00000 n
-0000037508 00000 n
-0000037557 00000 n
-0000037606 00000 n
-0000037655 00000 n
-0000037704 00000 n
-0000037753 00000 n
-0000037802 00000 n
-0000037851 00000 n
-0000037900 00000 n
-0000037949 00000 n
-0000037998 00000 n
-0000038047 00000 n
-0000038096 00000 n
-0000038145 00000 n
-0000038194 00000 n
-0000038243 00000 n
-0000038292 00000 n
-0000038341 00000 n
-0000038390 00000 n
-0000038439 00000 n
-0000038488 00000 n
-0000038537 00000 n
-0000038586 00000 n
-0000038635 00000 n
-0000038684 00000 n
-0000038733 00000 n
-0000038782 00000 n
-0000038831 00000 n
-0000038880 00000 n
-0000038929 00000 n
-0000038978 00000 n
-0000039027 00000 n
-0000039076 00000 n
-0000039125 00000 n
-0000039174 00000 n
-0000039223 00000 n
-0000039272 00000 n
-0000039321 00000 n
-0000039370 00000 n
-0000039419 00000 n
-0000039468 00000 n
-0000039517 00000 n
-0000039566 00000 n
-0000039615 00000 n
-0000039664 00000 n
-0000039713 00000 n
-0000040342 00000 n
-0000040489 00000 n
-0000041021 00000 n
-0000041042 00000 n
-0000041216 00000 n
-0000042378 00000 n
-0000042400 00000 n
-0000042551 00000 n
-0000044072 00000 n
-0000044094 00000 n
-0000044254 00000 n
-0000045690 00000 n
-0000045712 00000 n
-0000045890 00000 n
-0000047150 00000 n
-0000047172 00000 n
-0000047314 00000 n
-0000048898 00000 n
-0000048920 00000 n
-0000049053 00000 n
-0000050790 00000 n
-0000050812 00000 n
-0000050945 00000 n
-0000051468 00000 n
-0000051489 00000 n
-0000051650 00000 n
-0000052934 00000 n
-0000052956 00000 n
-0000053117 00000 n
-0000054872 00000 n
-0000054894 00000 n
-0000055054 00000 n
-0000056699 00000 n
-0000056721 00000 n
-0000056863 00000 n
-0000058933 00000 n
-0000058955 00000 n
-0000059097 00000 n
-0000060909 00000 n
-0000060931 00000 n
-0000061073 00000 n
-0000062798 00000 n
-0000062820 00000 n
-0000062971 00000 n
-0000064735 00000 n
-0000064757 00000 n
-0000064932 00000 n
-0000067039 00000 n
-0000067061 00000 n
-0000067221 00000 n
-0000068817 00000 n
-0000068839 00000 n
-0000069014 00000 n
-0000070506 00000 n
-0000070528 00000 n
-0000070680 00000 n
-0000071487 00000 n
-0000071508 00000 n
-0000071659 00000 n
-0000073297 00000 n
-0000073319 00000 n
-0000073484 00000 n
-0000075246 00000 n
-0000075268 00000 n
-0000075433 00000 n
-0000076270 00000 n
-0000076291 00000 n
-0000076465 00000 n
-0000078070 00000 n
-0000078092 00000 n
-0000078235 00000 n
-0000078993 00000 n
-0000079014 00000 n
-0000079197 00000 n
-0000081065 00000 n
-0000081087 00000 n
-0000081256 00000 n
-0000083110 00000 n
-0000083132 00000 n
-0000083292 00000 n
-0000084976 00000 n
-0000084998 00000 n
-0000085171 00000 n
-0000086900 00000 n
-0000086922 00000 n
-0000087073 00000 n
-0000087997 00000 n
-0000088018 00000 n
-0000088202 00000 n
-0000090027 00000 n
-0000090049 00000 n
-0000090223 00000 n
-0000092396 00000 n
-0000092418 00000 n
-0000092611 00000 n
-0000094485 00000 n
-0000094507 00000 n
-0000094691 00000 n
-0000096601 00000 n
-0000096623 00000 n
-0000096799 00000 n
-0000098600 00000 n
-0000098622 00000 n
-0000098792 00000 n
-0000100390 00000 n
-0000100412 00000 n
-0000100615 00000 n
-0000102556 00000 n
-0000102578 00000 n
-0000102692 00000 n
-0000102925 00000 n
-0000102946 00000 n
-0000103130 00000 n
-0000104758 00000 n
-0000104780 00000 n
-0000104955 00000 n
-0000106560 00000 n
-0000106582 00000 n
-0000106757 00000 n
-0000108499 00000 n
-0000108521 00000 n
-0000108706 00000 n
-0000110509 00000 n
-0000110531 00000 n
-0000110697 00000 n
-0000112401 00000 n
-0000112423 00000 n
-0000112599 00000 n
-0000114605 00000 n
-0000114627 00000 n
-0000114821 00000 n
-0000116651 00000 n
-0000116673 00000 n
-0000116842 00000 n
-0000118780 00000 n
-0000118802 00000 n
-0000118996 00000 n
-0000121030 00000 n
-0000121052 00000 n
-0000121228 00000 n
-0000123032 00000 n
-0000123054 00000 n
-0000123220 00000 n
-0000125087 00000 n
-0000125109 00000 n
-0000125275 00000 n
-0000127657 00000 n
-0000127679 00000 n
-0000127821 00000 n
-0000129747 00000 n
-0000129769 00000 n
-0000129911 00000 n
-0000131606 00000 n
-0000131628 00000 n
-0000131788 00000 n
-0000133820 00000 n
-0000133842 00000 n
-0000133993 00000 n
-0000135564 00000 n
-0000135586 00000 n
-0000135728 00000 n
-0000137701 00000 n
-0000137723 00000 n
-0000137874 00000 n
-0000139806 00000 n
-0000139828 00000 n
-0000139970 00000 n
-0000141836 00000 n
-0000141858 00000 n
-0000142018 00000 n
-0000143853 00000 n
-0000143875 00000 n
-0000143998 00000 n
-0000145088 00000 n
-0000145110 00000 n
-0000145262 00000 n
-0000147002 00000 n
-0000147024 00000 n
-0000147166 00000 n
-0000148920 00000 n
-0000148942 00000 n
-0000149093 00000 n
-0000151026 00000 n
-0000151048 00000 n
-0000151199 00000 n
-0000153018 00000 n
-0000153040 00000 n
-0000153183 00000 n
-0000154264 00000 n
-0000154286 00000 n
-0000154453 00000 n
-0000156120 00000 n
-0000156142 00000 n
-0000156299 00000 n
-0000157487 00000 n
-0000157509 00000 n
-0000157666 00000 n
-0000159217 00000 n
-0000159239 00000 n
-0000159389 00000 n
-0000160102 00000 n
-0000160123 00000 n
-0000160280 00000 n
-0000165703 00000 n
-0000165725 00000 n
-0000165882 00000 n
-0000171052 00000 n
-0000171074 00000 n
-0000171231 00000 n
-0000174240 00000 n
-0000174262 00000 n
-0000174318 00000 n
-0000174423 00000 n
-0000174601 00000 n
-0000174720 00000 n
-0000174855 00000 n
-0000174991 00000 n
-0000175139 00000 n
-0000175289 00000 n
-0000175429 00000 n
-0000175570 00000 n
-0000175723 00000 n
-0000175885 00000 n
-0000176034 00000 n
-0000176222 00000 n
-0000176355 00000 n
-0000176483 00000 n
-0000176601 00000 n
-0000176737 00000 n
-0000176879 00000 n
-0000176995 00000 n
-0000177121 00000 n
-0000177237 00000 n
-0000177428 00000 n
-0000177527 00000 n
-0000177675 00000 n
-0000177793 00000 n
-0000177917 00000 n
-0000178039 00000 n
-0000178165 00000 n
-0000178323 00000 n
-0000178453 00000 n
-0000178577 00000 n
-0000178695 00000 n
-0000178813 00000 n
-0000178932 00000 n
-0000179122 00000 n
-0000179308 00000 n
-0000179461 00000 n
-0000179624 00000 n
-0000179775 00000 n
-0000179879 00000 n
-0000180096 00000 n
-0000180202 00000 n
-0000180334 00000 n
-0000180456 00000 n
-0000180661 00000 n
-0000180766 00000 n
-0000180866 00000 n
-0000181070 00000 n
-0000181231 00000 n
-0000181379 00000 n
-0000181507 00000 n
-0000181650 00000 n
-0000181774 00000 n
-0000181903 00000 n
-0000182048 00000 n
-0000182213 00000 n
-0000182365 00000 n
-0000182545 00000 n
-0000182650 00000 n
-0000182769 00000 n
-0000182894 00000 n
-0000183039 00000 n
-0000183181 00000 n
-0000183331 00000 n
-0000183462 00000 n
-0000183588 00000 n
-0000183713 00000 n
-0000183853 00000 n
-0000183980 00000 n
-0000184111 00000 n
-0000184242 00000 n
-0000184420 00000 n
-0000184548 00000 n
-0000184684 00000 n
-0000184819 00000 n
-0000185025 00000 n
-0000185138 00000 n
-0000185254 00000 n
-0000185399 00000 n
-0000185571 00000 n
-0000185719 00000 n
-0000185871 00000 n
-0000186003 00000 n
-0000186137 00000 n
-0000186270 00000 n
-0000186408 00000 n
-0000186558 00000 n
-0000186726 00000 n
-0000186873 00000 n
-0000187078 00000 n
-0000187179 00000 n
-0000187297 00000 n
-0000187424 00000 n
-0000187543 00000 n
-0000187666 00000 n
-0000187806 00000 n
-0000187933 00000 n
-0000188073 00000 n
-0000188209 00000 n
-0000188331 00000 n
-0000188467 00000 n
-0000188584 00000 n
-0000188687 00000 n
-0000188852 00000 n
-0000188950 00000 n
-0000189135 00000 n
-0000189325 00000 n
-0000189508 00000 n
-0000189667 00000 n
-0000189841 00000 n
-0000189947 00000 n
-0000190077 00000 n
-0000190203 00000 n
-0000190313 00000 n
+0000017200 00000 n
+0000017286 00000 n
+0000017334 00000 n
+0000017420 00000 n
+0000017465 00000 n
+0000017551 00000 n
+0000017595 00000 n
+0000017681 00000 n
+0000017732 00000 n
+0000017818 00000 n
+0000017867 00000 n
+0000017953 00000 n
+0000017998 00000 n
+0000018084 00000 n
+0000018126 00000 n
+0000018212 00000 n
+0000018255 00000 n
+0000018341 00000 n
+0000018383 00000 n
+0000018469 00000 n
+0000018513 00000 n
+0000018599 00000 n
+0000018636 00000 n
+0000018722 00000 n
+0000018764 00000 n
+0000018850 00000 n
+0000018892 00000 n
+0000018978 00000 n
+0000019015 00000 n
+0000019101 00000 n
+0000019143 00000 n
+0000019229 00000 n
+0000019272 00000 n
+0000019358 00000 n
+0000019404 00000 n
+0000019490 00000 n
+0000019537 00000 n
+0000019622 00000 n
+0000019824 00000 n
+0000019873 00000 n
+0000019960 00000 n
+0000020009 00000 n
+0000020095 00000 n
+0000020144 00000 n
+0000020231 00000 n
+0000020273 00000 n
+0000020319 00000 n
+0000020404 00000 n
+0000020430 00000 n
+0000020545 00000 n
+0000020632 00000 n
+0000020658 00000 n
+0000020740 00000 n
+0000020827 00000 n
+0000020912 00000 n
+0000020999 00000 n
+0000021033 00000 n
+0000021088 00000 n
+0000021175 00000 n
+0000021231 00000 n
+0000021318 00000 n
+0000021352 00000 n
+0000021400 00000 n
+0000021487 00000 n
+0000021561 00000 n
+0000021646 00000 n
+0000021680 00000 n
+0000021748 00000 n
+0000021835 00000 n
+0000021889 00000 n
+0000021976 00000 n
+0000022044 00000 n
+0000022131 00000 n
+0000022205 00000 n
+0000022292 00000 n
+0000022340 00000 n
+0000022427 00000 n
+0000022484 00000 n
+0000022571 00000 n
+0000022637 00000 n
+0000022692 00000 n
+0000022778 00000 n
+0000022859 00000 n
+0000022946 00000 n
+0000022980 00000 n
+0000023024 00000 n
+0000023111 00000 n
+0000023137 00000 n
+0000023182 00000 n
+0000023268 00000 n
+0000023311 00000 n
+0000023398 00000 n
+0000023448 00000 n
+0000023535 00000 n
+0000023585 00000 n
+0000023670 00000 n
+0000023718 00000 n
+0000023805 00000 n
+0000023863 00000 n
+0000023910 00000 n
+0000023996 00000 n
+0000024022 00000 n
+0000024101 00000 n
+0000024188 00000 n
+0000024270 00000 n
+0000024356 00000 n
+0000024431 00000 n
+0000024518 00000 n
+0000024591 00000 n
+0000024676 00000 n
+0000024726 00000 n
+0000024804 00000 n
+0000024891 00000 n
+0000024917 00000 n
+0000025022 00000 n
+0000025128 00000 n
+0000025233 00000 n
+0000025338 00000 n
+0000025443 00000 n
+0000025548 00000 n
+0000025653 00000 n
+0000025758 00000 n
+0000025863 00000 n
+0000025969 00000 n
+0000026075 00000 n
+0000026180 00000 n
+0000026285 00000 n
+0000026390 00000 n
+0000026495 00000 n
+0000026601 00000 n
+0000026707 00000 n
+0000026813 00000 n
+0000026919 00000 n
+0000027025 00000 n
+0000027131 00000 n
+0000027237 00000 n
+0000027342 00000 n
+0000027447 00000 n
+0000027552 00000 n
+0000027657 00000 n
+0000027763 00000 n
+0000027869 00000 n
+0000027974 00000 n
+0000028077 00000 n
+0000028335 00000 n
+0000028440 00000 n
+0000028545 00000 n
+0000028650 00000 n
+0000028756 00000 n
+0000028861 00000 n
+0000028966 00000 n
+0000029071 00000 n
+0000029177 00000 n
+0000029282 00000 n
+0000029388 00000 n
+0000029494 00000 n
+0000029600 00000 n
+0000029706 00000 n
+0000029811 00000 n
+0000029916 00000 n
+0000030021 00000 n
+0000030126 00000 n
+0000030231 00000 n
+0000030336 00000 n
+0000030441 00000 n
+0000030546 00000 n
+0000030651 00000 n
+0000030756 00000 n
+0000030861 00000 n
+0000030966 00000 n
+0000031072 00000 n
+0000031178 00000 n
+0000031281 00000 n
+0000031523 00000 n
+0000031628 00000 n
+0000031733 00000 n
+0000031838 00000 n
+0000031943 00000 n
+0000032049 00000 n
+0000032154 00000 n
+0000032260 00000 n
+0000032366 00000 n
+0000032472 00000 n
+0000032578 00000 n
+0000032684 00000 n
+0000032789 00000 n
+0000032894 00000 n
+0000032999 00000 n
+0000033104 00000 n
+0000033209 00000 n
+0000033314 00000 n
+0000033419 00000 n
+0000033524 00000 n
+0000033630 00000 n
+0000033736 00000 n
+0000033841 00000 n
+0000033946 00000 n
+0000034051 00000 n
+0000034156 00000 n
+0000034260 00000 n
+0000034366 00000 n
+0000034472 00000 n
+0000034577 00000 n
+0000034681 00000 n
+0000034939 00000 n
+0000034973 00000 n
+0000035007 00000 n
+0000036503 00000 n
+0000036552 00000 n
+0000036601 00000 n
+0000036650 00000 n
+0000036699 00000 n
+0000036748 00000 n
+0000036797 00000 n
+0000036846 00000 n
+0000036895 00000 n
+0000036944 00000 n
+0000036993 00000 n
+0000037042 00000 n
+0000037091 00000 n
+0000037140 00000 n
+0000037189 00000 n
+0000037238 00000 n
+0000037287 00000 n
+0000037336 00000 n
+0000037385 00000 n
+0000037434 00000 n
+0000037483 00000 n
+0000037532 00000 n
+0000037581 00000 n
+0000037630 00000 n
+0000037679 00000 n
+0000037728 00000 n
+0000037777 00000 n
+0000037826 00000 n
+0000037875 00000 n
+0000037924 00000 n
+0000037973 00000 n
+0000038022 00000 n
+0000038071 00000 n
+0000038120 00000 n
+0000038169 00000 n
+0000038218 00000 n
+0000038267 00000 n
+0000038316 00000 n
+0000038365 00000 n
+0000038414 00000 n
+0000038463 00000 n
+0000038512 00000 n
+0000038561 00000 n
+0000038610 00000 n
+0000038659 00000 n
+0000038708 00000 n
+0000038757 00000 n
+0000038806 00000 n
+0000038855 00000 n
+0000038904 00000 n
+0000038953 00000 n
+0000039002 00000 n
+0000039051 00000 n
+0000039100 00000 n
+0000039149 00000 n
+0000039198 00000 n
+0000039247 00000 n
+0000039296 00000 n
+0000039345 00000 n
+0000039394 00000 n
+0000039443 00000 n
+0000039492 00000 n
+0000039541 00000 n
+0000039590 00000 n
+0000039639 00000 n
+0000039688 00000 n
+0000039737 00000 n
+0000039786 00000 n
+0000039835 00000 n
+0000039884 00000 n
+0000039933 00000 n
+0000039982 00000 n
+0000040031 00000 n
+0000040080 00000 n
+0000040129 00000 n
+0000040178 00000 n
+0000040227 00000 n
+0000040276 00000 n
+0000040325 00000 n
+0000040374 00000 n
+0000040423 00000 n
+0000040472 00000 n
+0000040521 00000 n
+0000040570 00000 n
+0000040619 00000 n
+0000040668 00000 n
+0000040717 00000 n
+0000040766 00000 n
+0000040815 00000 n
+0000040864 00000 n
+0000040913 00000 n
+0000040962 00000 n
+0000041711 00000 n
+0000041835 00000 n
+0000042000 00000 n
+0000042020 00000 n
+0000042177 00000 n
+0000045290 00000 n
+0000045312 00000 n
+0000045450 00000 n
+0000048860 00000 n
+0000048882 00000 n
+0000049006 00000 n
+0000049206 00000 n
+0000049227 00000 n
+0000049393 00000 n
+0000049863 00000 n
+0000049884 00000 n
+0000050044 00000 n
+0000050736 00000 n
+0000050757 00000 n
+0000050890 00000 n
+0000051268 00000 n
+0000051289 00000 n
+0000051440 00000 n
+0000052300 00000 n
+0000052321 00000 n
+0000052463 00000 n
+0000052868 00000 n
+0000052889 00000 n
+0000053049 00000 n
+0000054585 00000 n
+0000054607 00000 n
+0000054758 00000 n
+0000055396 00000 n
+0000055417 00000 n
+0000055586 00000 n
+0000056190 00000 n
+0000056211 00000 n
+0000056389 00000 n
+0000056877 00000 n
+0000056898 00000 n
+0000057049 00000 n
+0000057452 00000 n
+0000057473 00000 n
+0000057615 00000 n
+0000059134 00000 n
+0000059156 00000 n
+0000059289 00000 n
+0000061049 00000 n
+0000061071 00000 n
+0000061204 00000 n
+0000061720 00000 n
+0000061741 00000 n
+0000061865 00000 n
+0000062090 00000 n
+0000062111 00000 n
+0000062244 00000 n
+0000062735 00000 n
+0000062756 00000 n
+0000062898 00000 n
+0000064373 00000 n
+0000064395 00000 n
+0000064556 00000 n
+0000066077 00000 n
+0000066099 00000 n
+0000066242 00000 n
+0000066895 00000 n
+0000066916 00000 n
+0000067094 00000 n
+0000068677 00000 n
+0000068699 00000 n
+0000068849 00000 n
+0000069758 00000 n
+0000069779 00000 n
+0000069958 00000 n
+0000071313 00000 n
+0000071335 00000 n
+0000071501 00000 n
+0000072157 00000 n
+0000072178 00000 n
+0000072302 00000 n
+0000072534 00000 n
+0000072555 00000 n
+0000072730 00000 n
+0000074389 00000 n
+0000074411 00000 n
+0000074554 00000 n
+0000075113 00000 n
+0000075134 00000 n
+0000075258 00000 n
+0000075459 00000 n
+0000075480 00000 n
+0000075638 00000 n
+0000076519 00000 n
+0000076540 00000 n
+0000076724 00000 n
+0000078875 00000 n
+0000078897 00000 n
+0000079081 00000 n
+0000080776 00000 n
+0000080798 00000 n
+0000080964 00000 n
+0000081980 00000 n
+0000082001 00000 n
+0000082177 00000 n
+0000083458 00000 n
+0000083480 00000 n
+0000083621 00000 n
+0000084931 00000 n
+0000084953 00000 n
+0000085138 00000 n
+0000086388 00000 n
+0000086410 00000 n
+0000086534 00000 n
+0000086735 00000 n
+0000086756 00000 n
+0000086949 00000 n
+0000088566 00000 n
+0000088588 00000 n
+0000088753 00000 n
+0000089831 00000 n
+0000089853 00000 n
+0000089986 00000 n
+0000090727 00000 n
+0000090748 00000 n
+0000090923 00000 n
+0000092628 00000 n
+0000092650 00000 n
+0000092774 00000 n
+0000093007 00000 n
+0000093028 00000 n
+0000093195 00000 n
+0000094499 00000 n
+0000094521 00000 n
+0000094644 00000 n
+0000095116 00000 n
+0000095137 00000 n
+0000095313 00000 n
+0000096953 00000 n
+0000096975 00000 n
+0000097132 00000 n
+0000097840 00000 n
+0000097861 00000 n
+0000098046 00000 n
+0000099627 00000 n
+0000099649 00000 n
+0000099790 00000 n
+0000100305 00000 n
+0000100326 00000 n
+0000100486 00000 n
+0000102256 00000 n
+0000102278 00000 n
+0000102401 00000 n
+0000102715 00000 n
+0000102736 00000 n
+0000102921 00000 n
+0000104681 00000 n
+0000104703 00000 n
+0000104841 00000 n
+0000105331 00000 n
+0000105352 00000 n
+0000105528 00000 n
+0000107374 00000 n
+0000107396 00000 n
+0000107572 00000 n
+0000108832 00000 n
+0000108854 00000 n
+0000109030 00000 n
+0000110655 00000 n
+0000110677 00000 n
+0000110843 00000 n
+0000111913 00000 n
+0000111934 00000 n
+0000112085 00000 n
+0000113667 00000 n
+0000113689 00000 n
+0000113812 00000 n
+0000114884 00000 n
+0000114906 00000 n
+0000115030 00000 n
+0000115261 00000 n
+0000115282 00000 n
+0000115424 00000 n
+0000116016 00000 n
+0000116037 00000 n
+0000116180 00000 n
+0000117121 00000 n
+0000117142 00000 n
+0000117275 00000 n
+0000118686 00000 n
+0000118708 00000 n
+0000118859 00000 n
+0000120611 00000 n
+0000120633 00000 n
+0000120775 00000 n
+0000122576 00000 n
+0000122598 00000 n
+0000122731 00000 n
+0000123345 00000 n
+0000123366 00000 n
+0000123517 00000 n
+0000124196 00000 n
+0000124217 00000 n
+0000124360 00000 n
+0000125261 00000 n
+0000125282 00000 n
+0000125415 00000 n
+0000125846 00000 n
+0000125867 00000 n
+0000125991 00000 n
+0000126224 00000 n
+0000126245 00000 n
+0000126411 00000 n
+0000127074 00000 n
+0000127095 00000 n
+0000127246 00000 n
+0000128003 00000 n
+0000128024 00000 n
+0000128193 00000 n
+0000129260 00000 n
+0000129281 00000 n
+0000129441 00000 n
+0000131122 00000 n
+0000131144 00000 n
+0000131267 00000 n
+0000131556 00000 n
+0000131577 00000 n
+0000131737 00000 n
+0000133075 00000 n
+0000133097 00000 n
+0000133272 00000 n
+0000134755 00000 n
+0000134777 00000 n
+0000134933 00000 n
+0000135632 00000 n
+0000135653 00000 n
+0000135795 00000 n
+0000136576 00000 n
+0000136597 00000 n
+0000136721 00000 n
+0000136908 00000 n
+0000136929 00000 n
+0000137096 00000 n
+0000138698 00000 n
+0000138720 00000 n
+0000138877 00000 n
+0000140073 00000 n
+0000140095 00000 n
+0000140252 00000 n
+0000143508 00000 n
+0000143530 00000 n
+0000143687 00000 n
+0000146736 00000 n
+0000146758 00000 n
+0000146915 00000 n
+0000150405 00000 n
+0000150427 00000 n
+0000150483 00000 n
+0000150588 00000 n
+0000150752 00000 n
+0000150837 00000 n
+0000150978 00000 n
+0000151105 00000 n
+0000151235 00000 n
+0000151366 00000 n
+0000151509 00000 n
+0000151654 00000 n
+0000151825 00000 n
+0000151946 00000 n
+0000152079 00000 n
+0000152236 00000 n
+0000152380 00000 n
+0000152563 00000 n
+0000152726 00000 n
+0000152833 00000 n
+0000152943 00000 n
+0000153071 00000 n
+0000153205 00000 n
+0000153313 00000 n
+0000153431 00000 n
+0000153539 00000 n
+0000153697 00000 n
+0000153810 00000 n
+0000153928 00000 n
+0000154095 00000 n
+0000154211 00000 n
+0000154336 00000 n
+0000154455 00000 n
+0000154577 00000 n
+0000154727 00000 n
+0000154896 00000 n
+0000155045 00000 n
+0000155125 00000 n
+0000155268 00000 n
+0000155381 00000 n
+0000155531 00000 n
+0000155640 00000 n
+0000155797 00000 n
+0000155902 00000 n
+0000156035 00000 n
+0000156155 00000 n
+0000156266 00000 n
+0000156406 00000 n
+0000156548 00000 n
+0000156684 00000 n
+0000156815 00000 n
+0000156958 00000 n
+0000157129 00000 n
+0000157240 00000 n
+0000157380 00000 n
+0000157547 00000 n
+0000157674 00000 n
+0000157803 00000 n
+0000157967 00000 n
+0000158071 00000 n
+0000158172 00000 n
+0000158327 00000 n
+0000158494 00000 n
+0000158603 00000 n
+0000158716 00000 n
+0000158874 00000 n
+0000158960 00000 n
+0000159114 00000 n
+0000159234 00000 n
+0000159354 00000 n
+0000159487 00000 n
+0000159616 00000 n
+0000159718 00000 n
+0000159849 00000 n
+0000159961 00000 n
+0000160072 00000 n
+0000160240 00000 n
+0000160409 00000 n
+0000160552 00000 n
+0000160675 00000 n
+0000160849 00000 n
+0000160953 00000 n
+0000161062 00000 n
+0000161202 00000 n
+0000161362 00000 n
+0000161522 00000 n
+0000161650 00000 n
+0000161778 00000 n
+0000161942 00000 n
+0000162124 00000 n
+0000162299 00000 n
+0000162450 00000 n
trailer
-<</Size 824/Root 823 0 R/Info 1 0 R/ID[<c95d38276e1add79c959618b3b974053><c95d38276e1add79c959618b3b974053>]>>
+<</Size 823/Root 822 0 R/Info 1 0 R/ID[<e5ac86ee058631f96c14cf1f85636840><e5ac86ee058631f96c14cf1f85636840>]>>
startxref
-190527
+162664
%%EOF
diff --git a/docs/docbook/Makefile.in b/docs/docbook/Makefile.in
index 8167e490f74..bfde74ecde9 100644
--- a/docs/docbook/Makefile.in
+++ b/docs/docbook/Makefile.in
@@ -5,7 +5,7 @@
#
# Please see http://www.samba.org/samba/cvs.html
# for information on getting the latest
-# source and documentation source files.
+# source and doucmentation source files.
#
# Autoconf Variables
@@ -36,8 +36,7 @@ MANPAGES=$(MANDIR)/findsmb.1 $(MANDIR)/smbclient.1 \
$(MANDIR)/smbpasswd.5 $(MANDIR)/testparm.1 $(MANDIR)/samba.7 \
$(MANDIR)/smbpasswd.8 $(MANDIR)/testprns.1 \
$(MANDIR)/smb.conf.5 $(MANDIR)/wbinfo.1 \
- $(MANDIR)/smbcacls.1 $(MANDIR)/smbsh.1 $(MANDIR)/winbindd.8 \
- $(MANDIR)/make_unicodemap.1
+ $(MANDIR)/smbcacls.1 $(MANDIR)/smbsh.1 $(MANDIR)/winbindd.8
SGMLMANSRC=manpages/findsmb.1.sgml manpages/smbclient.1.sgml \
manpages/smbspool.8.sgml manpages/lmhosts.5.sgml \
@@ -51,15 +50,12 @@ SGMLMANSRC=manpages/findsmb.1.sgml manpages/smbclient.1.sgml \
manpages/smbpasswd.8.sgml manpages/testprns.1.sgml \
manpages/smb.conf.5.sgml \
manpages/wbinfo.1.sgml manpages/smbcacls.1.sgml \
- manpages/smbsh.1.sgml manpages/winbindd.8.sgml \
- manpages/make_unicodemap.1.sgml
+ manpages/smbsh.1.sgml manpages/winbindd.8.sgml
HOWTOSRC=projdoc/DOMAIN_MEMBER.sgml projdoc/NT_Security.sgml \
projdoc/msdfs_setup.sgml projdoc/printer_driver2.sgml \
projdoc/UNIX_INSTALL.sgml projdoc/winbind.sgml projdoc/OS2-Client-HOWTO.sgml \
- projdoc/Samba-PDC-HOWTO.sgml projdoc/ENCRYPTION.sgml \
- projdoc/CVS-Access.sgml projdoc/Integrating-with-Windows.sgml \
- projdoc/PAM-Authentication-And-Samba.sgml
+ projdoc/Samba-PDC-HOWTO.sgml projdoc/ENCRYPTION.sgml
FAQSRC=faq/samba-pdc-faq.sgml
@@ -75,7 +71,7 @@ man: $(MANPAGES)
FAQ: $(FAQSRC)
@echo Building SAMBA PDC FAQ...
@(for i in $?; do \
- htmlfile=`echo $$i | sed 's,.*/,,' | sed "s/\.sgml/\.html/g"`; \
+ htmlfile=`basename $$i | sed "s/\.sgml/\.html/g"`; \
echo "Making $$htmlfile"; \
$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl \
-f /tmp/jade.log $$i > ../htmldocs/$$htmlfile; \
@@ -86,13 +82,13 @@ FAQ: $(FAQSRC)
HOWTO: $(HOWTOSRC)
@echo Building HOWTO pages...
@(for i in $?; do \
- htmlfile=`echo $$i | sed 's,.*/,,' | sed "s/\.sgml/\.html/g"`; \
+ htmlfile=`basename $$i | sed "s/\.sgml/\.html/g"`; \
echo "Making $$htmlfile"; \
- cat $$i | $(PERL) scripts/make-article.pl > /tmp/`echo $$i | sed 's,.*/,,'`; \
+ cat $$i | $(PERL) scripts/make-article.pl > /tmp/`basename $$i`; \
$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl \
- -f /tmp/jade.log /tmp/`echo $$i | sed 's,.*/,,'` > ../htmldocs/$$htmlfile; \
+ -f /tmp/jade.log /tmp/`basename $$i` > ../htmldocs/$$htmlfile; \
cat /tmp/jade.log | grep -v DTDDECL; \
- /bin/rm -f /tmp/jade.log /tmp/`echo $$i | sed 's,.*/,,'`; \
+ /bin/rm -f /tmp/jade.log /tmp/`basename $$i`; \
done)
@@ -103,9 +99,8 @@ HOWTO: $(HOWTOSRC)
##
proj-doc:
echo Building Samba-HOWTO-Collections...
- @(cd projdoc; $(JADE) -t sgml -i html -V nochunks -d ../stylesheets/ldp.dsl\#html samba-doc.sgml > ../samba-doc.html)
- @(cd scripts; ./ldp_print ../samba-doc.html)
- @mv -f samba-doc.pdf ../Samba-HOWTO-Collection.pdf
+ @(cd projdoc; $(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl samba-doc.sgml > ../samba-doc.html)
+ @$(HTMLDOC) -f ../Samba-HOWTO-Collection.pdf samba-doc.html
@/bin/mv -f samba-doc.html ../htmldocs/Samba-HOWTO-Collection.html
@@ -116,9 +111,10 @@ proj-doc:
man-html-all: $(SGMLMANSRC)
@echo Building HTML formatted man pages...
@(for i in $?; do \
- htmlfile=`echo $$i | sed 's,.*/,,' | sed "s/\.sgml/\.html/g"`; \
+ htmlfile=`basename $$i | sed "s/\.sgml/\.html/g"`; \
echo "Making $$htmlfile"; \
- $(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html -f /tmp/jade.log $$i > ../htmldocs/$$htmlfile; \
+ $(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl \
+ -f /tmp/jade.log $$i > ../htmldocs/$$htmlfile; \
cat /tmp/jade.log | grep -v DTDDECL; \
/bin/rm -f /tmp/jade.log; \
done)
@@ -127,7 +123,7 @@ man-html-all: $(SGMLMANSRC)
man-all: $(SGMLMANSRC)
@echo Building man pages...
@(for i in $?; do \
- manfile=`echo $$i | sed 's,.*/,,' | sed "s/\.sgml//g"`; \
+ manfile=`basename $$i | sed "s/\.sgml//g"`; \
echo "Making $$manfile"; \
$(ONSGMLS) -f /tmp/docbook2x.log $$i | $(SGMLSPL) \
$(SGML_SHARE)/docbook2X/docbook2man-spec.pl; \
@@ -146,218 +142,210 @@ man-all: $(SGMLMANSRC)
$(MANDIR)/findsmb.1: manpages/findsmb.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbclient.1: manpages/smbclient.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbspool.8: manpages/smbspool.8.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/lmhosts.5: manpages/lmhosts.5.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbcontrol.1: manpages/smbcontrol.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbstatus.1: manpages/smbstatus.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/make_smbcodepage.1: manpages/make_smbcodepage.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
- @echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
-
-$(MANDIR)/make_unicodemap.1: manpages/make_unicodemap.1.sgml
- @echo "Making $@"
- @$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbd.8: manpages/smbd.8.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbtar.1: manpages/smbtar.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/nmbd.8: manpages/nmbd.8.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbmnt.8: manpages/smbmnt.8.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbumount.8: manpages/smbumount.8.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/nmblookup.1: manpages/nmblookup.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbmount.8: manpages/smbmount.8.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/swat.8: manpages/swat.8.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/rpcclient.1: manpages/rpcclient.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbpasswd.5: manpages/smbpasswd.5.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/testparm.1: manpages/testparm.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/samba.7: manpages/samba.7.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbpasswd.8: manpages/smbpasswd.8.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/testprns.1: manpages/testprns.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smb.conf.5: manpages/smb.conf.5.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/wbinfo.1: manpages/wbinfo.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbcacls.1: manpages/smbcacls.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/smbsh.1 : manpages/smbsh.1.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
$(MANDIR)/winbindd.8: manpages/winbindd.8.sgml
@echo "Making $@"
@$(ONSGMLS) $< | $(SGMLSPL) $(SGML_SHARE)/docbook2X/docbook2man-spec.pl
- @cat `echo $@ | sed 's,.*/,,'` | $(PERL) scripts/strip-links.pl > $@
- @/bin/rm -f `echo $@ | sed 's,.*/,,'`
+ @cat `basename $@` | $(PERL) scripts/strip-links.pl > $@
+ @/bin/rm -f `basename $@`
@echo "Making HTML version of $@"
- @$(JADE) -t sgml -i html -V nochunks -d ./stylesheets/ldp.dsl\#html $< > $(HTMLDIR)/`echo $< | sed 's,.*/,,'| sed "s/\.sgml/\.html/g"`
+ @$(JADE) -t sgml -V nochunks -d $(SGML_SHARE)/dsssl/docbook/html/docbook.dsl $< > $(HTMLDIR)/`basename $< | sed "s/\.sgml/\.html/g"`
## Clean Rule
diff --git a/docs/docbook/configure b/docs/docbook/configure
index 23232148ce2..b2403428a23 100755
--- a/docs/docbook/configure
+++ b/docs/docbook/configure
@@ -777,9 +777,9 @@ fi
SGML_SHARE="/usr/local/share/sgml"
-# Check whether --with-sgml-share or --without-sgml-share was given.
-if test "${with_sgml_share+set}" = set; then
- withval="$with_sgml_share"
+# Check whether --with-SGML_SHARE or --without-SGML_SHARE was given.
+if test "${with_SGML_SHARE+set}" = set; then
+ withval="$with_SGML_SHARE"
case "$withval" in
no) SGML_SHARE=""
;;
@@ -795,10 +795,7 @@ esac
fi
-# The Makefile requires docbook2X in the share/sgml directory
-if ! test -f $SGML_SHARE/docbook2X/docbook2man-spec.pl ; then
- { echo "configure: error: "Unable to find dockbook2X. Make sure it is installed and that the sgml-share path is correct."" 1>&2; exit 1; }
-fi
+
DOC_BUILD_DATE=`date '+%d-%m-%Y'`
@@ -916,7 +913,7 @@ done
ac_given_srcdir=$srcdir
-trap 'rm -fr `echo "Makefile stylesheets/ldp.dsl " | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+trap 'rm -fr `echo "Makefile " | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
@@ -997,7 +994,7 @@ EOF
cat >> $CONFIG_STATUS <<EOF
-CONFIG_FILES=\${CONFIG_FILES-"Makefile stylesheets/ldp.dsl "}
+CONFIG_FILES=\${CONFIG_FILES-"Makefile "}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
diff --git a/docs/docbook/configure.in b/docs/docbook/configure.in
index 5aec3058da5..92e98d3e82b 100644
--- a/docs/docbook/configure.in
+++ b/docs/docbook/configure.in
@@ -43,4 +43,4 @@ AC_SUBST(SGML_SHARE)dnl
DOC_BUILD_DATE=`date '+%d-%m-%Y'`
AC_SUBST(DOC_BUILD_DATE)
-AC_OUTPUT( Makefile stylesheets/ldp.dsl )
+AC_OUTPUT( Makefile )
diff --git a/docs/docbook/faq/samba-pdc-faq.sgml b/docs/docbook/faq/samba-pdc-faq.sgml
index d27bdb63f42..d3021b7a337 100644
--- a/docs/docbook/faq/samba-pdc-faq.sgml
+++ b/docs/docbook/faq/samba-pdc-faq.sgml
@@ -17,9 +17,9 @@
<para>
This is the FAQ for Samba 2.2 as an NTDomain controller.
- This document is derived from the original FAQ that was built and
+ This document is derived from the origional FAQ that was built and
maintained by Gerald Carter from the early days of Samba NTDomain development
- up until recently. It is now being updated as significant changes are
+ up until recently. It is now being updated as significent changes are
made to 2.2.0.
</para>
@@ -48,13 +48,13 @@
<title id=stateofplay>State of Play</title>
<para>Much of the related code does work. For example, if an NT is removed from the
- domain and then rejoins, the <filename>Create a Computer Account in the Domain</filename> dialog
+ domain and then rejoins, the <filename>Create a Computer Account in the Domain</> dialog
will let you reset the smbpasswd. That is you don't need to do it from
the unix box. However, at the present, you do need to have root as an
- administrator and use the root username and password.</para>
+ administrator and use the root user name and password.</para>
<para><command>Policies</command> do work on a W2K machine. MS says that recent
- builds of W2K don't observe an NT policy but it appears it does in 'legacy'
+ builds of W2K dont observe an NT policy but it appears it does in 'legacy'
mode.</para>
</sect1>
@@ -63,7 +63,7 @@
<title>Introduction</title>
<para>
- This FAQ was originally compiled by Jerry Carter (gc) chiefly dealing
+ This FAQ was origionally compiled by Jerry Carter (gc) chiefly dealing
with the 'old HEAD' version of Samba and its NTDomain facilities. It is
being rewritten by David Bannon (drb) so that it addresses more
accurately the Samba 2.2.x release.
@@ -78,7 +78,7 @@
</para>
<para>Hopefully, as we all become familiar with the Samba 2.2 as a
- PDC this document will become much more useful.</para>
+ PDC this document will become much more usefull.</para>
</sect1>
@@ -133,7 +133,7 @@
<para>
- These things are not expected to work in the foreseeable future:
+ These things are note expected to work in the forseeable future:
</para>
<itemizedlist>
@@ -148,7 +148,7 @@ controlled domain?</title>
<para>
The 2.2 release branch of Samba supports Windows 2000 domain
- clients in legacy mode, i.e. as if the PDC is a NTServer, not a
+ clients in legacy mode, ie as if the PDC is a NTServer, not a
W2K server.
</para>
</sect2>
@@ -159,7 +159,7 @@ controlled domain?</title>
<title>CVS</title>
<para>
- CVS is a program (publicly available) that the Samba developers
+ CVS is a programme (publically available) that the Samba developers
use to maintain the central source code. Non developers can get
access to the source in a read only capacity. Many flavours of unix
now arrive with cvs installed.</>
@@ -181,7 +181,7 @@ controlled domain?</title>
<term>HEAD</term>
<listitem><para>Samba 3.0 ? This code boasts all the main
development work in Samba. Due to its developmental
- nature, it's not really suitable for production work.
+ nature, its not really suitable for production work.
</para></listitem></varlistentry>
<varlistentry>
@@ -235,7 +235,7 @@ controlled Domain?</>
<para>
There is a comprehensive Samba PDC <ulink
- url="samba-pdc-howto.html">HOWTO</ulink> accessible from the samba web
+ url="samba-pdc-howto.html">HOWTO</ulink> accessable from the samba web
site under 'Documentation'. Read it.
</para>
</sect2>
@@ -257,11 +257,11 @@ controlled Domain?</>
<sect2>
<title>"The machine account for this computer either does not
-exist or is not accessible."</>
+exist or is not accessable."</>
<para>
When I try to join the domain I get the message "The machine account
- for this computer either does not exist or is not accessible". Whats
+ for this computer either does not exist or is not accessable". Whats
wrong ?
</para>
@@ -315,7 +315,7 @@ exist or is not accessible."</>
<para>
Then you need to add that entry to smbpasswd, assuming you have a suitable
- path to the <command>smbpasswd</> program, do this :
+ path to the <command>smbpasswd</> programme, do this :
</para>
<para>
@@ -324,7 +324,7 @@ exist or is not accessible."</>
<para>
The entry will be created with a well known password, so any machine that
- says it's doppy could join the domain as long as it gets in first. So
+ says its doppy could join the domain as long as it gets in first. So
don't create the accounts any earlier than you need them.
</para>
</sect2>
@@ -353,7 +353,7 @@ when creating a machine account.</title>
<para>
This happens if you try to create a machine account from the
machine itself and use a user name that does not work (for whatever
- reason) and then try another (possibly valid) username.
+ reason) and then try another (possibly valid) user name.
Exit out of the network applet to close the initial connection
and try again.
</para>
@@ -380,7 +380,7 @@ conflict with an existing set.."</title>
<para>I joined the domain successfully but after upgrading
to a newer version of the Samba code I get the message, "The system
- can not log you on (C000019B), Please try again or consult your
+ can not log you on (C000019B), Please try a gain or consult your
system administrator" when attempting to logon.
</para>
@@ -483,15 +483,15 @@ server.</title>
</para>
<para>
- Make sure that the "logon path" is writable by the user and make sure
+ Make sure that the "logon path" is writeable by the user and make sure
that the connection to the logon path location is by the current user.
- Sometimes Windows clients do not drop the connection immediately upon
+ Sometimes Windows client do not drop the connection immediately upon
logoff.
</para>
<para>
Some people have reported that the logon path location should
- also be browseable. I (GC) have yet to empirically verify this,
+ also be browseable. I (GC) have yet to emperically verify this,
but you can try.</para>
</sect2>
</sect1>
@@ -499,13 +499,13 @@ server.</title>
<sect1><title>Policies</title>
<sect2>
-<title>What are 'Policies' ?</title>
+<title>What are 'Policies' ?.</title>
<para>
When a user logs onto the domain via a client machine, the PDC
sends the client machine a list of things contained in the
'policy' (if it exists). This list may do things like suppress
- a splash screen, format the dates the way you like them or perhaps
+ a splach screen, format the dates the way you like them or perhaps
remove locally stored profiles.
</para>
@@ -513,7 +513,7 @@ server.</title>
On a samba PDC this list is obtained from a file called
<filename>ntconfig.pol</filename> and located in the [netlogon]
share. The file is created with a policy editor and must be readable
- by anyone and writable by only root. See <link linkend=policyeditor>
+ by anyone and writeable by only root. See <link linkend=policyeditor>
below</link> for how to get a suitable editor.
</para>
</sect2>
@@ -538,7 +538,7 @@ server.</title>
<para>
A policy file must be in the [netlogon] share and must be
- readable by everyone and writable by only root. The file
+ readable by everyone and writeable by only root. The file
must be created by an NTServer <link linkend=policyeditor>Policy
Editor</link>.
</para>
@@ -572,7 +572,7 @@ server.</title>
but it is not suitable for creating <emphasis>Domain Policies</emphasis>.
Further, although the Windows 95
Policy Editor can be installed on an NT Workstation/Server, it will not
- work with NT policies because of the registry keys that are set by the policy templates.
+ work with NT policies because the registry key that are set by the policy templates.
However, the files from the NT Server will run happily enough on an NTws.
You need <filename>poledit.exe, common.adm</> and <filename>winnt.adm</>. It is convenient
to put the two *.adm files in <filename>c:\winnt\inf</> which is where
@@ -582,10 +582,10 @@ server.</title>
<para>The Windows NT policy editor is also included with the
Service Pack 3 (and later) for Windows NT 4.0. Extract the files using
- <command>servicepackname /x</command>, i.e. that's <command>Nt4sp6ai.exe
+ <command>servicepackname /x</command>, ie thats <command>Nt4sp6ai.exe
/x</command> for service pack 6a. The policy editor, <command>poledt.exe</command> and the
associated template files (*.adm) should
- be extracted as well. It is also possible to download the policy template
+ be extracted as well. It is also possible to downloaded the policy template
files for Office97 and get a copy of the policy editor. Another possible
location is with the Zero Administration Kit available for download from Microsoft.
</para>
@@ -624,7 +624,7 @@ server.</title>
NTws users can change their domain password by pressing Ctrl-Alt-Del
and choosing 'Change Password'. By default however, this does not change the unix password
(typically in <filename>/etc/passwd</filename> or <filename>/etc/shadow</filename>).
- In lots of situations that's OK, for example :
+ In lots of situations thats OK, for example :
</para>
<itemizedlist>
@@ -636,10 +636,10 @@ server.</title>
</itemizedlist>
<para>
- But sometimes you really do need to maintain two separate password
+ But sometimes you really do need to maintain two seperate password
databases and there are good reasons to keep then in sync. Trying
to explain to users that they need to change their passwords in two
- separate places or use two separate passwords is not fun.
+ seperate places or use two seperate passwords is not fun.
</para>
<para>
@@ -699,10 +699,10 @@ server.</title>
<sect2>
<title>What editor can I use in DOS/Windows that won't
-mess with my unix EOF ?</title>
+mess with my unix EOF</title>
<para>There are a number of Windows or DOS based editors that will
- understand, and leave intact, the unix eof (as opposed to a DOS CR/LF).
+ understand, and leave intact, the unix eof (as opposed to a DOS CL/LF).
List members suggested :
</para>
@@ -713,7 +713,7 @@ mess with my unix EOF ?</title>
home.snafu.de/ramo/WinViEn.htm</ulink></para></listitem>
<listitem><para>The author prefers PFE at <ulink url="http://www.lancs.ac.uk/people/cpaap/pfe/">
- www.lancs.ac.uk/people/cpaap/pfe/</ulink> but it's no longer being developed...</para></listitem>
+ www.lancs.ac.uk/people/cpaap/pfe/</ulink> but its no longer being developed...</para></listitem>
</itemizedlist>
</sect2>
@@ -721,7 +721,7 @@ mess with my unix EOF ?</title>
<sect2>
-<title>How do I get 'User Manager' and 'Server Manager' ?</title>
+<title>How do I get 'User Manager' and 'Server Manager'</title>
<para>
Since I don't need to buy an NT Server CD now, how do I get
@@ -731,7 +731,7 @@ mess with my unix EOF ?</title>
<para>
Microsoft distributes a version of
these tools called nexus for installation on Windows 95 systems. The
- tool set includes
+ tools set includes
</para>
<itemizedlist>
@@ -774,7 +774,7 @@ mess with my unix EOF ?</title>
</sect2>
-<sect2><title>How do I get my samba server to become a member ( not PDC ) of an NT domain ?</title>
+<sect2><title>How do I get my samba server to become a member ( not PDC ) of an NT domain?</title>
<para>
@@ -796,11 +796,11 @@ mess with my unix EOF ?</title>
<sect1><title>Diagnostic tools</title>
<sect2><title>What are some diagnostics tools I can use to debug the domain logon process and where can I
- find them ?</title>
+ find them? </title>
<para>
One of the best diagnostic tools for debugging problems is Samba itself.
- You can use the -d option for both smbd and nmbd to specify what
+ You can use the -d option for both smbd and nmbd to specifiy what
'debug level' at which to run. See the man pages on smbd, nmbd and
smb.conf for more information on debugging options. The debug
level can range from 1 (the default) to 10 (100 for debugging passwords).
@@ -809,20 +809,20 @@ mess with my unix EOF ?</title>
<para>
Another helpful method of debugging is to compile samba using the
<command>gcc -g </command> flag. This will include debug
- information in the binaries and allow you to attach gdb to the
+ information in the binaries and allow you to attch gdb to the
running smbd / nmbd process. In order to attach gdb to an smbd
process for an NT workstation, first get the workstation to make the
- connection. Pressing Ctrl-Alt-Del and going down to the domain box
+ connection. Pressing ctrl-alt-delete and going down to the domain box
is sufficient (at least, on the first time you join the domain) to
generate a 'LsaEnumTrustedDomains'. Thereafter, the workstation
maintains an open connection, and therefore there will be an smbd
process running (assuming that you haven't set a really short smbd
- idle timeout) So, in between pressing Ctrl-Alt-Del, and actually
+ idle timeout) So, in between pressing ctrl alt delete, and actually
typing in your password, you can gdb attach and continue.
</para>
<para>
- Some useful samba commands worth investigating:
+ Some usefull samba commands worth investigating:
</para>
<itemizedlist>
@@ -832,18 +832,18 @@ mess with my unix EOF ?</title>
<para>
An SMB enabled version of tcpdump is available from
- <ulink url="http://www.tcpdump.org/">http://www.tcpdump.org/</ulink>.
+ <ulink url="http://www.tcpdump.org/">http://www.tcpdup.org/</ulink>.
Ethereal, another good packet sniffer for UNIX and Win32
hosts, can be downloaded from <ulink
url="http://www.ethereal.com/">http://www.ethereal.com</ulink>.
</para>
<para>
- For tracing things on Microsoft Windows NT, Network Monitor
+ For tracing things on the Microsoft Windows NT, Network Monitor
(aka. netmon) is available on the Microsoft Developer Network CD's,
the Windows NT Server install CD and the SMS CD's. The version of
netmon that ships with SMS allows for dumping packets between any two
- computers (i.e. placing the network interface in promiscuous mode).
+ computers (ie. placing the network interface in promiscuous mode).
The version on the NT Server install CD will only allow monitoring
of network traffic directed to the local NT box and broadcasts on the
local subnet. Be aware that Ethereal can read and write netmon
@@ -854,7 +854,7 @@ mess with my unix EOF ?</title>
<sect2>
<title>How do I install 'Network Monitor' on an NT Workstation
-or a Windows 9x box ?</title>
+or a Windows 9x box?</title>
<para>
Installing netmon on an NT workstation requires a couple
@@ -953,10 +953,10 @@ or a Windows 9x box ?</title>
on the Samba mirrors might mention your problem. If so,
it might mean that the developers are working on it.</para></listitem>
- <listitem><para> Ignacio Coupeau has a very comprehensive look at LDAP with Samba at
+ <listitem><para> Ignacio Coupeau has a very comprehesive look at LDAP with Samba at
<ulink url="http://www.unav.es/cti/ldap-smb-howto.html">
http://www.unav.es/cti/ldap-smb-howto.html</ulink>
- Be a little careful however, I suspect that it does not specifically
+ Be a little carefull however, I suspect that it does not specificly
address samba 2.2.x. The HEAD pre-2.1 may possibly be the best
stream to look at.</para></listitem>
@@ -964,7 +964,7 @@ or a Windows 9x box ?</title>
Samba-TNG</ulink> at
<ulink url="http://www.kneschke.de/projekte/samba_tng">
http://www.kneschke.de/projekte/samba_tng</ulink>, but again, a
- lot of it does not apply to the mainstream Samba.</para></listitem>
+ lot of it does not apply to the main stream Samba.</para></listitem>
<listitem><para>See how Scott Merrill simulates a BDC behaviour at
<ulink url="http://www.skippy.net/linux/smb-howto.html">
@@ -1006,7 +1006,7 @@ or a Windows 9x box ?</title>
<para>For questions relating to Samba TNG go to
<ulink url="http://www.samba-tng.org/">http://www.samba-tng.org/</ulink>
It has been requested that you don't post questions about Samba-TNG to the
- mainstream Samba lists.</para>
+ main stream Samba lists.</para>
<itemizedlist><title>If you post a message to one of the lists please
observe the following guide lines :</title>
@@ -1027,14 +1027,14 @@ or a Windows 9x box ?</title>
<listitem><para> Try and make your question clear and brief, lots of long,
convoluted questions get deleted before they are completely read !
Don't post html encoded messages (if you can select colour or font
- size it's html).</para></listitem>
+ size its html).</para></listitem>
- <listitem><para> If you run one of those nifty 'I'm on holidays' things when
+ <listitem><para> If you run one of those niffy 'I'm on holidays' things when
you are away, make sure its configured to not answer mailing lists.
</para></listitem>
<listitem><para> Don't cross post. Work out which is the best list to post to
- and see what happens, i.e. don't post to both samba-ntdom and samba-technical.
+ and see what happens, ie don't post to both samba-ntdom and samba-technical.
Many people active on the lists subscribe to more
than one list and get annoyed to see the same message two or more times.
Often someone will see a message and thinking it would be better dealt
@@ -1069,7 +1069,7 @@ or a Windows 9x box ?</title>
<para>
Please don't post messages to the list asking to be removed, you will just
- be referred to the above address (unless that process failed in some way...)
+ be refered to the above address (unless that process failed in some way...)
</para>
</sect2>
diff --git a/docs/docbook/howto/samba-pdc-howto.sgml b/docs/docbook/howto/samba-pdc-howto.sgml
index c707b542017..4b8380dd9e5 100644
--- a/docs/docbook/howto/samba-pdc-howto.sgml
+++ b/docs/docbook/howto/samba-pdc-howto.sgml
@@ -1,3 +1,4 @@
+
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
<book id="samba-pdc-howto">
@@ -73,7 +74,7 @@ developmental versions of Samba, particularly
<para>Note that <ulink url="http://bioserve.latrobe.edu.au/samba">Samba 2.0.7</>
- supports significantly less of the NT Domain facilities compared with 2.2.0
+ supports significently less of the NT Domain facilities compared with 2.2.0
</para>
<para>
@@ -129,7 +130,7 @@ developmental versions of Samba, particularly
<sect1><title>Start Up Script</title>
<para>Skip this section if you have a working Samba already.
- Everyone has their own favourite startup script. Here is mine, offered with no warranty
+ Everyone has their own favourite startup script. Here is mine, offered with no warrantee
at all !</para>
<programlisting>
@@ -220,7 +221,7 @@ developmental versions of Samba, particularly
</programlisting>
-<para> Use this script, or some other one, you will need to ensure it's used while the machine
+<para> Use this script, or some other one, you will need to ensure its used while the machine
is booting. (This typically involves <filename>/etc/rc.d</filename>, we'll be
assuming that there is a script called
samba in <filename>/etc/rc.d/init.d</filename> further down in this document.)
@@ -287,7 +288,7 @@ developmental versions of Samba, particularly
This is probably not very nice and may change. But it does work !</para>
<para>For this example, I have a group called 'machines', entries can be added to
- <filename>/etc/passwd</> using a program called <filename>/usr/adduser</> and
+ <filename>/etc/passwd</> using a programme called <filename>/usr/adduser</> and
the other parameters are chosen as suitable for a machine account. Works for
RH Linux, your system may require changes.</para>
</listitem>
@@ -302,9 +303,9 @@ developmental versions of Samba, particularly
</listitem>
</varlistentry>
-<varlistentry><term>domain admin users = user1 user2</term>
- <listitem><para>It appears that this parameter does not function correctly at present.
- Use the 'domain admin group' instead. This parameter specifies a unix user who will
+<varlistentry><term>domain admin users = user1 users2</term>
+ <listitem><para>It appears that this parameter does not funtion correctly at present.
+ Use the 'domain admin group' instread. This parameter specifies a unix user who will
be granted admin privileges
on a NT workstation when
logged onto that workstation. See the section called <link linkend=domainadmin>
@@ -329,7 +330,7 @@ developmental versions of Samba, particularly
</varlistentry>
<varlistentry><term>logon path</term>
- <listitem><para>Lets you specify where you would like users' profiles kept. The default, that is in the user's
+ <listitem><para>Lets you specify where you would like users profiles kept. The default, that is in the users
home directory, does encourage a bit of fiddling.</para>
</listitem>
</varlistentry>
@@ -342,7 +343,7 @@ developmental versions of Samba, particularly
</sect1>
<sect1><title>Special directories</title>
- <para>You need to create a couple of special files and directories. It's nice
+ <para>You need to create a couple of special files and directories. Its nice
to have some of the binaries handy too, so I create links to them. Assuming
you have used the default samba location and have not
changed the locations mentioned in the sample config file, do the following :</para>
@@ -368,10 +369,10 @@ developmental versions of Samba, particularly
<para><command>samba start</command></para>
<para>Instead, you might like to reboot the machine to make sure that you
- got the init stuff right. Anyway, a quick look in the logs
+ got the init stuff right. Any way, a quick look in the logs
<filename>/usr/local/samba/var/log.smbd</filename> and <filename>
/usr/local/samba/var/log/nmbd</filename>
- will give you an idea of what's happening. Assuming all is well, let's create
+ will give you an idea of what's happening. Assuming all is well, lets create
some accounts...</para>
</sect1>
</chapter>
@@ -397,7 +398,7 @@ developmental versions of Samba, particularly
(Note that win95/98 machines don't need an account as they don't do
any security aware things.)</para>
- <para>Samba 2.2 will now create these entries for us. Careful set up is required
+ <para>Samba 2.2 will now create these entries for us. Carefull set up is required
and there may well be some changes to this system before its released.
</para>
</sect1>
@@ -478,7 +479,7 @@ developmental versions of Samba, particularly
<listitem><para>Wait for the confirmation, reboot when prompted.</para></listitem>
</itemizedlist>
<para>To remove a W2K machine from the domain, follow the first two steps then
- choose <command>Workgroup</>, enter a workgroup name (or just WORKGROUP) and follow
+ choose <command>Workgroup</>, enter a work group name (or just WORKGROUP) and follow
the prompts.</para>
</listitem></varlistentry>
@@ -521,7 +522,7 @@ developmental versions of Samba, particularly
domain admins and tells the NTws when it thinks that it has got one logged on.
In the smb.conf file we declare
that the <filename>Domain Admin group = @adm</filename>.
- Any user who is a member of the unix group 'adm' is treated as a Domain Admin by a NTws when
+ Any user who is a menber of the unix group 'adm' is treated as a Domain Admin by a NTws when
logged onto the Domain. They will have full Administrator rights
including the rights to change permissions on files and run the system
utilities such as Disk Administrator. Add users to the group by editing <filename>
@@ -529,7 +530,7 @@ developmental versions of Samba, particularly
<para>Further, and this is very new, they will be allowed to create a
new machine account when first connecting a new NT or W2K machine to
- the domain. <emphasis>However, at present, i.e. pre-release, only a Domain Admin who
+ the domain. <emphasis>However, at present, ie pre-release, only a Domain Admin who
also happens to be root can do so. </emphasis></para>
</sect1>
</chapter>
@@ -548,7 +549,7 @@ developmental versions of Samba, particularly
on the server and is downloaded again when they logon on again, possibly
on another client machine.</para>
- <para>Sounds great but can be a bit of a bugbear sometimes. Users let
+ <para>Sounds great but can be a bit of a bug bear sometimes. Users let
their profiles get too big and then complain about how long it takes
to log on each time. This sample setup only supports NT profiles,
rumor has it that it is also possible to do the same on Win95, my
@@ -563,7 +564,7 @@ developmental versions of Samba, particularly
<para>Policies are an easy way to make or enforce specific characteristics across your network. You create a ntconfig.pol
file and every time someone logs on with their NTws, the settings you put in ntconfig.pol are applied to the NTws.
Typical setting are things like making the date appear the way you want it (none of these 2 figure years here) or
- maybe suppressing one of the splash screens. Perhaps you want to set the NTws so it does not keep users' profiles
+ maybe suppressing one of the splash screens. Perhaps you want to set the NTws so it does not keep users profiles
on the local machine. Cool. The only problem is making the ntconfig.pol file itself. You cannot use the policy editor
that comes with NTws.</para>
@@ -601,25 +602,25 @@ developmental versions of Samba, particularly
<para>You could use a line like this <filename>logon script = default.bat</> and samba
will supply <filename>/usr/local/samba/netlogon/default.bat</> for any client and every
- user. Maybe you could use %m and get a client machine dependent logon script.
+ user. Maybe you could use %m and get a client machine dependant logon script.
You get the idea...</para>
<para>Note that the file is a dos batch file not a Unix script. It runs dos commands on the client
computer with the logon user's permissions. It must be a dos file with each line ending with
the dos cr/lf not a nice clean newline. Generally,
- it's best to create the initial file on a DOS system and copy it across.</para>
+ its best to create the initial file on a DOS system and copy it across.</para>
- <para>There are lots of very clever uses of the Samba replaceable variables such
+ <para>There is lots of very clever uses of the Samba replaceable variables such
( %U = user, %G = primary group, %H = client machine, see the 'man 5 smb.conf') to
give you control over which script runs when a particular person logs
on. (Gee, it would be nice to have a default.bat run when nothing else is available.)</para>
<para>Again, it is vitally important that ordinary users don't have write
- permission to other people's, or even probably their own, logon script files.</para>
+ permission to other peoples, or even probably their own, logon script files.</para>
<para>A typical logon script is reproduced below. Note that it runs separate
commands for win95 and NT, that's because NT has slightly different behaviour
- when using the <filename>net use ..</filename> command. It's useful for lots of
+ when using the <filename>net use ..</filename> command. Its useful for lots of
other situations too. I don't know what syntax to use for win98, I don't use it
here.</para>
@@ -651,7 +652,7 @@ developmental versions of Samba, particularly
to the <link linkend=useraccount><filename>adduser</></> line above would allow unix logon
but it would be with passwords that may
be different from the NT logon. Clearly that won't suit everyone. Trying to explain to users
- that they need to change their passwords in two separate places is not fun.
+ that they need to change their passwords in two seperate places is not fun.
Further, even if they cannot do a unix logon there are other processes that
might require authentication. We have a nice securely encrypted password in
<filename>/usr/local/samba/private/smbpasswd</filename>, why not use it ?</para>
@@ -702,30 +703,30 @@ developmental versions of Samba, particularly
<para>For many years the Samba team have been developing Samba, some time ago
a number of people, possibly lead by Luke Leighton started contributing NT
PDC stuff. This was added to the 'head' stream (that would eventually
- become the next version) and later to a separate stream (NTDom). They did so
+ become the next version) and later to a seperate stream (NTDom). They did so
much that eventually this development stream was so mutated that it could not
be merged back into the main stream and was abandoned towards the end of 1999.
And that was very sad because many users, myself include had become heavily
- dependent on the NTController facilities it offered. Oh well...</para>
+ dependant on the NTController facilities it offered. Oh well...</para>
<para>The NTDom team continued on with their new found knowledge however and
built the TNG stream. Intended to be carefully controlled so that it can be
merged back into the main stream and benefiting from what they learnt, it is
- a very different product to the original NTDom product. However, for a
+ a very different product to the origional NTDom product. However, for a
number of reasons, the merge did not take place and now TNG is being developed
at <ulink url="http://www.samba-tng.org">http://www.samba-tng.org</>.</para>
- <para>Now, the NTDom things that the main stream 2.0.x version does is based more
+ <para>Now, the NTDom things that the main strean 2.0.x version does is based more
on the old (initial version) abandoned code than on the TNG ideas. It appears
that version 2.2.0 will also include an improved version of the 2.0.7 domain
- controller characteristics, not the TNG ways. The developers have indicated
+ controller charactistics, not the TNG ways. The developers have indicated
that 2.2.0 will be further developed incrementally and the ideas from TNG
incorporated into it.</para>
<para>One more little wriggle is worth mentioning. At one stage the NTDom
stream was called Samba 2.1.0-prealpha and similar names. This is most
unfortunate because at least one book published advises people who want to
- use NTDom Samba to get version 2.1.0 or later. As mainstream Samba will soon
+ use NTDom Samba to get version 2.1.0 or later. As main stream Samba will soon
be called 2.2.0 and NOT officially supporting NTDom Controlling functions,
the potential for confusion is certainly there.</para>
</sect2>
@@ -736,8 +737,8 @@ developmental versions of Samba, particularly
</emphasis>. It offers the 'best guess' of what is planned for future releases
of Samba.</para>
- <para>The future of Samba as a Primary Domain Controller appears rosy, however
- be aware that it's the future, not the present. The developers are strongly committed
+ <para>The future of Samba as a Primary Domain Controller appears rosie, however
+ be aware that its the future, not the present. The developers are strongly committed
to building a full featured PDC into Samba but it will take time. If this
version does not meet your requirements then you should consider (in no particular
order) :</para>
@@ -754,8 +755,8 @@ developmental versions of Samba, particularly
<sect2><title>Getting further help</title>
- <para>This document cannot possibly answer all your questions. Please understand that it's very
- likely that someone has been confronted by the same problem that you have. The
+ <para>This document cannot possibly answer all your questions. Please understand that its very
+ likely that someone has been confrounted by the same problem that you have. The
<ulink url="samba-pdc-faq.html">FAQ</>
discusses a number of possible paths to take to get further help :</para>
diff --git a/docs/docbook/manpages/make_smbcodepage.1.sgml b/docs/docbook/manpages/make_smbcodepage.1.sgml
index a36f9b968c1..8a58b8614dd 100644
--- a/docs/docbook/manpages/make_smbcodepage.1.sgml
+++ b/docs/docbook/manpages/make_smbcodepage.1.sgml
@@ -1,5 +1,5 @@
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
-<refentry id="make-smbcodepage">
+<refentry id="findsmb">
<refmeta>
<refentrytitle>make_smbcodepage</refentrytitle>
@@ -56,11 +56,11 @@
<varlistentry>
<term>inputfile</term>
- <listitem><para>This is the input file to process. In
- the <parameter>c</parameter> case this will be a text
+ <listitem><para>This is the input file to process. In t
+ he '<parameter>c</parameter>' case this will be a text
codepage definition file such as the ones found in the Samba
<filename>source/codepages</filename> directory. In
- the <parameter>d</parameter> case this will be the
+ the '<parameter>d</parameter>' case this will be the
binary format codepage definition file normally found in
the <filename>lib/codepages</filename> directory in the
Samba install directory path.</para></listitem>
diff --git a/docs/docbook/manpages/make_unicodemap.1.sgml b/docs/docbook/manpages/make_unicodemap.1.sgml
deleted file mode 100644
index 5e7292341b0..00000000000
--- a/docs/docbook/manpages/make_unicodemap.1.sgml
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
-<refentry id="make-unicodemap">
-
-<refmeta>
- <refentrytitle>make_unicodemap</refentrytitle>
- <manvolnum>1</manvolnum>
-</refmeta>
-
-
-<refnamediv>
- <refname>make_unicodemap</refname>
- <refpurpose>construct a unicode map file for Samba</refpurpose>
-</refnamediv>
-
-<refsynopsisdiv>
- <cmdsynopsis>
- <command>make_unicodemap</command>
- <arg choice="req">codepage</arg>
- <arg choice="req">inputfile</arg>
- <arg choice="req">outputfile</arg>
- </cmdsynopsis>
-</refsynopsisdiv>
-
-
-
-<refsect1>
- <title>DESCRIPTION</title>
-
- <para>
- This tool is part of the <ulink url="samba.7.html">Samba</ulink>
- suite.
- </para>
-
- <para>
- <command>make_unicodemap</command> compiles text unicode map
- files into binary unicode map files for use with the
- internationalization features of Samba 2.2.
- </para>
-</refsect1>
-
-
-
-<refsect1>
- <title>OPTIONS</title>
-
- <variablelist>
- <varlistentry>
- <term>codepage</term>
- <listitem><para>This is the codepage or UNIX character
- set we are processing (a number, e.g. 850).
- </para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term>inputfile</term>
- <listitem><para>This is the input file to process. This is a
- text unicode map file such as the ones found in the Samba
- <filename>source/codepages</filename> directory.
- </para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term>outputfile</term>
- <listitem><para>This is the binary output file to produce.
- </para></listitem>
- </varlistentry>
- </variablelist>
-</refsect1>
-
-
-<refsect1>
- <title>Samba Unicode Map Files</title>
-
- <para>
- A text Samba unicode map file is a description that tells Samba
- how to map characters from a specified DOS code page or UNIX character
- set to 16 bit unicode.
- </para>
-
- <para>A binary Samba unicode map file is a binary representation
- of the same information, including a value that specifies what
- codepage or UNIX character set this file is describing.
- </para>
-</refsect1>
-
-<refsect1>
- <title>Files</title>
-
- <para><filename>CP&lt;codepage&gt;.TXT</filename></para>
-
- <para>
- These are the input (text) unicode map files provided
- in the Samba <filename>source/codepages</filename>
- directory.
- </para>
-
- <para>
- A text unicode map file consists of multiple lines
- containing two fields. These fields are :
- </para>
-
- <itemizedlist>
- <listitem><para><parameter>character</parameter> - which is
- the (hex) character mapped on this line.
- </para></listitem>
-
- <listitem><para><parameter>unicode</parameter> - which
- is the (hex) 16 bit unicode character that the character
- will map to.
- </para></listitem>
- </itemizedlist>
-
- <para>
- <filename>unicode_map.&lt;codepage&gt;</filename> - These are
- the output (binary) unicode map files produced and placed in
- the Samba destination <filename>lib/codepage</filename>
- directory.
- </para>
-</refsect1>
-
-
-<refsect1>
- <title>Installation</title>
-
- <para>
- The location of the server and its support files is a matter
- for individual system administrators. The following are thus
- suggestions only.
- </para>
-
- <para>
- It is recommended that the <command>make_unicodemap</command>
- program be installed under the
- <filename>$prefix/samba</filename> hierarchy,
- in a directory readable by all, writeable only by root. The
- program itself should be executable by all. The program
- should NOT be setuid or setgid!
- </para>
-</refsect1>
-
-<refsect1>
- <title>VERSION</title>
-
- <para>This man page is correct for version 2.2 of
- the Samba suite.</para>
-</refsect1>
-
-<refsect1>
- <title>SEE ALSO</title>
- <para><ulink url="smbd.8.html"><command>smbd(8)</command></ulink>,
- <ulink url="smb.conf.5.html">smb.conf(5)</ulink>
- </para>
-</refsect1>
-
-<refsect1>
- <title>AUTHOR</title>
-
- <para>The original Samba software and related utilities
- were created by Andrew Tridgell. Samba is now developed
- by the Samba Team as an Open Source project similar
- to the way the Linux kernel is developed.</para>
-
- <para>The original Samba man pages were written by Karl Auer.
- The man page sources were converted to YODL format (another
- excellent piece of Open Source software, available at
- <ulink url="ftp://ftp.icce.rug.nl/pub/unix/">
- ftp://ftp.icce.rug.nl/pub/unix/</ulink>) and updated for the Samba 2.0
- release by Jeremy Allison. The conversion to DocBook for
- Samba 2.2 was done by Gerald Carter</para>
-</refsect1>
-
-</refentry>
diff --git a/docs/docbook/manpages/nmbd.8.sgml b/docs/docbook/manpages/nmbd.8.sgml
index f52e38bb776..5194b1072b0 100644
--- a/docs/docbook/manpages/nmbd.8.sgml
+++ b/docs/docbook/manpages/nmbd.8.sgml
@@ -37,7 +37,7 @@
<para><command>nmbd</command> is a server that understands
and can reply to NetBIOS over IP name service requests, like
- those produced by SMB/CIFS clients such as Windows 95/98/ME,
+ those produced by SMBD/CIFS clients such as Windows 95/98/ME,
Windows NT, Windows 2000, and LanManager clients. It also
participates in the browsing protocols which make up the
Windows "Network Neighborhood" view.</para>
@@ -287,11 +287,11 @@
a SIGTERM (-15) signal and wait for it to die on its own.</para>
<para><command>nmbd</command> will accept SIGHUP, which will cause
- it to dump out its namelists into the file <filename>namelist.debug
+ it to dump out it's namelists into the file <filename>namelist.debug
</filename> in the <filename>/usr/local/samba/var/locks</filename>
directory (or the <filename>var/locks</filename> directory configured
under wherever Samba was configured to install itself). This will also
- cause <command>nmbd</command> to dump out its server database in
+ cause <command>nmbd</command> to dump out it's server database in
the <filename>log.nmb</filename> file. In addition, the debug log level
of nmbd may be raised by sending it a SIGUSR1 (<command>kill -USR1
&lt;nmbd-pid&gt;</command>) and lowered by sending it a
diff --git a/docs/docbook/manpages/nmblookup.1.sgml b/docs/docbook/manpages/nmblookup.1.sgml
index 67efac56343..ee81d2b4e8f 100644
--- a/docs/docbook/manpages/nmblookup.1.sgml
+++ b/docs/docbook/manpages/nmblookup.1.sgml
@@ -84,7 +84,7 @@
datagrams. The reason for this option is a bug in Windows 95
where it ignores the source port of the requesting packet
and only replies to UDP port 137. Unfortunately, on most UNIX
- systems root privilege is needed to bind to this port, and
+ systems root privilage is needed to bind to this port, and
in addition, if the <ulink url="nmbd.8.html">nmbd(8)</ulink>
daemon is running on this machine it also binds to this port.
</para></listitem>
@@ -208,7 +208,7 @@
<para>For example, running :</para>
- <para><command>nmblookup -U samba.org -R 'IRIX#1B'</command></para>
+ <para><command>nmblookup -U samba.org -R IRIX#1B'</command></para>
<para>would query the WINS server samba.org for the domain
master browser (1B name type) for the IRIX workgroup.</para>
diff --git a/docs/docbook/manpages/rpcclient.1.sgml b/docs/docbook/manpages/rpcclient.1.sgml
index 6093d6dc42e..c02f935d823 100644
--- a/docs/docbook/manpages/rpcclient.1.sgml
+++ b/docs/docbook/manpages/rpcclient.1.sgml
@@ -89,7 +89,7 @@
<term>-d debuglevel</term>
<listitem><para>set the debuglevel. Debug level 0 is the lowest
and 100 being the highest. This should be set to 100 if you are
- planning on submitting a bug report to the Samba team (see <filename>BUGS.txt</filename>).
+ planning on submitting a bug report to the Samba team (see BUGS.txt).
</para></listitem>
</varlistentry>
@@ -107,9 +107,8 @@
<varlistentry>
<term>-l logbasename</term>
- <listitem><para>File name for log/debug files. The extension
- <constant>'.client'</constant> will be appended. The log file is never removed
- by the client.
+ <listitem><para>File name for log/debug files. .client will be
+ appended. The log file is never removed by the client.
</para></listitem>
</varlistentry>
@@ -137,7 +136,7 @@
<para>If %password is not specified, The user will be prompted. The
client will first check the <envar>USER</envar> environment variable, then the
- <envar>LOGNAME</envar> variable and if either exists, the
+ <envar>LOGNAME</envar> variable and if either exist, the
string is uppercased. If these environmental variables are not
found, the username <constant>GUEST</constant> is used. </para>
@@ -162,8 +161,9 @@
<varlistentry>
<term>-W domain</term>
<listitem><para>Set the SMB domain of the username. This
- overrides the default domain which is the domain defined in
- smb.conf. If the domain specified is the same as the server's NetBIOS name,
+ overrides the default domain which is the domain of the
+ server specified with the <parameter>-S</parameter> option.
+ If the domain specified is the same as the server's NetBIOS name,
it causes the client to log on using the server's local SAM (as
opposed to the Domain SAM). </para></listitem>
</varlistentry>
@@ -179,15 +179,8 @@
<para><emphasis>LSARPC</emphasis></para>
<itemizedlist>
<listitem><para><command>lsaquery</command></para></listitem>
-
- <listitem><para><command>lookupsids</command> - Resolve a list
- of SIDs to usernames.
- </para></listitem>
-
- <listitem><para><command>lookupnames</command> - Resolve s list
- of usernames to SIDs.
- </para></listitem>
-
+ <listitem><para><command>lookupsids</command></para></listitem>
+ <listitem><para><command>lookupnames</command></para></listitem>
<listitem><para><command>enumtrusts</command></para></listitem>
</itemizedlist>
<para> </para>
@@ -200,10 +193,6 @@
<listitem><para><command>querygroup</command></para></listitem>
<listitem><para><command>queryusergroups</command></para></listitem>
<listitem><para><command>querygroupmem</command></para></listitem>
- <listitem><para><command>queryaliasmem</command></para></listitem>
- <listitem><para><command>querydispinfo</command></para></listitem>
- <listitem><para><command>querydominfo</command></para></listitem>
- <listitem><para><command>enumdomgroups</command></para></listitem>
</itemizedlist>
<para> </para>
@@ -255,12 +244,6 @@
</listitem>
- <listitem><para><command>deldriver</command> - Delete the
- specified printer driver for all architectures. This
- does not delete the actual driver files from the server,
- only the entry from the server's list of drivers.
- </para></listitem>
-
<listitem><para><command>enumdata</command> - Enumerate all
printer setting data stored on the server. On Windows NT clients,
these values are stored in the registry, while Samba servers
@@ -384,7 +367,7 @@
available from the original creators (Microsoft) on how MSRPC over
SMB works, or how the individual MSRPC services work. Microsoft's
implementation of these services has been demonstrated (and reported)
- to be... a bit flaky in places. </para>
+ to be... a bit flakey in places. </para>
<para>The development of Samba's implementation is also a bit rough,
and as more of the services are understood, it can even result in
@@ -412,7 +395,7 @@
to the way the Linux kernel is developed.</para>
<para>The original rpcclient man page was written by Matthew
- Geddes, Luke Kenneth Casson Leighton, and rewritten by Gerald Carter.
+ Geddes, Luke Kenneth Casson, and rewriten by Gerald Carter.
The conversion to DocBook for Samba 2.2 was done by Gerald
Carter.</para>
</refsect1>
diff --git a/docs/docbook/manpages/smb.conf.5.sgml b/docs/docbook/manpages/smb.conf.5.sgml
index 5c114ef6159..8829688c193 100644
--- a/docs/docbook/manpages/smb.conf.5.sgml
+++ b/docs/docbook/manpages/smb.conf.5.sgml
@@ -519,7 +519,7 @@
upper case, or if they are forced to be the "default"
case. This option can be use with "preserve case = yes"
to permit long filenames to retain their case, while short names
- are lowercased. Default <emphasis>yes</emphasis>.</para></listitem>
+ are lowered. Default <emphasis>yes</emphasis>.</para></listitem>
</varlistentry>
</variablelist>
@@ -552,7 +552,7 @@
with the system and now supplies a correct password for that
username then the connection is allowed.</para></listitem>
- <listitem><para>The client's NetBIOS name and any previously
+ <listitem><para>The client's netbios name and any previously
used user names are checked against the supplied password, if
they match then the connection is allowed as the corresponding
user.</para></listitem>
@@ -586,9 +586,8 @@
each parameter for details. Note that some are synonyms.</para>
<itemizedlist>
- <listitem><para><link linkend="ADDPRINTERCOMMAND"><parameter>add printer command</parameter></link></para></listitem>
- <listitem><para><link linkend="ADDSHARECOMMAND"><parameter>add share command</parameter></link></para></listitem>
<listitem><para><link linkend="ADDUSERSCRIPT"><parameter>add user script</parameter></link></para></listitem>
+ <listitem><para><link linkend="ADDPRINTERCOMMAND"><parameter>addprinter command</parameter></link></para></listitem>
<listitem><para><link linkend="ALLOWTRUSTEDDOMAINS"><parameter>allow trusted domains</parameter></link></para></listitem>
<listitem><para><link linkend="ANNOUNCEAS"><parameter>announce as</parameter></link></para></listitem>
<listitem><para><link linkend="ANNOUNCEVERSION"><parameter>announce version</parameter></link></para></listitem>
@@ -596,7 +595,6 @@
<listitem><para><link linkend="BINDINTERFACESONLY"><parameter>bind interfaces only</parameter></link></para></listitem>
<listitem><para><link linkend="BROWSELIST"><parameter>browse list</parameter></link></para></listitem>
<listitem><para><link linkend="CHANGENOTIFYTIMEOUT"><parameter>change notify timeout</parameter></link></para></listitem>
- <listitem><para><link linkend="CHANGESHARECOMMAND"><parameter>change share command</parameter></link></para></listitem>
<listitem><para><link linkend="CHARACTERSET"><parameter>character set</parameter></link></para></listitem>
<listitem><para><link linkend="CLIENTCODEPAGE"><parameter>client code page</parameter></link></para></listitem>
<listitem><para><link linkend="CODEPAGEDIRECTORY"><parameter>code page directory</parameter></link></para></listitem>
@@ -610,13 +608,15 @@
<listitem><para><link linkend="DEBUGLEVEL"><parameter>debuglevel</parameter></link></para></listitem>
<listitem><para><link linkend="DEFAULT"><parameter>default</parameter></link></para></listitem>
<listitem><para><link linkend="DEFAULTSERVICE"><parameter>default service</parameter></link></para></listitem>
- <listitem><para><link linkend="DELETEPRINTERCOMMAND"><parameter>delete printer command</parameter></link></para></listitem>
- <listitem><para><link linkend="DELETESHARECOMMAND"><parameter>delete share command</parameter></link></para></listitem>
<listitem><para><link linkend="DELETEUSERSCRIPT"><parameter>delete user script</parameter></link></para></listitem>
+ <listitem><para><link linkend="DELETEPRINTERCOMMAND"><parameter>deleteprinter command</parameter></link></para></listitem>
<listitem><para><link linkend="DFREECOMMAND"><parameter>dfree command</parameter></link></para></listitem>
<listitem><para><link linkend="DNSPROXY"><parameter>dns proxy</parameter></link></para></listitem>
<listitem><para><link linkend="DOMAINADMINGROUP"><parameter>domain admin group</parameter></link></para></listitem>
+ <listitem><para><link linkend="DOMAINADMINUSERS"><parameter>domain admin users</parameter></link></para></listitem>
+ <listitem><para><link linkend="DOMAINGROUPS"><parameter>domain groups</parameter></link></para></listitem>
<listitem><para><link linkend="DOMAINGUESTGROUP"><parameter>domain guest group</parameter></link></para></listitem>
+ <listitem><para><link linkend="DOMAINGUESTUSERS"><parameter>domain guest users</parameter></link></para></listitem>
<listitem><para><link linkend="DOMAINLOGONS"><parameter>domain logons</parameter></link></para></listitem>
<listitem><para><link linkend="DOMAINMASTER"><parameter>domain master</parameter></link></para></listitem>
<listitem><para><link linkend="ENCRYPTPASSWORDS"><parameter>encrypt passwords</parameter></link></para></listitem>
@@ -670,11 +670,9 @@
<listitem><para><link linkend="NTPIPESUPPORT"><parameter>nt pipe support</parameter></link></para></listitem>
<listitem><para><link linkend="NTSMBSUPPORT"><parameter>nt smb support</parameter></link></para></listitem>
<listitem><para><link linkend="NULLPASSWORDS"><parameter>null passwords</parameter></link></para></listitem>
- <listitem><para><link linkend="OBEYPAMRESTRICTIONS"><parameter>obey pam restrictions</parameter></link></para></listitem>
<listitem><para><link linkend="OPLOCKBREAKWAITTIME"><parameter>oplock break wait time</parameter></link></para></listitem>
<listitem><para><link linkend="OSLEVEL"><parameter>os level</parameter></link></para></listitem>
<listitem><para><link linkend="OS2DRIVERMAP"><parameter>os2 driver map</parameter></link></para></listitem>
- <listitem><para><link linkend="PAMPASSWORDCHANGE"><parameter>pam password change</parameter></link></para></listitem>
<listitem><para><link linkend="PANICACTION"><parameter>panic action</parameter></link></para></listitem>
<listitem><para><link linkend="PASSWDCHAT"><parameter>passwd chat</parameter></link></para></listitem>
<listitem><para><link linkend="PASSWDCHATDEBUG"><parameter>passwd chat debug</parameter></link></para></listitem>
@@ -730,6 +728,7 @@
<listitem><para><link linkend="TIMESTAMPLOGS"><parameter>timestamp logs</parameter></link></para></listitem>
<listitem><para><link linkend="TOTALPRINTJOBS"><parameter>total print jobs</parameter></link></para></listitem>
<listitem><para><link linkend="UNIXPASSWORDSYNC"><parameter>unix password sync</parameter></link></para></listitem>
+ <listitem><para><link linkend="UNIXREALNAME"><parameter>unix realname</parameter></link></para></listitem>
<listitem><para><link linkend="UPDATEENCRYPTED"><parameter>update encrypted</parameter></link></para></listitem>
<listitem><para><link linkend="USERHOSTS"><parameter>use rhosts</parameter></link></para></listitem>
<listitem><para><link linkend="USERNAMELEVEL"><parameter>username level</parameter></link></para></listitem>
@@ -883,119 +882,6 @@
<variablelist>
-
- <varlistentry>
- <term><anchor id="ADDPRINTERCOMMAND">add printer command (G)</term>
- <listitem><para>With the introduction of MS-RPC based printing
- support for Windows NT/2000 clients in Samba 2.2, The MS Add
- Printer Wizard (APW) icon is now also available in the
- "Printers..." folder displayed a share listing. The APW
- allows for printers to be add remotely to a Samba or Windows
- NT/2000 print server.</para>
-
- <para>For a Samba host this means that the printer must be
- physically added to the underlying printing system. The <parameter>add
- printer command</parameter> defines a script to be run which
- will perform the necessary operations for adding the printer
- to the print system and to add the appropriate service definition
- to the <filename>smb.conf</filename> file in order that it can be
- shared by <ulink url="smbd.8.html"><command>smbd(8)</command>
- </ulink>.</para>
-
- <para>The <parameter>add printer command</parameter> is
- automatically invoked with the following parameter (in
- order:</para>
-
- <itemizedlist>
- <listitem><para><parameter>printer name</parameter></para></listitem>
- <listitem><para><parameter>share name</parameter></para></listitem>
- <listitem><para><parameter>port name</parameter></para></listitem>
- <listitem><para><parameter>driver name</parameter></para></listitem>
- <listitem><para><parameter>location</parameter></para></listitem>
- <listitem><para><parameter>Windows 9x driver location</parameter>
- </para></listitem>
- </itemizedlist>
-
- <para>All parameters are filled in from the PRINTER_INFO_2 structure sent
- by the Windows NT/2000 client with one exception. The "Windows 9x
- driver location" parameter is included for backwards compatibility
- only. The remaining fields in the structure are generated from answers
- to the APW questions.</para>
-
- <para>Once the <parameter>add printer command</parameter> has
- been executed, <command>smbd</command> will reparse the <filename>
- smb.conf</filename> to determine if the share defined by the APW
- exists. If the sharename is still invalid, then <command>smbd
- </command> will return an ACCESS_DENIED error to the client.</para>
-
- <para>See also <link linkend="DELETEPRINTERCOMMAND"><parameter>
- delete printer command</parameter></link>, <link
- linkend="printing"><parameter>printing</parameter></link>,
- <link linkend="SHOWADDPRINTERWIZARD"><parameter>show add
- printer wizard</parameter></link></para>
-
- <para>Default: <emphasis>none</emphasis></para>
- <para>Example: <command>addprinter command = /usr/bin/addprinter
- </command></para>
- </listitem>
- </varlistentry>
-
-
-
- <varlistentry>
- <term><anchor id="ADDSHARECOMMAND">add share command (G)</term>
- <listitem><para>Samba 2.2.0 introduced the ability to dynamically
- add and delete shares via the Windows NT 4.0 Server Manager. The
- <parameter>add share command</parameter> is used to define an
- external program or script which will add a new service definition
- to <filename>smb.conf</filename>. In order to successfully
- execute the <parameter>add share command</parameter>, <command>smbd</command>
- requires that the administrator be connected using a root account (i.e.
- uid == 0).
- </para>
-
- <para>
- When executed, <command>smbd</command> will automatically invoke the
- <parameter>add share command</parameter> with four parameters.
- </para>
-
- <itemizedlist>
- <listitem><para><parameter>configFile</parameter> - the location
- of the global <filename>smb.conf</filename> file.
- </para></listitem>
-
- <listitem><para><parameter>shareName</parameter> - the name of the new
- share.
- </para></listitem>
-
- <listitem><para><parameter>pathName</parameter> - path to an **existing**
- directory on disk.
- </para></listitem>
-
- <listitem><para><parameter>comment</parameter> - comment string to associate
- with the new share.
- </para></listitem>
- </itemizedlist>
-
- <para>
- This parameter is only used for add file shares. To add printer shares,
- see the <link linkend="ADDPRINTERCOMMAND"><parameter>add printer
- command</parameter></link>.
- </para>
-
- <para>
- See also <link linkend="CHANGESHARECOMMAND"><parameter>change share
- command</parameter></link>, <link linkend="DELETESHARECOMMAND"><parameter>delete share
- command</parameter></link>.
- </para>
-
- <para>Default: <emphasis>none</emphasis></para>
- <para>Example: <command>add share command = /usr/local/bin/addshare</command></para>
- </listitem>
- </varlistentry>
-
-
-
<varlistentry>
<term><anchor id="ADDUSERSCRIPT">add user script (G)</term>
<listitem><para>This is the full pathname to a script that will
@@ -1050,6 +936,63 @@
<varlistentry>
+ <term><anchor id="ADDPRINTERCOMMAND">addprinter command (G)</term>
+ <listitem><para>With the introduction of MS-RPC based printing
+ support for Windows NT/2000 clients in Samba 2.2, The MS Add
+ Printer Wizard (APW) icon is now also available in the
+ "Printers..." folder displayed a share listing. The APW
+ allows for printers to be add remotely to a Samba or Windows
+ NT/2000 print server.</para>
+
+ <para>For a Samba host this means that the printer must be
+ physically added to underlying printing system. The <parameter>
+ addprinter command</parameter> defines a script to be run which
+ will perform the necessary operations for adding the printer
+ to the print system and to add the appropriate service definition
+ to the <filename>smb.conf</filename> file in order that it can be
+ shared by <ulink url="smbd.8.html"><command>smbd(8)</command>
+ </ulink>.</para>
+
+ <para>The <parameter>addprinter command</parameter> is
+ automatically invoked with the following parameter (in
+ order:</para>
+
+ <itemizedlist>
+ <listitem><para><parameter>printer name</parameter></para></listitem>
+ <listitem><para><parameter>share name</parameter></para></listitem>
+ <listitem><para><parameter>port name</parameter></para></listitem>
+ <listitem><para><parameter>driver name</parameter></para></listitem>
+ <listitem><para><parameter>location</parameter></para></listitem>
+ <listitem><para><parameter>Windows 9x driver location</parameter>
+ </para></listitem>
+ </itemizedlist>
+
+ <para>All parameters are filled in from the PRINTER_INFO_2 structure sent
+ by the Windows NT/2000 client with one exception. The "Windows 9x
+ driver location" parameter is included for backwards compatibility
+ only. The remaining fields in the structure are generated from answers
+ to the APW questions.</para>
+
+ <para>Once the <parameter>addprinter command</parameter> has
+ been executed, <command>smbd</command> will reparse the <filename>
+ smb.conf</filename> to determine if the share defined by the APW
+ exists. If the sharename is still invalid, then <command>smbd
+ </command> will return an ACCESS_DENIED error to the client.</para>
+
+ <para>See also <link linkend="DELETEPRINTERCOMMAND"><parameter>
+ deleteprinter command</parameter></link>, <link
+ linkend="printing"><parameter>printing</parameter></link>,
+ <link linkend="SHOWADDPRINTERWIZARD"><parameter>show add
+ printer wizard</parameter></link></para>
+
+ <para>Default: <emphasis>none</emphasis></para>
+ <para>Example: <command>addprinter command = /usr/bin/addprinter
+ </command></para>
+ </listitem>
+ </varlistentry>
+
+
+ <varlistentry>
<term><anchor id="ADMINUSERS">admin users (S)</term>
<listitem><para>This is a list of users who will be granted
administrative privileges on the share. This means that they
@@ -1081,7 +1024,7 @@
linkend="SECURITY"><parameter>security</parameter></link> option is set to
<constant>server</constant> or <constant>domain</constant>.
If it is set to no, then attempts to connect to a resource from
- a domain or workgroup other than the one which <ulink url="smbd.8.html">smbd</ulink> is running
+ a domain or workgroup other than the one which smbd is running
in will fail, even if that domain is trusted by the remote server
doing the authentication.</para>
@@ -1124,7 +1067,7 @@
<varlistentry>
- <term><anchor id="ANNOUNCEVERSION">announce version (G)</term>
+ <term><anchor id="ANNOUNCEVERSION">annouce version (G)</term>
<listitem><para>This specifies the major and minor version numbers
that nmbd will use when announcing itself as a server. The default
is 4.2. Do not change this parameter unless you have a specific
@@ -1164,7 +1107,7 @@
<varlistentry>
<term><anchor id="BINDINTERFACESONLY">bind interfaces only (G)</term>
<listitem><para>This global parameter allows the Samba admin
- to limit what interfaces on a machine will serve SMB requests. If
+ to limit what interfaces on a machine will serve smb requests. If
affects file service <ulink url="smbd.8.html">smbd(8)</ulink> and
name service <ulink url="nmbd.8.html">nmbd(8)</ulink> in slightly
different ways.</para>
@@ -1243,7 +1186,7 @@
queue the lock request, and periodically attempt to obtain
the lock until the timeout period expires.</para>
- <para>If this parameter is set to <constant>false</constant>, then
+ <para>If this parameter is set to <constant>False</constant>, then
Samba 2.2 will behave as previous versions of Samba would and
will fail the lock request immediately if the lock range
cannot be obtained.</para>
@@ -1322,64 +1265,11 @@
<para>Would change the scan time to every 5 minutes.</para></listitem>
</varlistentry>
-
-
- <varlistentry>
- <term><anchor id="CHANGESHARECOMMAND">change share command (G)</term>
- <listitem><para>Samba 2.2.0 introduced the ability to dynamically
- add and delete shares via the Windows NT 4.0 Server Manager. The
- <parameter>change share command</parameter> is used to define an
- external program or script which will modify an existing service definition
- in <filename>smb.conf</filename>. In order to successfully
- execute the <parameter>change share command</parameter>, <command>smbd</command>
- requires that the administrator be connected using a root account (i.e.
- uid == 0).
- </para>
-
- <para>
- When executed, <command>smbd</command> will automatically invoke the
- <parameter>change share command</parameter> with four parameters.
- </para>
-
- <itemizedlist>
- <listitem><para><parameter>configFile</parameter> - the location
- of the global <filename>smb.conf</filename> file.
- </para></listitem>
-
- <listitem><para><parameter>shareName</parameter> - the name of the new
- share.
- </para></listitem>
-
- <listitem><para><parameter>pathName</parameter> - path to an **existing**
- directory on disk.
- </para></listitem>
-
- <listitem><para><parameter>comment</parameter> - comment string to associate
- with the new share.
- </para></listitem>
- </itemizedlist>
-
- <para>
- This parameter is only used modify existing file shares definitions. To modify
- printer shares, use the "Printers..." folder as seen when browsing the Samba host.
- </para>
-
- <para>
- See also <link linkend="ADDSHARECOMMAND"><parameter>add share
- command</parameter></link>, <link linkend="DELETESHARECOMMAND"><parameter>delete
- share command</parameter></link>.
- </para>
- <para>Default: <emphasis>none</emphasis></para>
- <para>Example: <command>change share command = /usr/local/bin/addshare</command></para>
- </listitem>
- </varlistentry>
-
-
<varlistentry>
<term><anchor id="CHARACTERSET">character set (G)</term>
- <listitem><para>This allows <ulink url="smbd.8.html">smbd</ulink> to map incoming filenames
+ <listitem><para>This allows a smbd to map incoming filenames
from a DOS Code page (see the <link linkend="CLIENTCODEPAGE">client
code page</link> parameter) to several built in UNIX character sets.
The built in code page translations are:</para>
@@ -1656,11 +1546,6 @@
mode bits on created directories. See also the <link linkend="INHERITPERMISSIONS">
<parameter>inherit permissions</parameter></link> parameter.</para>
- <para>Note that this parameter does not apply to permissions
- set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
- a mask on access control lists also, they need to set the <link
- linkend="SECURITYMASK"><parameter>security mask</parameter></link>.</para>
-
<para>Default: <command>create mask = 0744</command></para>
<para>Example: <command>create mask = 0775</command></para></listitem>
</varlistentry>
@@ -1721,7 +1606,7 @@
<varlistentry>
<term><anchor id="DEBUGPID">debug pid (G)</term>
<listitem><para>When using only one log file for more then one
- forked <ulink url="smbd.8.html">smbd</ulink>-process there may be hard to follow which process
+ forked smbd-process there may be hard to follow which process
outputs which message. This boolean parameter is adds the process-id
to the timestamp message headers in the logfile when turned on.</para>
@@ -1764,9 +1649,15 @@
<varlistentry>
<term><anchor id="DEBUGLEVEL">debuglevel (G)</term>
- <listitem><para>Synonym for <link linkend="LOGLEVEL"><parameter>
- log level</parameter></link>.</para>
- </listitem>
+ <listitem><para>The value of the parameter (an integer) allows
+ the debug level (logging level) to be specified in the
+ <filename>smb.conf</filename> file. This is to give greater
+ flexibility in the configuration of the system.</para>
+
+ <para>The default will be the debug level specified on
+ the command line or level zero if none was specified.</para>
+
+ <para>Example: <command>debug level = 3</command></para></listitem>
</varlistentry>
@@ -1831,48 +1722,6 @@
<varlistentry>
- <term><anchor id="DELETEPRINTERCOMMAND">delete printer command (G)</term>
- <listitem><para>With the introduction of MS-RPC based printer
- support for Windows NT/2000 clients in Samba 2.2, it is now
- possible to delete printer at run time by issuing the
- DeletePrinter() RPC call.</para>
-
- <para>For a Samba host this means that the printer must be
- physically deleted from underlying printing system. The <parameter>
- deleteprinter command</parameter> defines a script to be run which
- will perform the necessary operations for removing the printer
- from the print system and from <filename>smb.conf</filename>.
- </para>
-
- <para>The <parameter>delete printer command</parameter> is
- automatically called with only one parameter: <parameter>
- "printer name"</parameter>.</para>
-
-
- <para>Once the <parameter>delete printer command</parameter> has
- been executed, <command>smbd</command> will reparse the <filename>
- smb.conf</filename> to associated printer no longer exists.
- If the sharename is still valid, then <command>smbd
- </command> will return an ACCESS_DENIED error to the client.</para>
-
- <para>See also <link linkend="ADDPRINTERCOMMAND"><parameter>
- add printer command</parameter></link>, <link
- linkend="printing"><parameter>printing</parameter></link>,
- <link linkend="SHOWADDPRINTERWIZARD"><parameter>show add
- printer wizard</parameter></link></para>
-
- <para>Default: <emphasis>none</emphasis></para>
- <para>Example: <command>deleteprinter command = /usr/bin/removeprinter
- </command></para>
- </listitem>
- </varlistentry>
-
-
-
-
-
-
- <varlistentry>
<term><anchor id="DELETEREADONLY">delete readonly (S)</term>
<listitem><para>This parameter allows readonly files to be deleted.
This is not normal DOS semantics, but is allowed by UNIX.</para>
@@ -1885,53 +1734,6 @@
</varlistentry>
-
- <varlistentry>
- <term><anchor id="DELETESHARECOMMAND">delete share command (G)</term>
- <listitem><para>Samba 2.2.0 introduced the ability to dynamically
- add and delete shares via the Windows NT 4.0 Server Manager. The
- <parameter>delete share command</parameter> is used to define an
- external program or script which will remove an existing service
- definition from <filename>smb.conf</filename>. In order to successfully
- execute the <parameter>delete share command</parameter>, <command>smbd</command>
- requires that the administrator be connected using a root account (i.e.
- uid == 0).
- </para>
-
- <para>
- When executed, <command>smbd</command> will automatically invoke the
- <parameter>delete share command</parameter> with two parameters.
- </para>
-
- <itemizedlist>
- <listitem><para><parameter>configFile</parameter> - the location
- of the global <filename>smb.conf</filename> file.
- </para></listitem>
-
- <listitem><para><parameter>shareName</parameter> - the name of
- the existing service.
- </para></listitem>
- </itemizedlist>
-
- <para>
- This parameter is only used to remove file shares. To delete printer shares,
- see the <link linkend="DELETEPRINTERCOMMAND"><parameter>delete printer
- command</parameter></link>.
- </para>
-
- <para>
- See also <link linkend="ADDSHARECOMMAND"><parameter>delete share
- command</parameter></link>, <link linkend="CHANGESHARECOMMAND"><parameter>change
- share</parameter></link>.
- </para>
-
- <para>Default: <emphasis>none</emphasis></para>
- <para>Example: <command>delete share command = /usr/local/bin/delshare</command></para>
-
- </listitem>
- </varlistentry>
-
-
<varlistentry>
@@ -1996,17 +1798,57 @@
+ <varlistentry>
+ <term><anchor id="DELETEPRINTERCOMMAND">deleteprinter command (G)</term>
+ <listitem><para>With the introduction of MS-RPC based printer
+ support for Windows NT/2000 clients in Samba 2.2, it is now
+ possible to delete printer at run time by issuing the
+ DeletePrinter() RPC call.</para>
+
+ <para>For a Samba host this means that the printer must be
+ physically deleted from underlying printing system. The <parameter>
+ deleteprinter command</parameter> defines a script to be run which
+ will perform the necessary operations for removing the printer
+ from the print system and from <filename>smb.conf</filename>.
+ </para>
+
+ <para>The <parameter>deleteprinter command</parameter> is
+ automatically called with only one parameter: <parameter>
+ "printer name"</parameter>.</para>
+
+
+ <para>Once the <parameter>deleteprinter command</parameter> has
+ been executed, <command>smbd</command> will reparse the <filename>
+ smb.conf</filename> to associated printer no longer exists.
+ If the sharename is still valid, then <command>smbd
+ </command> will return an ACCESS_DENIED error to the client.</para>
+
+ <para>See also <link linkend="ADDPRINTERCOMMAND"><parameter>
+ addprinter command</parameter></link>, <link
+ linkend="printing"><parameter>printing</parameter></link>,
+ <link linkend="SHOWADDPRINTERWIZARD"><parameter>show add
+ printer wizard</parameter></link></para>
+
+ <para>Default: <emphasis>none</emphasis></para>
+ <para>Example: <command>deleteprinter command = /usr/bin/removeprinter
+ </command></para>
+ </listitem>
+ </varlistentry>
+
+
+
+
<varlistentry>
<term><anchor id="DELETEVETOFILES">delete veto files (S)</term>
<listitem><para>This option is used when Samba is attempting to
delete a directory that contains one or more vetoed directories
(see the <link linkend="VETOFILES"><parameter>veto files</parameter></link>
- option). If this option is set to <constant>false</constant> (the default) then if a vetoed
+ option). If this option is set to False (the default) then if a vetoed
directory contains any non-vetoed files or directories then the
directory delete will fail. This is usually what you want.</para>
- <para>If this option is set to <constant>true</constant>, then Samba
+ <para>If this option is set to <constant>True</constant>, then Samba
will attempt to recursively delete any files and directories within
the vetoed directory. This can be useful for integration with file
serving systems such as NetAtalk which create meta-files within
@@ -2121,11 +1963,6 @@
</parameter></link> parameter. This parameter is set to 000 by
default (i.e. no extra mode bits are added).</para>
- <para>Note that this parameter does not apply to permissions
- set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
- a mask on access control lists also, they need to set the <link
- linkend="DIRECTORYSECURITYMASK"><parameter>directory security mask</parameter></link>.</para>
-
<para>See the <link linkend="FORCEDIRECTORYMODE"><parameter>force
directory mode</parameter></link> parameter to cause particular mode
bits to always be set on created directories.</para>
@@ -2166,15 +2003,17 @@
mask may be treated as a set of bits the user is not allowed
to change.</para>
- <para>If not set explicitly this parameter is set to 0777
- meaning a user is allowed to modify all the user/group/world
- permissions on a directory.</para>
+ <para>If not set explicitly this parameter is set to the same
+ value as the <link linkend="DIRECTORYMASK"><parameter>directory
+ mask</parameter></link> parameter. To allow a user to
+ modify all the user/group/world permissions on a directory, set
+ this parameter to 0777.</para>
<para><emphasis>Note</emphasis> that users who can access the
Samba server through other means can easily bypass this restriction,
so it is primarily useful for standalone "appliance" systems.
- Administrators of most normal systems will probably want to leave
- it as the default of <constant>0777</constant>.</para>
+ Administrators of most normal systems will probably want to set
+ it to 0777.</para>
<para>See also the <link linkend="FORCEDIRECTORYSECURITYMODE"><parameter>
force directory security mode</parameter></link>, <link
@@ -2182,8 +2021,9 @@
<link linkend="FORCESECURITYMODE"><parameter>force security mode
</parameter></link> parameters.</para>
- <para>Default: <command>directory security mask = 0777</command></para>
- <para>Example: <command>directory security mask = 0700</command></para>
+ <para>Default: <command>directory security mask = &lt;same as
+ directory mask&gt;</command></para>
+ <para>Example: <command>directory security mask = 0777</command></para>
</listitem>
</varlistentry>
@@ -2215,53 +2055,73 @@
<varlistentry>
<term><anchor id="DOMAINADMINGROUP">domain admin group (G)</term>
- <listitem><para>This parameter is intended as a temporary solution
- to enable users to be a member of the "Domain Admins" group when
- a Samba host is acting as a PDC. A complete solution will be provided
- by a system for mapping Windows NT/2000 groups onto UNIX groups.
- Please note that this parameter has a somewhat confusing name. It
- accepts a list of usernames and of group names in standard
- <filename>smb.conf</filename> notation.
- </para>
-
- <para>See also <link linkend="DOMAINGUESTGROUP"><parameter>domain
- guest group</parameter></link>, <link linkend="DOMAINLOGONS"><parameter>domain
- logons</parameter></link>
- </para>
-
- <para>Default: <emphasis>no domain administrators</emphasis></para>
- <para>Example: <command>domain admin group = root @wheel</command></para>
- </listitem>
+ <listitem><para>This is an <emphasis>EXPERIMENTAL</emphasis> parameter
+ that is part of the unfinished Samba NT Domain Controller Code. It may
+ be removed in a later release. To work with the latest code builds
+ that may have more support for Samba NT Domain Controller functionality
+ please subscribe to the mailing list <ulink
+ url="mailto:samba-ntdom@samba.org">samba-ntdom</ulink> available by
+ visiting the web page at <ulink url="http://lists.samba.org/">
+ http://lists.samba.org/</ulink>.</para></listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term><anchor id="DOMAINADMINUSERS">domain admin users (G)</term>
+ <listitem><para>This is an <emphasis>EXPERIMENTAL</emphasis> parameter
+ that is part of the unfinished Samba NT Domain Controller Code. It may
+ be removed in a later release. To work with the latest code builds
+ that may have more support for Samba NT Domain Controller functionality
+ please subscribe to the mailing list <ulink
+ url="mailto:samba-ntdom@samba.org">samba-ntdom</ulink> available by
+ visiting the web page at <ulink url="http://lists.samba.org/">
+ http://lists.samba.org/</ulink>.</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term><anchor id="DOMAINGROUPS">domain groups (G)</term>
+ <listitem><para>This is an <emphasis>EXPERIMENTAL</emphasis> parameter
+ that is part of the unfinished Samba NT Domain Controller Code. It may
+ be removed in a later release. To work with the latest code builds
+ that may have more support for Samba NT Domain Controller functionality
+ please subscribe to the mailing list <ulink
+ url="mailto:samba-ntdom@samba.org">samba-ntdom</ulink> available by
+ visiting the web page at <ulink url="http://lists.samba.org/">
+ http://lists.samba.org/</ulink>.</para></listitem>
+ </varlistentry>
+
<varlistentry>
<term><anchor id="DOMAINGUESTGROUP">domain guest group (G)</term>
- <listitem><para>This parameter is intended as a temporary solution
- to enable users to be a member of the "Domain Guests" group when
- a Samba host is acting as a PDC. A complete solution will be provided
- by a system for mapping Windows NT/2000 groups onto UNIX groups.
- Please note that this parameter has a somewhat confusing name. It
- accepts a list of usernames and of group names in standard
- <filename>smb.conf</filename> notation.
- </para>
-
- <para>See also <link linkend="DOMAINADMINGROUP"><parameter>domain
- admin group</parameter></link>, <link linkend="DOMAINLOGONS"><parameter>domain
- logons</parameter></link>
- </para>
-
- <para>Default: <emphasis>no domain guests</emphasis></para>
- <para>Example: <command>domain guest group = nobody @guest</command></para>
- </listitem>
+ <listitem><para>This is an <emphasis>EXPERIMENTAL</emphasis> parameter
+ that is part of the unfinished Samba NT Domain Controller Code. It may
+ be removed in a later release. To work with the latest code builds
+ that may have more support for Samba NT Domain Controller functionality
+ please subscribe to the mailing list <ulink
+ url="mailto:samba-ntdom@samba.org">samba-ntdom</ulink> available by
+ visiting the web page at <ulink url="http://lists.samba.org/">
+ http://lists.samba.org/</ulink>.</para></listitem>
+ </varlistentry>
+
+
+ <varlistentry>
+ <term><anchor id="DOMAINGUESTUSERS">domain guest users (G)</term>
+ <listitem><para>This is an <emphasis>EXPERIMENTAL</emphasis> parameter
+ that is part of the unfinished Samba NT Domain Controller Code. It may
+ be removed in a later release. To work with the latest code builds
+ that may have more support for Samba NT Domain Controller functionality
+ please subscribe to the mailing list <ulink
+ url="mailto:samba-ntdom@samba.org">samba-ntdom</ulink> available by
+ visiting the web page at <ulink url="http://lists.samba.org/">
+ http://lists.samba.org/</ulink>.</para></listitem>
</varlistentry>
<varlistentry>
<term><anchor id="DOMAINLOGONS">domain logons (G)</term>
- <listitem><para>If set to <constant>true</constant>, the Samba server will serve
+ <listitem><para>If set to true, the Samba server will serve
Windows 95/98 Domain logons for the <link linkend="WORKGROUP">
<parameter>workgroup</parameter></link> it is in. Samba 2.2 also
has limited capability to act as a domain controller for Windows
@@ -2336,7 +2196,7 @@
<varlistentry>
<term><anchor id="DOSFILEMODE">dos filemode (S)</term>
<listitem><para> The default behavior in Samba is to provide
- UNIX-like behavior where only the owner of a file/directory is
+ UNIX-like behavor where only the owner of a file/directory is
able to change the permissions on it. However, this behavior
is often confusing to DOS/Windows users. Enabling this parameter
allows a user who has write access to the file (by whatever
@@ -2386,7 +2246,7 @@
default, Samba runs with POSIX semantics and refuses to change the
timestamp on a file if the user <command>smbd</command> is acting
on behalf of is not the file owner. Setting this option to <constant>
- true</constant> allows DOS semantics and <ulink url="smbd.8.html">smbd</ulink> will change the file
+ True</constant> allows DOS semantics and smbd will change the file
timestamp as DOS requires.</para>
<para>Default: <command>dos filetimes = no</command></para></listitem>
@@ -2409,7 +2269,7 @@
</filename></ulink> file (see the <ulink url="smbpasswd.8.html"><command>
smbpasswd(8)</command></ulink> program for information on how to set up
and maintain this file), or set the <link
- linkend="SECURITY">security=[server|domain]</link> parameter which
+ linkend="SECURITY">security=[serve|domain]</link> parameter which
causes <command>smbd</command> to authenticate against another
server.</para>
@@ -2420,16 +2280,16 @@
<varlistentry>
<term><anchor id="ENHANCEDBROWSING">enhanced browsing (G)</term>
<listitem><para>This option enables a couple of enhancements to
- cross-subnet browse propagation that have been added in Samba
+ cross-subnet browse propogation that have been added in Samba
but which are not standard in Microsoft implementations.
<emphasis>These enhancements are currently only available in
the HEAD Samba CVS tree (not Samba 2.2.x).</emphasis></para>
- <para>The first enhancement to browse propagation consists of a regular
+ <para>The first enhancement to browse propogation consists of a regular
wildcard query to a Samba WINS server for all Domain Master Browsers,
- followed by a browse synchronization with each of the returned
+ followed by a browse synchronisation with each of the returned
DMBs. The second enhancement consists of a regular randomised browse
- synchronization with all currently known DMBs.</para>
+ synchronisation with all currently known DMBs.</para>
<para>You may wish to disable this option if you have a problem with empty
workgroups not disappearing from browse lists. Due to the restrictions
@@ -2437,7 +2297,7 @@
to stay around forever which can be annoying.</para>
<para>In general you should leave this option enabled as it makes
- cross-subnet browse propagation much more reliable.</para>
+ cross-subnet browse propogation much more reliable.</para>
<para>Default: <command>enhanced browsing = yes</command></para>
</listitem>
@@ -2497,7 +2357,7 @@
reported by Samba will be updated whenever a file is created or
or deleted in the directory. NMAKE finds all object files in
the object directory. The timestamp of the last one built is then
- compared to the timestamp of the object directory. If the
+ compared to the timestamp of the object dircetory. If the
directory's timestamp if newer, then all object files
will be rebuilt. Enabling this option
ensures directories always predate their contents and an NMAKE build
@@ -2572,12 +2432,6 @@
mode after the mask set in the <parameter>create mask</parameter>
parameter is applied.</para>
- <para>Note that by default this parameter does not apply to permissions
- set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
- this mask on access control lists also, they need to set the <link
- linkend="RESTRICTACLWITHMASK"><parameter>restrict acl with
- mask</parameter></link> to <constant>true</constant>.</para>
-
<para>See also the parameter <link linkend="CREATEMASK"><parameter>create
mask</parameter></link> for details on masking mode bits on files.</para>
@@ -2606,12 +2460,6 @@
mask in the parameter <parameter>directory mask</parameter> is
applied.</para>
- <para>Note that by default this parameter does not apply to permissions
- set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
- this mask on access control lists also, they need to set the <link
- linkend="RESTRICTACLWITHMASK"><parameter>restrict acl with
- mask</parameter></link> to <constant>true</constant>.</para>
-
<para>See also the parameter <link linkend="DIRECTORYMASK"><parameter>
directory mask</parameter></link> for details on masking mode bits
on created directories.</para>
@@ -2643,15 +2491,17 @@
mask may be treated as a set of bits that, when modifying security
on a directory, the user has always set to be 'on'.</para>
- <para>If not set explicitly this parameter is 000, which
- allows a user to modify all the user/group/world permissions on a
- directory without restrictions.</para>
+ <para>If not set explicitly this parameter is set to the same
+ value as the <link linkend="FORCEDIRECTORYMODE"><parameter>force
+ directory mode</parameter></link> parameter. To allow
+ a user to modify all the user/group/world permissions on a
+ directory without restrictions, set this parameter to 000.</para>
<para><emphasis>Note</emphasis> that users who can access the
Samba server through other means can easily bypass this restriction,
so it is primarily useful for standalone "appliance" systems.
- Administrators of most normal systems will probably want to leave
- it set as 0000.</para>
+ Administrators of most normal systems will probably want to set
+ it to 0000.</para>
<para>See also the <link linkend="DIRECTORYSECURITYMASK"><parameter>
directory security mask</parameter></link>, <link linkend="SECURITYMASK">
@@ -2659,8 +2509,9 @@
<link linkend="FORCESECURITYMODE"><parameter>force security mode
</parameter></link> parameters.</para>
- <para>Default: <command>force directory security mode = 0</command></para>
- <para>Example: <command>force directory security mode = 700</command></para>
+ <para>Default: <command>force directory security mode = &lt;same as
+ force directory mode&gt;</command></para>
+ <para>Example: <command>force directory security mode = 0</command></para>
</listitem>
</varlistentry>
@@ -2718,15 +2569,17 @@
mask may be treated as a set of bits that, when modifying security
on a file, the user has always set to be 'on'.</para>
- <para>If not set explicitly this parameter is set to 0,
- and allows a user to modify all the user/group/world permissions on a file,
- with no restrictions.</para>
+ <para>If not set explicitly this parameter is set to the same
+ value as the <link linkend="FORCECREATEMODE"><parameter>force
+ create mode</parameter></link> parameter. To allow a user to
+ modify all the user/group/world permissions on a file, with no
+ restrictions set this parameter to 000.</para>
<para><emphasis>Note</emphasis> that users who can access
the Samba server through other means can easily bypass this restriction,
so it is primarily useful for standalone "appliance" systems.
- Administrators of most normal systems will probably want to leave
- this set to 0000.</para>
+ Administrators of most normal systems will probably want to set
+ it to 0000.</para>
<para>See also the <link linkend="FORCEDIRECTORYSECURITYMODE"><parameter>
force directory security mode</parameter></link>,
@@ -2734,8 +2587,9 @@
mask</parameter></link>, <link linkend="SECURITYMASK"><parameter>
security mask</parameter></link> parameters.</para>
- <para>Default: <command>force security mode = 0</command></para>
- <para>Example: <command>force security mode = 700</command></para>
+ <para>Default: <command>force security mode = &lt;same as force
+ create mode&gt;</command></para>
+ <para>Example: <command>force security mode = 0</command></para>
</listitem>
</varlistentry>
@@ -2792,7 +2646,7 @@
caching algorithm will be used to reduce the time taken for getwd()
calls. This can have a significant impact on performance, especially
when the <link linkend="WIDELINKS"><parameter>wide links</parameter>
- </link>parameter is set to <constant>false</constant>.</para>
+ </link>parameter is set to <constant>False</constant>.</para>
<para>Default: <command>getwd cache = yes</command></para>
</listitem>
@@ -2927,7 +2781,7 @@
<varlistentry>
<term><anchor id="HOMEDIRMAP">homedir map (G)</term>
<listitem><para>If<link linkend="NISHOMEDIR"><parameter>nis homedir
- </parameter></link> is <constant>true</constant>, and <ulink
+ </parameter></link> is <constant>True</constant>, and <ulink
url="smbd.8.html"><command>smbd(8)</command></ulink> is also acting
as a Win95/98 <parameter>logon server</parameter> then this parameter
specifies the NIS (or YP) map from which the server for the user's
@@ -3068,7 +2922,7 @@
<parameter>hosts allow</parameter></link> which is about hosts
access to services and is more useful for guest services. <parameter>
hosts equiv</parameter> may be useful for NT clients which will
- not supply passwords to Samba.</para>
+ not supply passwords to samba.</para>
<para><emphasis>NOTE :</emphasis> The use of <parameter>hosts equiv
</parameter> can be a major security hole. This is because you are
@@ -3128,7 +2982,7 @@
inheritance (the code explicitly prohibits this).</para>
<para>This can be particularly useful on large systems with
- many users, perhaps several thousand, to allow a single [homes]
+ many users, perhaps several thousand,to allow a single [homes]
share to be used flexibly by each user.</para>
<para>See also <link linkend="CREATEMASK"><parameter>create mask
@@ -3283,8 +3137,8 @@
<varlistentry>
<term><anchor id="LANMANAUTH">lanman auth (G)</term>
- <listitem><para>This parameter determines whether or not <ulink url="smbd.8.html">smbd</ulink> will
- attempt to authenticate users using the LANMAN password hash.
+ <listitem><para>This parameter determines whether or not smbd will
+ attempt to authentication users using the LANMAN password hash.
If disabled, only clients which support NT password hashes (e.g. Windows
NT/2000 clients, smbclient, etc... but not Windows 95/98 or the MS DOS
network client) will be able to connect to the Samba host.</para>
@@ -3325,7 +3179,7 @@
oplocks</parameter></link> are supported then level2 oplocks are
not granted (even if this parameter is set to <constant>yes</constant>).
Note also, the <link linkend="OPLOCKS"><parameter>oplocks</parameter>
- </link> parameter must be set to <constant>true</constant> on this share in order for
+ </link> parameter must be set to "true" on this share in order for
this parameter to have any effect.</para>
<para>See also the <link linkend="OPLOCKS"><parameter>oplocks</parameter>
@@ -3404,15 +3258,15 @@
<term><anchor id="LOCALMASTER">local master (G)</term>
<listitem><para>This option allows <ulink url="nmbd.8.html"><command>
nmbd(8)</command></ulink> to try and become a local master browser
- on a subnet. If set to <constant>false</constant> then <command>
+ on a subnet. If set to <constant>False</constant> then <command>
nmbd</command> will not attempt to become a local master browser
on a subnet and will also lose in all browsing elections. By
- default this value is set to <constant>true</constant>. Setting this value to <constant>true</constant> doesn't
+ default this value is set to true. Setting this value to true doesn't
mean that Samba will <emphasis>become</emphasis> the local master
browser on a subnet, just that <command>nmbd</command> will <emphasis>
participate</emphasis> in elections for local master browser.</para>
- <para>Setting this value to <constant>false</constant> will cause <command>nmbd</command>
+ <para>Setting this value to False will cause <command>nmbd</command>
<emphasis>never</emphasis> to become a local master browser.</para>
<para>Default: <command>local master = yes</command></para>
@@ -3458,7 +3312,7 @@
<para>This option <emphasis>may</emphasis> be useful for read-only
filesystems which <emphasis>may</emphasis> not need locking (such as
- CDROM drives), although setting this parameter of <constant>no</constant>
+ cdrom drives), although setting this parameter of <constant>no</constant>
is not really recommended even in this case.</para>
<para>Be careful about disabling locking either globally or in a
@@ -3487,15 +3341,9 @@
<varlistentry>
<term><anchor id="LOGLEVEL">log level (G)</term>
- <listitem><para>The value of the parameter (an integer) allows
- the debug level (logging level) to be specified in the
- <filename>smb.conf</filename> file. This is to give greater
- flexibility in the configuration of the system.</para>
-
- <para>The default will be the log level specified on
- the command line or level zero if none was specified.</para>
-
- <para>Example: <command>log level = 3</command></para></listitem>
+ <listitem><para>Synonym for <link linkend="DEBUGLEVEL"><parameter>
+ debug level</parameter></link>.</para>
+ </listitem>
</varlistentry>
@@ -3578,7 +3426,7 @@
<para>The share and the path must be readable by the user for
the preferences and directories to be loaded onto the Windows NT
- client. The share must be writeable when the user logs in for the first
+ client. The share must be writeable when the logs in for the first
time, in order that the Windows NT client can create the NTuser.dat
and other directories.</para>
@@ -3612,7 +3460,7 @@
<listitem><para>This parameter specifies the batch file (.bat) or
NT command file (.cmd) to be downloaded and run on a machine when
a user successfully logs in. The file must contain the DOS
- style CR/LF line endings. Using a DOS-style editor to create the
+ style cr/lf line endings. Using a DOS-style editor to create the
file is recommended.</para>
<para>The script must be a relative path to the [netlogon]
@@ -3623,7 +3471,7 @@
<para><filename>/usr/local/samba/netlogon/STARTUP.BAT</filename></para>
- <para>The contents of the batch file are entirely your choice. A
+ <para>The contents of the batch file is entirely your choice. A
suggested command would be to add <command>NET TIME \\SERVER /SET
/YES</command>, to force every machine to synchronize clocks with
the same time server. Another use would be to add <command>NET USE
@@ -3660,7 +3508,7 @@
of implementing this is by using job priorities, where jobs
having a too low priority won't be sent to the printer.</para>
- <para>If a <parameter>%p</parameter> is given then the printer name
+ <para>If a <parameter>%p</parameter> is given then the printername
is put in its place. A <parameter>%j</parameter> is replaced with
the job number (an integer). On HPUX (see <parameter>printing=hpux
</parameter>), if the <parameter>-p%p</parameter> option is added
@@ -3743,7 +3591,7 @@
server reports on the first printer service connected to by the
client. This only happens if the connection number sent is invalid.</para>
- <para>If a <parameter>%p</parameter> is given then the printer name
+ <para>If a <parameter>%p</parameter> is given then the printername
is put in its place. Otherwise it is placed at the end of the
command.</para>
@@ -3774,7 +3622,7 @@
also the <link linkend="LPPAUSECOMMAND"><parameter>lppause command
</parameter></link> parameter.</para>
- <para>If a <parameter>%p</parameter> is given then the printer name
+ <para>If a <parameter>%p</parameter> is given then the printername
is put in its place. A <parameter>%j</parameter> is replaced with
the job number (an integer).</para>
@@ -3811,7 +3659,7 @@
<para>This command should be a program or script which takes
a printer name and job number, and deletes the print job.</para>
- <para>If a <parameter>%p</parameter> is given then the printer name
+ <para>If a <parameter>%p</parameter> is given then the printername
is put in its place. A <parameter>%j</parameter> is replaced with
the job number (an integer).</para>
@@ -3835,7 +3683,7 @@
<varlistentry>
<term><anchor id="MACHINEPASSWORDTIMEOUT">machine password timeout (G)</term>
- <listitem><para>If a Samba server is a member of a Windows
+ <listitem><para>If a Samba server is a member of an Windows
NT Domain (see the <link linkend="SECURITYEQUALSDOMAIN">security=domain</link>)
parameter) then periodically a running <ulink url="smbd.8.html">
smbd(8)</ulink> process will try and change the MACHINE ACCOUNT
@@ -3881,8 +3729,8 @@
executed on behalf of the connected user.</para>
<para>Scripts executed in this way will be deleted upon
- completion assuming that the user has the appropriate level
- of privilege and the file permissions allow the deletion.</para>
+ completion assuming that the user has the appripriate level
+ of priviledge and the ile permissions allow the deletion.</para>
<para>If the script generates output, output will be sent to
the file specified by the <link linkend="MAGICOUTPUT"><parameter>
@@ -3917,7 +3765,7 @@
<varlistentry>
<term><anchor id="MANGLEDMAP">mangled map (S)</term>
<listitem><para>This is for those who want to directly map UNIX
- file names which cannot be represented on Windows/DOS. The mangling
+ file names which can not be represented on Windows/DOS. The mangling
of names is not always what is needed. In particular you may have
documents with file extensions that differ between DOS and UNIX.
For example, under UNIX it is common to use <filename>.html</filename>
@@ -3930,7 +3778,7 @@
<para><command>mangled map = (*.html *.htm)</command></para>
<para>One very useful case is to remove the annoying <filename>;1
- </filename> off the ends of filenames on some CDROMs (only visible
+ </filename> off the ends of filenames on some CDROMS (only visible
under some UNIXes). To do this use a map of (*;1 *;).</para>
<para>Default: <emphasis>no mangled map</emphasis></para>
@@ -4012,12 +3860,12 @@
<para>The larger this value, the more likely it is that mangled
names can be successfully converted to correct long UNIX names.
- However, large stack sizes will slow most directory accesses. Smaller
+ However, large stack sizes will slow most directory access. Smaller
stacks save memory in the server (each stack element costs 256 bytes).
</para>
<para>It is not possible to absolutely guarantee correct long
- filenames, so be prepared for some surprises!</para>
+ file names, so be prepared for some surprises!</para>
<para>Default: <command>mangled stack = 50</command></para>
<para>Example: <command>mangled stack = 100</command></para>
@@ -4215,7 +4063,7 @@
<varlistentry>
<term><anchor id="MAXMUX">max mux (G)</term>
<listitem><para>This option controls the maximum number of
- outstanding simultaneous SMB operations that Samba tells the client
+ outstanding simultaneous SMB operations that samba tells the client
it will allow. You should never need to set this parameter.</para>
<para>Default: <command>max mux = 50</command></para>
@@ -4301,10 +4149,10 @@
<listitem><para>This parameter limits the maximum number of
<ulink url="smbd.8.html"><command>smbd(8)</command></ulink>
processes concurrently running on a system and is intended
- as a stopgap to prevent degrading service to clients in the event
+ as a stop gap to prevent degrading service to clients in the event
that the server has insufficient resources to handle more than this
number of connections. Remember that under normal operating
- conditions, each user will have an <ulink url="smbd.8.html">smbd</ulink> associated with him or her
+ conditions, each user will have an smbd associated with him or her
to handle connections to all shares from a given host.
</para>
@@ -4382,7 +4230,7 @@
THAT THIS COMMAND RETURN IMMEDIATELY</emphasis>. That's why I
have the '&' on the end. If it doesn't return immediately then
your PCs may freeze when sending messages (they should recover
- after 30 seconds, hopefully).</para>
+ after 30secs, hopefully).</para>
<para>All messages are delivered as the global guest user.
The command takes the standard substitutions, although <parameter>
@@ -4733,28 +4581,6 @@
-
- <varlistentry>
- <term><anchor id="OBEYPAMRESTRICTIONS">obey pam restrictions (G)</term>
- <listitem><para>When Samba 2.2 is configure 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
- and to ignore any account or session management. Note that Samba
- always ignores PAM for authentication in the case of <link
- linkend="ENCRYPTPASSWORDS"><parameter>encrypt passwords = yes</parameter>
- </link>. The reason is that PAM modules cannot support the challenge/response
- authentication mechanism needed in the presence of SMB password encryption.
- </para>
-
- <para>Default: <command>obey pam restrictions = no</command></para>
- </listitem>
- </varlistentry>
-
-
-
-
-
<varlistentry>
<term><anchor id="ONLYUSER">only user (S)</term>
<listitem><para>This is a boolean option that controls whether
@@ -4783,6 +4609,24 @@
+
+ <varlistentry>
+ <term><anchor id="OLELOCKINGCOMPATIBILITY">ole locking compatibility (G)</term>
+ <listitem><para>This parameter allows an administrator to turn
+ off the byte range lock manipulation that is done within Samba to
+ give compatibility for OLE applications. Windows OLE applications
+ use byte range locking as a form of inter-process communication, by
+ locking ranges of bytes around the 2^32 region of a file range. This
+ can cause certain UNIX lock managers to crash or otherwise cause
+ problems. Setting this parameter to <constant>no</constant> means you
+ trust your UNIX lock manager to handle such cases correctly.</para>
+
+ <para>Default: <command>ole locking compatibility = yes</command></para>
+ </listitem>
+ </varlistentry>
+
+
+
<varlistentry>
<term><anchor id="ONLYGUEST">only guest (S)</term>
<listitem><para>A synonym for <link linkend="GUESTONLY"><parameter>
@@ -4817,7 +4661,7 @@
improve the efficiency of the granting of oplocks under multiple
client contention for the same file.</para>
- <para>In brief it specifies a number, which causes <ulink url="smbd.8.html">smbd</ulink> not to
+ <para>In brief it specifies a number, which causes smbd not to
grant an oplock even when requested if the approximate number of
clients contending for an oplock on the same file goes over this
limit. This causes <command>smbd</command> to behave in a similar
@@ -4836,7 +4680,7 @@
<varlistentry>
<term><anchor id="OPLOCKS">oplocks (S)</term>
- <listitem><para>This boolean option tells <command>smbd</command> whether to
+ <listitem><para>This boolean option tells smbd whether to
issue oplocks (opportunistic locks) to file open requests on this
share. The oplock code can dramatically (approx. 30% or more) improve
the speed of access to files on Samba servers. It allows the clients
@@ -4897,7 +4741,7 @@
name&gt;.&lt;device name&gt;</para>
<para>For example, a valid entry using the HP LaserJet 5
- printer driver would appear as <command>HP LaserJet 5L = LASERJET.HP
+ printer driver woudl appear as <command>HP LaserJet 5L = LASERJET.HP
LaserJet 5L</command>.</para>
<para>The need for the file is due to the printer driver namespace
@@ -4912,21 +4756,6 @@
</varlistentry>
- <varlistentry>
- <term><anchor id="PAMPASSWORDCHANGE">pam password change (G)</term>
- <listitem><para>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, and the <link
- linkend="PASSWDCHAT"><parameter>passwd chat</parameter></link> must be
- be changed to work with the PAM prompts.
- </para>
-
- <para>Default: <command>pam password change = no</command></para>
-
- </listitem>
- </varlistentry>
-
<varlistentry>
<term><anchor id="PANICACTION">panic action (G)</term>
@@ -4947,7 +4776,7 @@
<listitem><para>This string controls the <emphasis>"chat"</emphasis>
conversation that takes places between <ulink
url="smbd.8.html">smbd</ulink> and the local password changing
- program to change the user's password. The string describes a
+ program to change the users password. The string describes a
sequence of response-receive pairs that <ulink url="smbd.8.html">
smbd(8)</ulink> uses to determine what to send to the
<link linkend="PASSWDPROGRAM"><parameter>passwd program</parameter>
@@ -4972,31 +4801,20 @@
in them into a single string.</para>
<para>If the send string in any part of the chat sequence
- is a full stop ".", then no string is sent. Similarly,
- if the expect string is a full stop then no string is expected.</para>
+ is a fullstop ".", then no string is sent. Similarly,
+ if the expect string is a fullstop then no string is expected.</para>
<para>Note that if the <link linkend="UNIXPASSWORDSYNC"><parameter>unix
- password sync</parameter></link> parameter is set to <constant>true</constant>, then this
+ password sync</parameter></link> parameter is set to true, then this
sequence is called <emphasis>AS ROOT</emphasis> when the SMB password
in the smbpasswd file is being changed, without access to the old
password cleartext. In this case the old password cleartext is set
to "" (the empty string).</para>
- <para>Also, if the <link linkend="PAMPASSWORDCHANGE"><parameter>pam
- password change</parameter></link> parameter is set to <constant>true</constant>, then the
- chat sequence should consist of three elements. The first element should
- match the PAM prompt for the old password, the second element should match
- the PAM prompt for the first request for the new password, and the final
- element should match the PAM prompt for the second request for the new password.
- These matches are done case insensitively. Under most conditions this change
- is done as root so the prompt for the old password will never be matched.
- </para>
-
<para>See also <link linkend="UNIXPASSWORDSYNC"><parameter>unix password
sync</parameter></link>, <link linkend="PASSWDPROGRAM"><parameter>
- passwd program</parameter></link> ,<link linkend="PASSWDCHATDEBUG">
- <parameter>passwd chat debug</parameter></link> and <link linkend="PAMPASSWORDCHANGE">
- <parameter>pam password change</parameter></link>.</para>
+ passwd program</parameter></link> and <link linkend="PASSWDCHATDEBUG">
+ <parameter>passwd chat debug</parameter></link>.</para>
<para>Default: <command>passwd chat = *new*password* %n\n
*new*password* %n\n *changed*</command></para>
@@ -5046,7 +4864,7 @@
it.</para>
<para><emphasis>Note</emphasis> that if the <parameter>unix
- password sync</parameter> parameter is set to <constant>true
+ password sync</parameter> parameter is set to <constant>True
</constant> then this program is called <emphasis>AS ROOT</emphasis>
before the SMB password in the <ulink url="smbpasswd.5.html">smbpasswd(5)
</ulink> file is changed. If this UNIX password change fails, then
@@ -5057,7 +4875,7 @@
is set this parameter <emphasis>MUST USE ABSOLUTE PATHS</emphasis>
for <emphasis>ALL</emphasis> programs called, and must be examined
for security implications. Note that by default <parameter>unix
- password sync</parameter> is set to <constant>false</constant>.</para>
+ password sync</parameter> is set to <constant>False</constant>.</para>
<para>See also <link linkend="UNIXPASSWORDSYNC"><parameter>unix
password sync</parameter></link>.</para>
@@ -5186,7 +5004,7 @@
password server then you will have to ensure that your users
are able to login from the Samba server, as when in <command>
security=server</command> mode the network logon will appear to
- come from there rather than from the user's workstation.</para></listitem>
+ come from there rather than from the users workstation.</para></listitem>
</itemizedlist>
<para>See also the <link linkend="SECURITY"><parameter>security
@@ -5257,7 +5075,7 @@
substitutions. The command may be run as the root on some
systems.</para>
- <para>An interesting example may be to unmount server
+ <para>An interesting example may be do unmount server
resources:</para>
<para><command>postexec = /etc/umount /cdrom</command></para>
@@ -5278,7 +5096,7 @@
<varlistentry>
<term><anchor id="POSTSCRIPT">postscript (S)</term>
<listitem><para>This parameter forces a printer to interpret
- the print files as PostScript. This is done by adding a <constant>%!
+ the print files as postscript. This is done by adding a <constant>%!
</constant> to the start of print output.</para>
<para>This is most useful when you have lots of PCs that persist
@@ -5334,7 +5152,7 @@
url="nmbd.8.html">nmbd(8)</ulink> is a preferred master browser
for its workgroup.</para>
- <para>If this is set to <constant>true</constant>, on startup, <command>nmbd</command>
+ <para>If this is set to true, on startup, <command>nmbd</command>
will force an election, and it will have a slight advantage in
winning the election. It is recommended that this parameter is
used in conjunction with <command><link linkend="DOMAINMASTER"><parameter>
@@ -5571,11 +5389,11 @@
<varlistentry>
<term><anchor id="PRINTERDRIVER">printer driver (S)</term>
- <listitem><para><emphasis>Note :</emphasis>This is a deprecated
+ <listitem><para><emphasis>Note :</emphasis>This is a depreciated
parameter and will be removed in the next major release
following version 2.2. Please see the instructions in
- the <ulink url="printer_driver2.html">Samba 2.2. Printing
- HOWTO</ulink> for more information
+ <filename>PRINTER_DRIVER2.txt</filename> in the <filename>docs
+ </filename> of the Samba distribution for more information
on the new method of loading printer drivers onto a Samba server.
</para>
@@ -5604,11 +5422,11 @@
<varlistentry>
<term><anchor id="PRINTERDRIVERFILE">printer driver file (G)</term>
- <listitem><para><emphasis>Note :</emphasis>This is a deprecated
+ <listitem><para><emphasis>Note :</emphasis>This is a depreciated
parameter and will be removed in the next major release
following version 2.2. Please see the instructions in
- the <ulink url="printer_driver2.html">Samba 2.2. Printing
- HOWTO</ulink> for more information
+ <filename>PRINTER_DRIVER2.txt</filename> in the <filename>docs
+ </filename> of the Samba distribution for more information
on the new method of loading printer drivers onto a Samba server.
</para>
@@ -5622,7 +5440,7 @@
<para>This file is created from Windows 95 <filename>msprint.inf
</filename> files found on the Windows 95 client system. For more
details on setting up serving of printer drivers to Windows 95
- clients, see the outdated documentation file in the <filename>docs/</filename>
+ clients, see the documentation file in the <filename>docs/</filename>
directory, <filename>PRINTER_DRIVER.txt</filename>.</para>
<para>See also <link linkend="PRINTERDRIVERLOCATION"><parameter>
@@ -5640,11 +5458,11 @@
<varlistentry>
<term><anchor id="PRINTERDRIVERLOCATION">printer driver location (S)</term>
- <listitem><para><emphasis>Note :</emphasis>This is a deprecated
+ <listitem><para><emphasis>Note :</emphasis>This is a depreciated
parameter and will be removed in the next major release
following version 2.2. Please see the instructions in
- the <ulink url="printer_driver2.html">Samba 2.2. Printing
- HOWTO</ulink> for more information
+ <filename>PRINTER_DRIVER2.txt</filename> in the <filename>docs
+ </filename> of the Samba distribution for more information
on the new method of loading printer drivers onto a Samba server.
</para>
@@ -5657,7 +5475,7 @@
<para>Where MACHINE is the NetBIOS name of your Samba server,
and PRINTER$ is a share you set up for serving printer driver
- files. For more details on setting this up see the outdated documentation
+ files. For more details on setting this up see the documentation
file in the <filename>docs/</filename> directory, <filename>
PRINTER_DRIVER.txt</filename>.</para>
@@ -5706,7 +5524,7 @@
<parameter>lpq command</parameter>, <parameter>lppause command
</parameter>, <parameter>lpresume command</parameter>, and
<parameter>lprm command</parameter> if specified in the
- [global] section.</para>
+ [global]f> section.</para>
<para>Currently eight printing styles are supported. They are
<constant>BSD</constant>, <constant>AIX</constant>,
@@ -5750,17 +5568,17 @@
<varlistentry>
<term><anchor id="QUEUEPAUSECOMMAND">queuepause command (S)</term>
<listitem><para>This parameter specifies the command to be
- executed on the server host in order to pause the printer queue.</para>
+ executed on the server host in order to pause the printerqueue.</para>
<para>This command should be a program or script which takes
- a printer name as its only parameter and stops the printer queue,
+ a printer name as its only parameter and stops the printerqueue,
such that no longer jobs are submitted to the printer.</para>
<para>This command is not supported by Windows for Workgroups,
- but can be issued from the Printers window under Windows 95
+ but can be issued from the Printer's window under Windows 95
and NT.</para>
- <para>If a <parameter>%p</parameter> is given then the printer name
+ <para>If a <parameter>%p</parameter> is given then the printername
is put in its place. Otherwise it is placed at the end of the command.
</para>
@@ -5779,20 +5597,20 @@
<varlistentry>
<term><anchor id="QUEUERESUMECOMMAND">queueresume command (S)</term>
<listitem><para>This parameter specifies the command to be
- executed on the server host in order to resume the printer queue. It
+ executed on the server host in order to resume the printerqueue. It
is the command to undo the behavior that is caused by the
previous parameter (<link linkend="QUEUEPAUSECOMMAND"><parameter>
queuepause command</parameter></link>).</para>
<para>This command should be a program or script which takes
- a printer name as its only parameter and resumes the printer queue,
+ a printer name as its only parameter and resumes the printerqueue,
such that queued jobs are resubmitted to the printer.</para>
<para>This command is not supported by Windows for Workgroups,
- but can be issued from the Printers window under Windows 95
+ but can be issued from the Printer's window under Windows 95
and NT.</para>
- <para>If a <parameter>%p</parameter> is given then the printer name
+ <para>If a <parameter>%p</parameter> is given then the printername
is put in its place. Otherwise it is placed at the end of the
command.</para>
@@ -5924,7 +5742,7 @@
<para><command>remote announce = 192.168.2.255/SERVERS
192.168.4.255/STAFF</command></para>
- <para>the above line would cause <command>nmbd</command> to announce itself
+ <para>the above line would cause nmbd to announce itself
to the two given IP addresses using the given workgroup names.
If you leave out the workgroup name then the one given in
the <link linkend="WORKGROUP"><parameter>workgroup</parameter></link>
@@ -5948,10 +5766,10 @@
<term><anchor id="REMOTEBROWSESYNC">remote browse sync (G)</term>
<listitem><para>This option allows you to setup <ulink
url="nmbd.8.html">nmbd(8)</ulink> to periodically request
- synchronization of browse lists with the master browser of a Samba
+ synchronization of browse lists with the master browser of a samba
server that is on a remote segment. This option will allow you to
gain browse lists for multiple workgroups across routed networks. This
- is done in a manner that does not work with any non-Samba servers.</para>
+ is done in a manner that does not work with any non-samba servers.</para>
<para>This is useful if you want your Samba server and all local
clients to appear in a remote workgroup for which the normal browse
@@ -5972,7 +5790,7 @@
of known browse masters if your network config is that stable. If
a machine IP address is given Samba makes NO attempt to validate
that the remote machine is available, is listening, nor that it
- is in fact the browse master on its segment.</para>
+ is in fact the browse master on it's segment.</para>
<para>Default: <command>remote browse sync = &lt;empty string&gt;
</command></para>
@@ -5982,40 +5800,11 @@
<varlistentry>
- <term><anchor id="RESTRICTACLWITHMASK">restrict acl with mask (S)</term>
- <listitem><para>This is a boolean parameter. If set to <constant>false</constant> (default), then
- creation of files with access control lists (ACLS) and modification of ACLs
- using the Windows NT/2000 ACL editor will be applied directly to the file
- or directory.</para>
-
- <para>If set to <constant>true</constant>, then all requests to set an ACL on a file will have the
- parameters <link linkend="CREATEMASK"><parameter>create mask</parameter></link>,
- <link linkend="FORCECREATEMODE"><parameter>force create mode</parameter></link>
- applied before setting the ACL, and all requests to set an ACL on a directory will
- have the parameters <link linkend="DIRECTORYMASK"><parameter>directory
- mask</parameter></link>, <link linkend="FORCEDIRECTORYMODE"><parameter>force
- directory mode</parameter></link> applied before setting the ACL.
- </para>
-
- <para>See also <link linkend="CREATEMASK"><parameter>create mask</parameter></link>,
- <link linkend="FORCECREATEMODE"><parameter>force create mode</parameter></link>,
- <link linkend="DIRECTORYMASK"><parameter>directory mask</parameter></link>,
- <link linkend="FORCEDIRECTORYMODE"><parameter>force directory mode</parameter></link>
- </para>
-
- <para>Default: <command>restrict acl with mask = no</command></para>
- </listitem>
- </varlistentry>
-
-
-
-
- <varlistentry>
<term><anchor id="RESTRICTANONYMOUS">restrict anonymous (G)</term>
- <listitem><para>This is a boolean parameter. If it is <constant>true</constant>, then
+ <listitem><para>This is a boolean parameter. If it is true, then
anonymous access to the server will be restricted, namely in the
case where the server is expecting the client to send a username,
- but it doesn't. Setting it to <constant>true</constant> will force these anonymous
+ but it doesn't. Setting it to true will force these anonymous
connections to be denied, and the client will be required to always
supply a username and password when connecting. Use of this parameter
is only recommended for homogeneous NT client environments.</para>
@@ -6025,10 +5814,10 @@
likes to use anonymous connections when refreshing the share list,
and this is a way to work around that.</para>
- <para>When restrict anonymous is <constant>true</constant>, all anonymous connections
+ <para>When restrict anonymous is true, all anonymous connections
are denied no matter what they are for. This can effect the ability
- of a machine to access the Samba Primary Domain Controller to revalidate
- its machine account after someone else has logged on the client
+ of a machine to access the samba Primary Domain Controller to revalidate
+ it's machine account after someone else has logged on the client
interactively. The NT client will display a message saying that
the machine's account in the domain doesn't exist or the password is
bad. The best way to deal with this is to reboot NT client machines
@@ -6061,7 +5850,7 @@
<varlistentry>
<term><anchor id="ROOTDIRECTORY">root directory (G)</term>
<listitem><para>The server will <command>chroot()</command> (i.e.
- Change its root directory) to this directory on startup. This is
+ Change it's root directory) to this directory on startup. This is
not strictly necessary for secure operation. Even without it the
server will deny access to files not in one of the service entries.
It may also check for, and deny access to, soft links to other
@@ -6095,7 +5884,7 @@
<listitem><para>This is the same as the <parameter>postexec</parameter>
parameter except that the command is run as root. This
is useful for unmounting filesystems
- (such as CDROMs) after a connection is closed.</para>
+ (such as cdroms) after a connection is closed.</para>
<para>See also <link linkend="POSTEXEC"><parameter>
postexec</parameter></link>.</para>
@@ -6109,8 +5898,8 @@
<term><anchor id="ROOTPREEXEC">root preexec (S)</term>
<listitem><para>This is the same as the <parameter>preexec</parameter>
parameter except that the command is run as root. This
- is useful for mounting filesystems (such as CDROMs) when a
- connection is opened.</para>
+ is useful for mounting filesystems (such as cdroms) after a
+ connection is closed.</para>
<para>See also <link linkend="PREEXEC"><parameter>
preexec</parameter></link> and <link linkend="PREEXECCLOSE">
@@ -6193,7 +5982,7 @@
<para><anchor id="SECURITYEQUALSSHARE"><emphasis>SECURITY = SHARE
</emphasis></para>
- <para>When clients connect to a share level security server they
+ <para>When clients connect to a share level security server then
need not log onto the server with a valid username and password before
attempting to connect to a shared resource (although modern clients
such as Windows 95/98 and Windows NT will send a logon request with
@@ -6299,7 +6088,7 @@
<filename>ENCRYPTION.txt</filename> for details on how to set this
up.</para>
- <para><emphasis>Note</emphasis> that from the client's point of
+ <para><emphasis>Note</emphasis> that from the clients point of
view <command>security = server</command> is the same as <command>
security = user</command>. It only affects how the server deals
with the authentication, it does not in any way affect what the
@@ -6338,7 +6127,7 @@
exist as well as the account on the Domain Controller to allow
Samba to have a valid UNIX account to map file access to.</para>
- <para><emphasis>Note</emphasis> that from the client's point
+ <para><emphasis>Note</emphasis> that from the clients point
of view <command>security = domain</command> is the same as <command>security = user
</command>. It only affects how the server deals with the authentication,
it does not in any way affect what the client sees.</para>
@@ -6388,15 +6177,17 @@
mask may be treated as a set of bits the user is not allowed
to change.</para>
- <para>If not set explicitly this parameter is 0777, allowing
- a user to modify all the user/group/world permissions on a file.
- </para>
+ <para>If not set explicitly this parameter is set to the same
+ value as the <link linkend="CREATEMASK"><parameter>create mask
+ </parameter></link> parameter. To allow a user to modify all the
+ user/group/world permissions on a file, set this parameter to
+ 0777.</para>
<para><emphasis>Note</emphasis> that users who can access the
Samba server through other means can easily bypass this
restriction, so it is primarily useful for standalone
"appliance" systems. Administrators of most normal systems will
- probably want to leave it set to <constant>0777</constant>.</para>
+ probably want to set it to 0777.</para>
<para>See also the <link linkend="FORCEDIRECTORYSECURITYMODE">
<parameter>force directory security mode</parameter></link>,
@@ -6404,8 +6195,9 @@
security mask</parameter></link>, <link linkend="FORCESECURITYMODE">
<parameter>force security mode</parameter></link> parameters.</para>
- <para>Default: <command>security mask = 0777</command></para>
- <para>Example: <command>security mask = 0770</command></para>
+ <para>Default: <command>security mask = &lt;same as create mask&gt;
+ </command></para>
+ <para>Example: <command>security mask = 0777</command></para>
</listitem>
</varlistentry>
@@ -6414,7 +6206,7 @@
<term><anchor id="SERVERSTRING">server string (G)</term>
<listitem><para>This controls what string will show up in the
printer comment box in print manager and next to the IPC connection
- in <command>net view</command>. It can be any string that you wish
+ in <command>net view"</command>. It can be any string that you wish
to show to your users.</para>
<para>It also sets what will appear in browse lists next
@@ -6481,6 +6273,7 @@
+
<varlistentry>
<term><anchor id="SHORTPRESERVECASE">short preserve case (S)</term>
<listitem><para>This boolean parameter controls if new files
@@ -6515,7 +6308,7 @@
Administrator privileges. If the user does not have administrative
access on the print server (i.e is not root or a member of the
<parameter>printer admin</parameter> group), the OpenPrinterEx()
- call fails and the client makes another open call with a request for
+ call fails and the clients another open call with a request for
a lower privilege level. This should succeed, however the APW
icon will not be displayed.</para>
@@ -6561,7 +6354,7 @@
support multiple virtual interfaces on the one server, each
with a different configuration.</para>
- <para>By default Samba will accept connections on any
+ <para>By default samba will accept connections on any
address.</para>
<para>Example: <command>socket address = 192.168.2.20</command>
@@ -6682,8 +6475,8 @@
current binary version of Samba.</para>
<para>This variable enables or disables the entire SSL mode. If
- it is set to <constant>no</constant>, the SSL-enabled Samba behaves
- exactly like the non-SSL Samba. If set to <constant>yes</constant>,
+ it is set to <constant>no</constant>, the SSL enabled samba behaves
+ exactly like the non-SSL samba. If set to <constant>yes</constant>,
it depends on the variables <link linkend="SSLHOSTS"><parameter>
ssl hosts</parameter></link> and <link linkend="SSLHOSTSRESIGN">
<parameter>ssl hosts resign</parameter></link> whether an SSL
@@ -6708,7 +6501,7 @@
<para>This variable defines where to look up the Certification
Authorities. The given directory should contain one file for
- each CA that Samba will trust. The file name must be the hash
+ each CA that samba will trust. The file name must be the hash
value over the "Distinguished Name" of the CA. How this directory
is set up is explained later in this document. All files within the
directory that don't fit into this naming scheme are ignored. You
@@ -6850,14 +6643,14 @@
this code is <emphasis>NOT</emphasis> enabled by default in any
current binary version of Samba.</para>
- <para>These two variables define whether Samba will go
- into SSL mode or not. If none of them is defined, Samba will
+ <para>These two variables define whether samba will go
+ into SSL mode or not. If none of them is defined, samba will
allow only SSL connections. If the <link linkend="SSLHOSTS">
<parameter>ssl hosts</parameter></link> variable lists
hosts (by IP-address, IP-address range, net group or name),
only these hosts will be forced into SSL mode. If the <parameter>
ssl hosts resign</parameter> variable lists hosts, only these
- hosts will <emphasis>NOT</emphasis> be forced into SSL mode. The syntax for these two
+ hosts will NOT be forced into SSL mode. The syntax for these two
variables is the same as for the <link linkend="HOSTSALLOW"><parameter>
hosts allow</parameter></link> and <link linkend="HOSTSDENY">
<parameter>hosts deny</parameter></link> pair of variables, only
@@ -7049,7 +6842,7 @@
<para>When strict locking is <constant>no</constant> the server does file
lock checks only when the client explicitly asks for them.</para>
- <para>Well-behaved clients always ask for lock checks when it
+ <para>Well behaved clients always ask for lock checks when it
is important, so in the vast majority of cases <command>strict
locking = no</command> is preferable.</para>
@@ -7068,7 +6861,7 @@
all outstanding data in kernel disk buffers has been safely stored
onto stable storage. This is very slow and should only be done
rarely. Setting this parameter to <constant>no</constant> (the
- default) means that <ulink url="smbd.8.html">smbd</ulink> ignores the Windows applications requests for
+ default) means that smbd ignores the Windows applications requests for
a sync call. There is only a possibility of losing data if the
operating system itself that Samba is running on crashes, so there is
little danger in this default setting. In addition, this fixes many
@@ -7099,10 +6892,10 @@
<term><anchor id="SYNCALWAYS">sync always (S)</term>
<listitem><para>This is a boolean parameter that controls
whether writes will always be written to stable storage before
- the write call returns. If this is <constant>false</constant> then the server will be
+ the write call returns. If this is false then the server will be
guided by the client's request in each write call (clients can
set a bit indicating that a particular write should be synchronous).
- If this is <constant>true</constant> then every write will be followed by a <command>fsync()
+ If this is true then every write will be followed by a <command>fsync()
</command> call to ensure the data is written to disk. Note that
the <parameter>strict sync</parameter> parameter must be set to
<constant>yes</constant> in order for this parameter to have
@@ -7224,7 +7017,7 @@
<listitem><para>This parameter accepts an integer value which defines
a limit on the maximum number of print jobs that will be accepted
system wide at any given time. If a print job is submitted
- by a client which will exceed this number, then <ulink url="smbd.8.html">smbd</ulink> will return an
+ by a client which will exceed this number, then smbd will return an
error indicating that no space is available on the server. The
default value of 0 means that no such limit exists. This parameter
can be used to prevent a server from exceeding its capacity and is
@@ -7245,10 +7038,10 @@
<listitem><para>This boolean parameter controls whether Samba
attempts to synchronize the UNIX password with the SMB password
when the encrypted SMB password in the smbpasswd file is changed.
- If this is set to <constant>true</constant> the program specified in the <parameter>passwd
+ If this is set to true the program specified in the <parameter>passwd
program</parameter>parameter is called <emphasis>AS ROOT</emphasis> -
to allow the new UNIX password to be set without access to the
- old UNIX password (as the SMB password change code has no
+ old UNIX password (as the SMB password has change code has no
access to the old password cleartext, only the new).</para>
<para>See also <link linkend="PASSWDPROGRAM"><parameter>passwd
@@ -7262,6 +7055,19 @@
<varlistentry>
+ <term><anchor id="UNIXREALNAME">unix realname (G)</term>
+ <listitem><para>This boolean parameter when set causes samba
+ to supply the real name field from the unix password file to
+ the client. This is useful for setting up mail clients and WWW
+ browsers on systems used by more than one person.</para>
+
+ <para>Default: <command>unix realname = yes</command></para>
+ </listitem>
+ </varlistentry>
+
+
+
+ <varlistentry>
<term><anchor id="UPDATEENCRYPTED">update encrypted (G)</term>
<listitem><para>This boolean parameter allows a user logging
on with a plaintext password to have their encrypted (hashed)
@@ -7295,8 +7101,8 @@
<varlistentry>
<term><anchor id="USERHOSTS">use rhosts (G)</term>
- <listitem><para>If this global parameter is <constant>true</constant>, it specifies
- that the UNIX user's <filename>.rhosts</filename> file in their home directory
+ <listitem><para>If this global parameter is a true, it specifies
+ that the UNIX users <filename>.rhosts</filename> file in their home directory
will be read to find the names of hosts and users who will be allowed
access without specifying a password.</para>
@@ -7363,7 +7169,7 @@
</parameter></link> parameter.</para>
<para>If any of the usernames begin with a '@' then the name
- will be looked up first in the NIS netgroups list (if Samba
+ will be looked up first in the yp netgroups list (if Samba
is compiled with netgroup support), followed by a lookup in
the UNIX groups database and will expand to a list of all users
in the group of that name.</para>
@@ -7373,7 +7179,7 @@
expand to a list of all users in the group of that name.</para>
<para>If any of the usernames begin with a '&'then the name
- will be looked up only in the NIS netgroups database (if Samba
+ will be looked up only in the yp netgroups database (if Samba
is compiled with netgroup support) and will expand to a list
of all users in the netgroup group of that name.</para>
@@ -7515,7 +7321,7 @@
<term><anchor id="UTMP">utmp (S)</term>
<listitem><para>This boolean parameter is only available if
Samba has been configured and compiled with the option <command>
- --with-utmp</command>. If set to <constant>true</constant> then Samba will attempt
+ --with-utmp</command>. If set to True then Samba will attempt
to add utmp or utmpx records (depending on the UNIX system) whenever a
connection is made to a Samba server. Sites may use this to record the
user connecting to a Samba share.</para>
@@ -7729,7 +7535,7 @@
<varlistentry>
<term><anchor id="VFSOPTIONS">vfs options (S)</term>
<listitem><para>This parameter allows parameters to be passed
- to the vfs layer at initialization time. The Samba VFS layer
+ to the vfs layer at initialisation time. The Samba VFS layer
is new to Samba 2.2 and must be enabled at compile time
with --with-vfs. See also <link linkend="VFSOBJECT"><parameter>
vfs object</parameter></link>.</para>
@@ -7796,7 +7602,7 @@
<para>The winbind gid parameter specifies the range of group
ids that are allocated by the <ulink url="winbindd.8.html">
winbindd(8)</ulink> daemon. This range of group ids should have no
- existing local or NIS groups within it as strange conflicts can
+ existing local or nis groups within it as strange conflicts can
occur otherwise.</para>
<para>Default: <command>winbind gid = &lt;empty string&gt;
@@ -7835,7 +7641,7 @@
<para>The winbind gid parameter specifies the range of group
ids that are allocated by the <ulink url="winbindd.8.html">
winbindd(8)</ulink> daemon. This range of ids should have no
- existing local or NIS users within it as strange conflicts can
+ existing local or nis users within it as strange conflicts can
occur otherwise.</para>
<para>Default: <command>winbind uid = &lt;empty string&gt;
@@ -7871,12 +7677,12 @@
name has not previously been added, in that case it should be treated
as an add.</para></listitem>
- <listitem><para>The second argument is the NetBIOS name. If the
+ <listitem><para>The second argument is the netbios name. If the
name is not a legal name then the wins hook is not called.
Legal names contain only letters, digits, hyphens, underscores
and periods.</para></listitem>
- <listitem><para>The third argument is the NetBIOS name
+ <listitem><para>The third argument is the netbios name
type as a 2 digit hexadecimal number. </para></listitem>
<listitem><para>The fourth argument is the TTL (time to live)
@@ -7939,9 +7745,9 @@
<term><anchor id="WINSSUPPORT">wins support (G)</term>
<listitem><para>This boolean controls if the <ulink url="nmbd.8.html">
nmbd(8)</ulink> process in Samba will act as a WINS server. You should
- not set this to <constant>true</constant> unless you have a multi-subnetted network and
+ not set this to true unless you have a multi-subnetted network and
you wish a particular <command>nmbd</command> to be your WINS server.
- Note that you should <emphasis>NEVER</emphasis> set this to <constant>true</constant>
+ Note that you should <emphasis>NEVER</emphasis> set this to true
on more than one machine in your network.</para>
<para>Default: <command>wins support = no</command></para>
@@ -7988,7 +7794,7 @@
within it.</para>
<para>This cache allows Samba to batch client writes into a more
- efficient write size for RAID disks (i.e. writes may be tuned to
+ efficient write size for RAID disks (ie. writes may be tuned to
be the RAID stripe size) and can improve performance on systems
where the disk subsystem is a bottleneck but there is free
memory for userspace programs.</para>
@@ -8046,7 +7852,7 @@
<varlistentry>
<term><anchor id="WRITERAW">write raw (G)</term>
<listitem><para>This parameter controls whether or not the server
- will support raw write SMB's when transferring data from clients.
+ will support raw writes SMB's when transferring data from clients.
You should never need to change this parameter.</para>
<para>Default: <command>write raw = yes</command></para>
diff --git a/docs/docbook/manpages/smbcacls.1.sgml b/docs/docbook/manpages/smbcacls.1.sgml
index 69aa9674928..9561099851e 100644
--- a/docs/docbook/manpages/smbcacls.1.sgml
+++ b/docs/docbook/manpages/smbcacls.1.sgml
@@ -14,7 +14,7 @@
<refsynopsisdiv>
<cmdsynopsis>
- <command>smbcacls</command>
+ <command>nmblookup</command>
<arg choice="req">//server/share</arg>
<arg choice="req">filename</arg>
<arg choice="opt">-U username</arg>
@@ -35,7 +35,7 @@
<para>This tool is part of the <ulink url="samba.7.html">
Samba</ulink> suite.</para>
- <para>The <command>smbcacls</command> program manipulates NT Access Control Lists
+ <para>The smbcacls program manipulates NT Access Control Lists
(ACLs) on SMB file shares. </para>
</refsect1>
@@ -43,7 +43,7 @@
<refsect1>
<title>OPTIONS</title>
- <para>The following options are available to the <command>smbcacls</command> program.
+ <para>The following options are available to the smbcacls program.
The format of ACLs is described in the section ACL FORMAT </para>
@@ -68,7 +68,7 @@
<varlistentry>
<term>-D acls</term>
- <listitem><para>Delete any ACLs specified on the command line.
+ <listitem><para>Delete any ACLs specfied on the command line.
An error will be printed for each ACL specified that was not
already present in the ACL list. </para></listitem>
</varlistentry>
@@ -223,8 +223,8 @@ ACL:&lt;sid or name&gt;:&lt;type&gt;/&lt;flags&gt;/&lt;mask&gt;
depending on the success or otherwise of the operations performed.
The exit status may be one of the following values. </para>
- <para>If the operation succeeded, smbcacls returns and exit
- status of 0. If <command>smbcacls</command> couldn't connect to the specified server,
+ <para>If the operation succeded, smbcacls returns and exit
+ status of 0. If smbcacls couldn't connect to the specified server,
or there was an error getting or setting the ACLs, an exit status
of 1 is returned. If there was an error parsing any command line
arguments, an exit status of 2 is returned. </para>
diff --git a/docs/docbook/manpages/smbclient.1.sgml b/docs/docbook/manpages/smbclient.1.sgml
index 54c42fcaa1e..f82d59d29c1 100644
--- a/docs/docbook/manpages/smbclient.1.sgml
+++ b/docs/docbook/manpages/smbclient.1.sgml
@@ -81,8 +81,8 @@
</para>
<para>The server name is looked up according to either
- the <parameter>-R</parameter> parameter to <command>smbclient</command> or
- using the name resolve order parameter in the <filename>smb.conf</filename> file,
+ the <parameter>-R</parameter> parameter to smbclient or
+ using the name resolve order parameter in the smb.conf file,
allowing an administrator to change the order and methods
by which server names are looked up. </para></listitem>
</varlistentry>
@@ -131,7 +131,7 @@
<term>-R &lt;name resolve order&gt;</term>
<listitem><para>This option is used by the programs in the Samba
suite to determine what naming services and in what order to resolve
- host names to IP addresses. The option takes a space-separated
+ host names to IP addresses. The option takes a space separated
string of different name resolution options.</para>
<para>The options are :"lmhosts", "host", "wins" and "bcast". They
@@ -147,7 +147,7 @@
<listitem><para><constant>host</constant> : Do a standard host
name to IP address resolution, using the system <filename>/etc/hosts
</filename>, NIS, or DNS lookups. This method of name resolution
- is operating system dependent, for instance on IRIX or Solaris this
+ is operating system depended for instance on IRIX or Solaris this
may be controlled by the <filename>/etc/nsswitch.conf</filename>
file). Note that this method is only used if the NetBIOS name
type being queried is the 0x20 (server) name type, otherwise
@@ -172,7 +172,7 @@
<para>The default order is lmhosts, host, wins, bcast and without
this parameter or any entry in the <parameter>name resolve order
- </parameter> parameter of the <filename>smb.conf</filename> file the name resolution
+ </parameter> parameter of the smb.conf file the name resolution
methods will be attempted in this order. </para></listitem>
</varlistentry>
@@ -216,7 +216,7 @@
<term>-i scope</term>
<listitem><para>This specifies a NetBIOS scope that smbclient will
use to communicate with when generating NetBIOS names. For details
- on the use of NetBIOS scopes, see <filename>rfc1001.txt</filename> and <filename>rfc1002.txt</filename>.
+ on the use of NetBIOS scopes, see rfc1001.txt and rfc1002.txt.
NetBIOS scopes are <emphasis>very</emphasis> rarely used, only set
this parameter if you are the system administrator in charge of all
the NetBIOS systems you communicate with. </para></listitem>
@@ -247,7 +247,7 @@
<varlistentry>
<term>-d debuglevel</term>
- <listitem><para><replaceable>debuglevel</replaceable> is an integer from 0 to 10, or
+ <listitem><para>debuglevel is an integer from 0 to 10, or
the letter 'A'. </para>
<para>The default value if this parameter is not specified
@@ -264,13 +264,13 @@
data, and should only be used when investigating a problem.
Levels above 3 are designed for use only by developers and
generate HUGE amounts of log data, most of which is extremely
- cryptic. If <replaceable>debuglevel</replaceable> is set to the letter 'A', then <emphasis>all
+ cryptic. If debuglevel is set to the letter 'A', then <emphasis>all
</emphasis> debug messages will be printed. This setting
is for developers only (and people who <emphasis>really</emphasis> want
to know how the code works internally). </para>
<para>Note that specifying this parameter here will override
- the log level parameter in the <filename>smb.conf (5)</filename>
+ the log level parameter in the <command>smb.conf (5)</command>
file. </para></listitem>
</varlistentry>
@@ -286,7 +286,7 @@
<varlistentry>
<term>-l logfilename</term>
- <listitem><para>If specified, <replaceable>logfilename</replaceable> specifies a base filename
+ <listitem><para>If specified, logfilename specifies a base filename
into which operational data from the running client will be
logged. </para>
@@ -311,7 +311,7 @@
<varlistentry>
<term>-I IP-address</term>
- <listitem><para><replaceable>IP address</replaceable> is the address of the server to connect to.
+ <listitem><para>IP address is the address of the server to connect to.
It should be specified in standard "a.b.c.d" notation. </para>
<para>Normally the client would attempt to locate a named
@@ -344,28 +344,28 @@
<term>-U username[%pass]</term>
<listitem><para>Sets the SMB username or username and password.
If %pass is not specified, The user will be prompted. The client
- will first check the <envar>USER</envar> environment variable, then the
- <envar>LOGNAME</envar> variable and if either exists, the
+ will first check the USER environment variable, then the
+ <parameter>$LOGNAME</parameter> variable and if either exist, the
string is uppercased. Anything in these variables following a '%'
- sign will be treated as the password. If these environment
+ sign will be treated as the password. If these environmental
variables are not found, the username <constant>GUEST</constant>
is used. </para>
- <para>If the password is not included in these environment
- variables (using the %pass syntax), <command>rpcclient</command> will look for
- a <envar>PASSWD</envar> environment variable from which
+ <para>If the password is not included in these environment
+ variables (using the %pass syntax), rpcclient will look for
+ a <parameter>$PASSWD</parameter> environment variable from which
to read the password. </para>
<para>A third option is to use a credentials file which
contains the plaintext of the username and password. This
option is mainly provided for scripts where the admin doesn't
- wish to pass the credentials on the command line or via environment
+ desire to pass the credentials on the command line or via environment
variables. If this method is used, make certain that the permissions
on the file restrict access from unwanted users. See the
<parameter>-A</parameter> for more details. </para>
<para>Be cautious about including passwords in scripts or in
- the <envar>PASSWD</envar> environment variable. Also, on
+ the <parameter>$PASSWD</parameter> environment variable. Also, on
many systems the command line of a running process may be seen
via the <command>ps</command> command to be safe always allow
<command>rpcclient</command> to prompt for a password and type
@@ -397,14 +397,14 @@ password = &lt;value&gt;
are available on a server. You use it as <command>smbclient -L
host</command> and a list should appear. The <parameter>-I
</parameter> option may be useful if your NetBIOS names don't
- match your TCP/IP DNS host names or if you are trying to reach a
+ match your tcp/ip dns host names or if you are trying to reach a
host on another network. </para></listitem>
</varlistentry>
<varlistentry>
<term>-t terminal code</term>
- <listitem><para>This option tells <command>smbclient</command> how to interpret
+ <listitem><para>This option tells smbclient how to interpret
filenames coming from the remote server. Usually Asian language
multibyte UNIX implementations use different character sets than
SMB/CIFS servers (<emphasis>EUC</emphasis> instead of <emphasis>
@@ -488,7 +488,7 @@ password = &lt;value&gt;
</para></listitem>
<listitem><para><parameter>r</parameter> - Regular expression include
- or exclude. Uses regular expression matching for
+ or exclude. Uses regular regular expression matching for
excluding or excluding files if compiled with HAVE_REGEX_H.
However this mode can be very slow. If not compiled with
HAVE_REGEX_H, does a limited wildcard match on '*' and '?'.
@@ -511,7 +511,7 @@ password = &lt;value&gt;
<para><command>smbclient</command>'s tar option now supports long
file names both on backup and restore. However, the full path
name of the file must be less than 1024 bytes. Also, when
- a tar archive is created, <command>smbclient</command>'s tar option places all
+ a tar archive is created, smbclient's tar option places all
files in the archive with relative names, not absolute names.
</para>
@@ -523,10 +523,10 @@ password = &lt;value&gt;
<para><emphasis>Examples</emphasis></para>
- <para>Restore from tar file <filename>backup.tar</filename> into myshare on mypc
+ <para>Restore from tar file backup.tar into myshare on mypc
(no password on share). </para>
- <para><command>smbclient //mypc/yshare "" -N -Tx backup.tar
+ <para><command>smbclient //mypc/myshare "" -N -Tx backup.tar
</command></para>
<para>Restore everything except <filename>users/docs</filename>
@@ -566,7 +566,7 @@ password = &lt;value&gt;
<varlistentry>
<term>-c command string</term>
- <listitem><para>command string is a semicolon-separated list of
+ <listitem><para>command string is a semicolon separated list of
commands to be executed instead of prompting from stdin. <parameter>
-N</parameter> is implied by <parameter>-c</parameter>.</para>
@@ -616,7 +616,7 @@ password = &lt;value&gt;
<variablelist>
<varlistentry>
<term>? [command]</term>
- <listitem><para>If <replaceable>command</replaceable> is specified, the ? command will display
+ <listitem><para>If "command" is specified, the ? command will display
a brief informative message about the specified command. If no
command is specified, a list of available commands will
be displayed. </para></listitem>
@@ -625,7 +625,7 @@ password = &lt;value&gt;
<varlistentry>
<term>! [shell command]</term>
- <listitem><para>If <replaceable>shell command</replaceable> is specified, the !
+ <listitem><para>If "shell command" is specified, the !
command will execute a shell locally and run the specified shell
command. If no command is specified, a local shell will be run.
</para></listitem>
@@ -648,14 +648,14 @@ password = &lt;value&gt;
<varlistentry>
<term>del &lt;mask&gt;</term>
<listitem><para>The client will request that the server attempt
- to delete all files matching <replaceable>mask</replaceable> from the current working
+ to delete all files matching "mask" from the current working
directory on the server. </para></listitem>
</varlistentry>
<varlistentry>
<term>dir &lt;mask&gt;</term>
- <listitem><para>A list of the files matching <replaceable>mask</replaceable> in the current
+ <listitem><para>A list of the files matching "mask" in the current
working directory on the server will be retrieved from the server
and displayed. </para></listitem>
</varlistentry>
@@ -670,9 +670,9 @@ password = &lt;value&gt;
<varlistentry>
<term>get &lt;remote file name&gt; [local file name]</term>
- <listitem><para>Copy the file called <filename>remote file name</filename> from
+ <listitem><para>Copy the file called "remote file name" from
the server to the machine running the client. If specified, name
- the local copy <filename>local file name</filename>. Note that all transfers in
+ the local copy "local file name". Note that all transfers in
<command>smbclient</command> are binary. See also the
lowercase command. </para></listitem>
</varlistentry>
@@ -687,7 +687,7 @@ password = &lt;value&gt;
<varlistentry>
<term>lcd [directory name]</term>
- <listitem><para>If <replaceable>directory name</replaceable> is specified, the current
+ <listitem><para>If "directory name" is specified, the current
working directory on the local machine will be changed to
the directory specified. This operation will fail if for any
reason the specified directory is inaccessible. </para>
@@ -751,13 +751,13 @@ password = &lt;value&gt;
<varlistentry>
<term>mget &lt;mask&gt;</term>
- <listitem><para>Copy all files matching <replaceable>mask</replaceable> from the server to
+ <listitem><para>Copy all files matching mask from the server to
the machine running the client. </para>
- <para>Note that <replaceable>mask</replaceable> is interpreted differently during recursive
+ <para>Note that mask is interpreted differently during recursive
operation and non-recursive operation - refer to the recurse and
mask commands for more information. Note that all transfers in
- <command>smbclient</command> are binary. See also the lowercase command. </para></listitem>
+ smbclient are binary. See also the lowercase command. </para></listitem>
</varlistentry>
@@ -770,13 +770,13 @@ password = &lt;value&gt;
<varlistentry>
<term>mput &lt;mask&gt;</term>
- <listitem><para>Copy all files matching <replaceable>mask</replaceable> in the current working
+ <listitem><para>Copy all files matching mask in the current working
directory on the local machine to the current working directory on
the server. </para>
- <para>Note that <replaceable>mask</replaceable> is interpreted differently during recursive
+ <para>Note that mask is interpreted differently during recursive
operation and non-recursive operation - refer to the recurse and mask
- commands for more information. Note that all transfers in <command>smbclient</command>
+ commands for more information. Note that all transfers in smbclient
are binary. </para></listitem>
</varlistentry>
@@ -813,10 +813,10 @@ password = &lt;value&gt;
<varlistentry>
<term>put &lt;local file name&gt; [remote file name]</term>
- <listitem><para>Copy the file called <filename>local file name</filename> from the
+ <listitem><para>Copy the file called "local file name" from the
machine running the client to the server. If specified,
- name the remote copy <filename>remote file name</filename>. Note that all transfers
- in <command>smbclient</command> are binary. See also the lowercase command.
+ name the remote copy "remote file name". Note that all transfers
+ in smbclient are binary. See also the lowercase command.
</para></listitem>
</varlistentry>
@@ -863,7 +863,7 @@ password = &lt;value&gt;
<varlistentry>
<term>rm &lt;mask&gt;</term>
- <listitem><para>Remove all files matching <replaceable>mask</replaceable> from the current
+ <listitem><para>Remove all files matching mask from the current
working directory on the server. </para></listitem>
</varlistentry>
@@ -890,7 +890,7 @@ password = &lt;value&gt;
<term>blocksize &lt;blocksize&gt;</term>
<listitem><para>Blocksize. Must be followed by a valid (greater
than zero) blocksize. Causes tar file to be written out in
- <replaceable>blocksize</replaceable>*TBLOCK (usually 512 byte) blocks. </para></listitem>
+ blocksize*TBLOCK (usually 512 byte) blocks. </para></listitem>
</varlistentry>
@@ -938,13 +938,13 @@ password = &lt;value&gt;
<refsect1>
<title>ENVIRONMENT VARIABLES</title>
- <para>The variable <envar>USER</envar> may contain the
+ <para>The variable <parameter>$USER</parameter> may contain the
username of the person using the client. This information is
used only if the protocol level is high enough to support
session-level passwords.</para>
- <para>The variable <envar>PASSWD</envar> may contain
+ <para>The variable <parameter>$PASSWD</parameter> may contain
the password of the person using the client. This information is
used only if the protocol level is high enough to support
session-level passwords. </para>
@@ -970,7 +970,7 @@ password = &lt;value&gt;
<para>To test the client, you will need to know the name of a
running SMB/CIFS server. It is possible to run <command>smbd(8)
- </command> as an ordinary user - running that server as a daemon
+ </command> an ordinary user - running that server as a daemon
on a user-accessible port (typically any port number over 1024)
would provide a suitable test server. </para>
</refsect1>
diff --git a/docs/docbook/manpages/smbcontrol.1.sgml b/docs/docbook/manpages/smbcontrol.1.sgml
index 8e529d8b712..44418ea85fe 100644
--- a/docs/docbook/manpages/smbcontrol.1.sgml
+++ b/docs/docbook/manpages/smbcontrol.1.sgml
@@ -1,5 +1,5 @@
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
-<refentry id="smbcontrol">
+<refentry id="findsmb">
<refmeta>
<refentrytitle>smbcontrol</refentrytitle>
diff --git a/docs/docbook/manpages/smbd.8.sgml b/docs/docbook/manpages/smbd.8.sgml
index da32b6a4e78..2d01fd7d496 100644
--- a/docs/docbook/manpages/smbd.8.sgml
+++ b/docs/docbook/manpages/smbd.8.sgml
@@ -67,7 +67,7 @@
can force a reload by sending a SIGHUP to the server. Reloading
the configuration file will not affect connections to any service
that is already established. Either the user will have to
- disconnect from the service, or <command>smbd</command> killed and restarted.</para>
+ disconnect from the service, or smbd killed and restarted.</para>
</refsect1>
<refsect1>
@@ -80,9 +80,9 @@
the server to operate as a daemon. That is, it detaches
itself and runs in the background, fielding requests
on the appropriate port. Operating the server as a
- daemon is the recommended way of running <command>smbd</command> for
+ daemon is the recommended way of running smbd for
servers that provide more than casual use file and
- print services. This switch is assumed if <command>smbd
+ print services. This switch is assumed is <command>smbd
</command> is executed on the command line of a shell.
</para></listitem>
</varlistentry>
@@ -104,7 +104,7 @@
<varlistentry>
<term>-P</term>
- <listitem><para>Passive option. Causes <command>smbd</command> not to
+ <listitem><para>Passive option. Causes smbd not to
send any network traffic out. Used for debugging by
the developers only.</para></listitem>
</varlistentry>
@@ -123,7 +123,7 @@
<varlistentry>
<term>-d &lt;debug level&gt;</term>
- <listitem><para><replaceable>debuglevel</replaceable> is an integer
+ <listitem><para>debuglevel is an integer
from 0 to 10. The default value if this parameter is
not specified is zero.</para>
@@ -149,7 +149,7 @@
<varlistentry>
<term>-l &lt;log file&gt;</term>
- <listitem><para>If specified, <replaceable>log file</replaceable>
+ <listitem><para>If specified, <emphasis>log file</emphasis>
specifies a log filename into which informational and debug
messages from the running server will be logged. The log
file generated is never removed by the server although
@@ -170,7 +170,7 @@
<varlistentry>
<term>-p &lt;port number&gt;</term>
- <listitem><para><replaceable>port number</replaceable> is a positive integer
+ <listitem><para>port number is a positive integer
value. The default value if this parameter is not
specified is 139.</para>
@@ -273,10 +273,10 @@
<variablelist>
<varlistentry>
- <term><envar>PRINTER</envar></term>
+ <term>PRINTER</term>
<listitem><para>If no printer name is specified to
printable services, most systems will use the value of
- this variable (or <constant>lp</constant> if this variable is
+ this variable (or lp if this variable is
not defined) as the name of the printer to use. This
is not specific to the server, however.</para></listitem>
</varlistentry>
@@ -296,10 +296,10 @@
program itself should be executable by all, as users may wish to
run the server themselves (in which case it will of course run
with their privileges). The server should NOT be setuid. On some
- systems it may be worthwhile to make <command>smbd</command> setgid to an empty group.
+ systems it may be worthwhile to make smbd setgid to an empty group.
This is because some systems may have a security hole where daemon
processes that become a user can be attached to with a debugger.
- Making the <command>smbd</command> file setgid to an empty group may prevent
+ Making the smbd file setgid to an empty group may prevent
this hole from being exploited. This security hole and the suggested
fix has only been confirmed on old versions (pre-kernel 2.0) of Linux
at the time this was written. It is possible that this hole only
@@ -395,7 +395,7 @@
<title>RUNNING THE SERVER ON REQUEST</title>
<para>If your system uses a meta-daemon such as <command>inetd
- </command>, you can arrange to have the <command>smbd</command> server started
+ </command>, you can arrange to have the smbd server started
whenever a process attempts to connect to it. This requires several
changes to the startup files on the host machine. If you are
experimenting as an ordinary user rather than as root, you will
@@ -471,8 +471,8 @@
<command>inetd</command> will reread their configuration
tables if they receive a HUP signal.</para>
- <para>If your machine's name is <replaceable>fred</replaceable> and your
- name is <replaceable>mary</replaceable>, you should now be able to connect
+ <para>If your machine's name is fred and your
+ name is mary, you should now be able to connect
to the service <filename>\\fred\mary</filename>.
</para>
@@ -513,26 +513,26 @@
<refsect1>
<title>SIGNALS</title>
- <para>Sending the <command>smbd</command> a SIGHUP will cause it to
- reload its <filename>smb.conf</filename> configuration
+ <para>Sending the smbd a SIGHUP will cause it to
+ re-load its <filename>smb.conf</filename> configuration
file within a short period of time.</para>
- <para>To shut down a user's <command>smbd</command> process it is recommended
+ <para>To shut down a users smbd process it is recommended
that <command>SIGKILL (-9)</command> <emphasis>NOT</emphasis>
be used, except as a last resort, as this may leave the shared
memory area in an inconsistent state. The safe way to terminate
- an <command>smbd</command> is to send it a SIGTERM (-15) signal and wait for
+ an smbd is to send it a SIGTERM (-15) signal and wait for
it to die on its own.</para>
- <para>The debug log level of <command>smbd</command> may be raised by sending
+ <para>The debug log level of smbd may be raised by sending
it a SIGUSR1 (<command>kill -USR1 &lt;smbd-pid&gt;</command>)
and lowered by sending it a SIGUSR2 (<command>kill -USR2 &lt;smbd-pid&gt;
</command>). This is to allow transient problems to be diagnosed,
whilst still running at a normally low log level.</para>
<para>Note that as the signal handlers send a debug write,
- they are not re-entrant in <command>smbd</command>. This you should wait until
- <command>smbd</command> is in a state of waiting for an incoming SMB before
+ they are not re-entrant in smbd. This you should wait until
+ smbd is in a state of waiting for an incoming smb before
issuing them. It is possible to make the signal handlers safe
by un-blocking the signals before the select call and re-blocking
them after, however this would affect performance.</para>
diff --git a/docs/docbook/manpages/smbmnt.8.sgml b/docs/docbook/manpages/smbmnt.8.sgml
index 859f8f441c2..9527a191440 100644
--- a/docs/docbook/manpages/smbmnt.8.sgml
+++ b/docs/docbook/manpages/smbmnt.8.sgml
@@ -32,7 +32,7 @@
<para><command>smbmnt</command> is a helper application used
by the smbmount program to do the actual mounting of SMB shares.
<command>smbmnt</command> is meant to be installed setuid root
- so that normal users can mount their SMB shares. It checks
+ so that normal users can mount their smb shares. It checks
whether the user has write permissions on the mount point and
then mounts the directory.</para>
@@ -79,7 +79,7 @@
<term>-o options</term>
<listitem><para>
list of options that are passed as-is to smbfs, if this
- command is run on a 2.4 or higher Linux kernel.
+ command is run on a 2.4 or higher linux kernel.
</para></listitem>
</varlistentry>
diff --git a/docs/docbook/manpages/smbmount.8.sgml b/docs/docbook/manpages/smbmount.8.sgml
index 462512185d7..391d7d68820 100644
--- a/docs/docbook/manpages/smbmount.8.sgml
+++ b/docs/docbook/manpages/smbmount.8.sgml
@@ -29,17 +29,17 @@
the <command>mount(8)</command> command when using the
"-t smb" option. The kernel must support the smbfs filesystem. </para>
- <para>Options to <command>smbmount</command> are specified as a comma-separated
+ <para>Options to smbmount are specified as a comma separated
list of key=value pairs. It is possible to send options other
than those listed here, assuming that smbfs supports them. If
you get mount failures, check your kernel log for errors on
unknown options.</para>
- <para><command>smbmount</command> is a daemon. After mounting it keeps running until
+ <para>smbmount is a daemon. After mounting it keeps running until
the mounted smbfs is umounted. It will log things that happen
when in daemon mode using the "machine name" smbmount, so
- typically this output will end up in <filename>log.smbmount</filename>. The
- <command>smbmount</command> process may also be called mount.smbfs.</para>
+ typically this output will end up in log.smbmount. The
+ smbmount process may also be called mount.smbfs.</para>
<para><emphasis>NOTE:</emphasis> <command>smbmount</command>
calls <command>smbmnt(8)</command> to do the actual mount. You
@@ -69,16 +69,7 @@
<envar>PASSWD</envar> is used. If it can find
no password <command>smbmount</command> will prompt
for a passeword, unless the guest option is
- given. </para>
-
- <para>
- Note that password which contain the arguement delimiter
- character (i.e. a comma ',') will failed to be parsed correctly
- on the command line. However, the same password defined
- in the PASSWD environment variable or a credentials file (see
- below) will be read correctly.
- </para>
- </listitem>
+ given. </para></listitem>
</varlistentry>
<varlistentry>
@@ -94,7 +85,7 @@
</para>
<para>This is preferred over having passwords in plaintext in a
- shared file, such as <filename>/etc/fstab</filename>. Be sure to protect any
+ shared file, such as /etc/fstab. Be sure to protect any
credentials file properly.
</para></listitem>
</varlistentry>
@@ -140,7 +131,7 @@
<varlistentry>
<term>dmask=&lt;arg&gt;</term>
- <listitem><para>sets the directory mask. This determines the
+ <listitem><para>sets the directory mask. This deterines the
permissions that remote directories have in the local filesystem.
The default is based on the current umask. </para></listitem>
</varlistentry>
@@ -200,7 +191,7 @@
<varlistentry>
<term>iocharset=&lt;arg&gt;</term>
<listitem><para>
- sets the charset used by the Linux side for codepage
+ sets the charset used by the linux side for codepage
to charset translations (NLS). Argument should be the
name of a charset, like iso8859-1. (Note: only kernel
2.4.0 or later)
@@ -252,7 +243,7 @@
<para>The variable <envar>PASSWD_FILE</envar> may contain the pathname of
a file to read the password from. A single line of input is
- read and used as the password.</para>
+ read and used as password.</para>
</refsect1>
@@ -272,7 +263,7 @@
</itemizedlist>
- <para>Note that the typical response to a bug report is suggestion
+ <para>Note that the typical response to a bugreport is suggestion
to try the latest version first. So please try doing that first,
and always include which versions you use of relevant software
when reporting bugs (minimum: samba, kernel, distribution)</para>
diff --git a/docs/docbook/manpages/smbpasswd.5.sgml b/docs/docbook/manpages/smbpasswd.5.sgml
index be751078192..0e8a704c503 100644
--- a/docs/docbook/manpages/smbpasswd.5.sgml
+++ b/docs/docbook/manpages/smbpasswd.5.sgml
@@ -59,9 +59,9 @@
<varlistentry>
<term>Lanman Password Hash</term>
- <listitem><para>This is the LANMAN hash of the user's password,
+ <listitem><para>This is the LANMAN hash of the users password,
encoded as 32 hex digits. The LANMAN hash is created by DES
- encrypting a well known string with the user's password as the
+ encrypting a well known string with the users password as the
DES key. This is the same password used by Windows 95/98 machines.
Note that this password hash is regarded as weak as it is
vulnerable to dictionary attacks and if two users choose the
@@ -69,7 +69,7 @@
is not "salted" as the UNIX password is). If the user has a
null password this field will contain the characters "NO PASSWORD"
as the start of the hex string. If the hex string is equal to
- 32 'X' characters then the user's account is marked as
+ 32 'X' characters then the users account is marked as
<constant>disabled</constant> and the user will not be able to
log onto the Samba server. </para>
@@ -89,14 +89,14 @@
<varlistentry>
<term>NT Password Hash</term>
- <listitem><para>This is the Windows NT hash of the user's
+ <listitem><para>This is the Windows NT hash of the users
password, encoded as 32 hex digits. The Windows NT hash is
- created by taking the user's password as represented in
+ created by taking the users password as represented in
16-bit, little-endian UNICODE and then applying the MD4
(internet rfc1321) hashing algorithm to it. </para>
<para>This password hash is considered more secure than
- the LANMAN Password Hash as it preserves the case of the
+ the Lanman Password Hash as it preserves the case of the
password and uses a much higher quality hashing algorithm.
However, it is still the case that if two users choose the same
password this entry will be identical (i.e. the password is
@@ -132,7 +132,7 @@
in the smbpasswd file. </para></listitem>
<listitem><para><emphasis>N</emphasis> - This means the
- account has no password (the passwords in the fields LANMAN
+ account has no password (the passwords in the fields Lanman
Password Hash and NT Password Hash are ignored). Note that this
will only allow users to log on with no password if the <parameter>
null passwords</parameter> parameter is set in the <ulink
diff --git a/docs/docbook/manpages/smbpasswd.8.sgml b/docs/docbook/manpages/smbpasswd.8.sgml
index c07b329c5e1..8233234d352 100644
--- a/docs/docbook/manpages/smbpasswd.8.sgml
+++ b/docs/docbook/manpages/smbpasswd.8.sgml
@@ -9,7 +9,7 @@
<refnamediv>
<refname>smbpasswd</refname>
- <refpurpose>change a user's SMB password</refpurpose>
+ <refpurpose>change a users SMB password</refpurpose>
</refnamediv>
<refsynopsisdiv>
@@ -45,7 +45,7 @@
SMB passwords. </para>
<para>By default (when run with no arguments) it will attempt to
- change the current user's SMB password on the local machine. This is
+ change the current users SMB password on the local machine. This is
similar to the way the <command>passwd(1)</command> program works.
<command>smbpasswd</command> differs from how the passwd program works
however in that it is not <emphasis>setuid root</emphasis> but works in
@@ -56,10 +56,10 @@
the <filename>smbpasswd(5)</filename> file. </para>
<para>When run by an ordinary user with no options. smbpasswd
- will prompt them for their old SMB password and then ask them
+ will prompt them for their old smb password and then ask them
for their new password twice, to ensure that the new password
was typed correctly. No passwords will be echoed on the screen
- whilst being typed. If you have a blank SMB password (specified by
+ whilst being typed. If you have a blank smb password (specified by
the string "NO PASSWORD" in the smbpasswd file) then just press
the &lt;Enter&gt; key when asked for your old password. </para>
@@ -117,7 +117,7 @@
will fail. </para>
<para>If the smbpasswd file is in the 'old' format (pre-Samba 2.0
- format) there is no space in the user's password entry to write
+ format) there is no space in the users password entry to write
this information and so the user is disabled by writing 'X' characters
into the password space in the smbpasswd file. See <command>smbpasswd(5)
</command> for details on the 'old' and new password file formats.
@@ -151,7 +151,7 @@
<varlistentry>
<term>-D debuglevel</term>
- <listitem><para><replaceable>debuglevel</replaceable> is an integer
+ <listitem><para><parameter>debuglevel</parameter> is an integer
from 0 to 10. The default value if this parameter is not specified
is zero. </para>
@@ -335,7 +335,7 @@
<varlistentry>
<term>-s</term>
<listitem><para>This option causes smbpasswd to be silent (i.e.
- not issue prompts) and to read its old and new passwords from
+ not issue prompts) and to read it's old and new passwords from
standard input, rather than from <filename>/dev/tty</filename>
(like the <command>passwd(1)</command> program does). This option
is to aid people writing scripts to drive smbpasswd</para>
diff --git a/docs/docbook/manpages/smbsh.1.sgml b/docs/docbook/manpages/smbsh.1.sgml
index 7bec3c2cb2e..3a95f116d92 100644
--- a/docs/docbook/manpages/smbsh.1.sgml
+++ b/docs/docbook/manpages/smbsh.1.sgml
@@ -28,7 +28,7 @@
<para><command>smbsh</command> allows you to access an NT filesystem
using UNIX commands such as <command>ls</command>, <command>
egrep</command>, and <command>rcp</command>. You must use a
- shell that is dynamically linked in order for <command>smbsh</command>
+ shell that is dynmanically linked in order for <command>smbsh</command>
to work correctly.</para>
<para>To use the <command>smbsh</command> command, execute <command>
diff --git a/docs/docbook/manpages/smbspool.8.sgml b/docs/docbook/manpages/smbspool.8.sgml
index d5c9c0a1148..b847aadd059 100644
--- a/docs/docbook/manpages/smbspool.8.sgml
+++ b/docs/docbook/manpages/smbspool.8.sgml
@@ -1,5 +1,5 @@
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
-<refentry id="smbspool">
+<refentry id="findsmb">
<refmeta>
<refentrytitle>smbspool</refentrytitle>
@@ -8,7 +8,7 @@
<refnamediv>
- <refname>smbspool</refname>
+ <refname>nmblookup</refname>
<refpurpose>send print file to an SMB printer</refpurpose>
</refnamediv>
@@ -52,12 +52,12 @@
</itemizedlist>
<para>smbspool tries to get the URI from argv[0]. If argv[0]
- contains the name of the program then it looks in the <envar>
- DEVICE_URI</envar> environment variable.</para>
+ contains the name of the program then it looks in the <parameter>
+ DEVICE_URI</parameter> environment variable.</para>
<para>Programs using the <command>exec(2)</command> functions can
pass the URI in argv[0], while shell scripts must set the
- <envar>DEVICE_URI</envar> environment variable prior to
+ <parameter>DEVICE_URI</parameter> environment variable prior to
running smbspool.</para>
</refsect1>
diff --git a/docs/docbook/manpages/smbstatus.1.sgml b/docs/docbook/manpages/smbstatus.1.sgml
index c2f638b88ef..6f2361d0215 100644
--- a/docs/docbook/manpages/smbstatus.1.sgml
+++ b/docs/docbook/manpages/smbstatus.1.sgml
@@ -1,5 +1,5 @@
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
-<refentry id="smbstatus">
+<refentry id="findsmb">
<refmeta>
<refentrytitle>smbstatus</refentrytitle>
diff --git a/docs/docbook/manpages/smbumount.8.sgml b/docs/docbook/manpages/smbumount.8.sgml
index d6a1b65b578..15e20a2e709 100644
--- a/docs/docbook/manpages/smbumount.8.sgml
+++ b/docs/docbook/manpages/smbumount.8.sgml
@@ -24,7 +24,7 @@
<para>With this program, normal users can unmount smb-filesystems,
provided that it is suid root. <command>smbumount</command> has
- been written to give normal Linux users more control over their
+ been written to give normal linux-users more control over their
resources. It is safe to install this program suid root, because only
the user who has mounted a filesystem is allowed to unmount it again.
For root it is not necessary to use smbumount. The normal umount
diff --git a/docs/docbook/manpages/swat.8.sgml b/docs/docbook/manpages/swat.8.sgml
index dc6989d5663..aeff886de81 100644
--- a/docs/docbook/manpages/swat.8.sgml
+++ b/docs/docbook/manpages/swat.8.sgml
@@ -14,7 +14,7 @@
<refsynopsisdiv>
<cmdsynopsis>
- <command>swat</command>
+ <command>nmblookup</command>
<arg choice="opt">-s &lt;smb config file&gt;</arg>
<arg choice="opt">-a</arg>
</cmdsynopsis>
@@ -31,10 +31,10 @@
configure the complex <ulink url="smb.conf.5.html"><filename>
smb.conf(5)</filename></ulink> file via a Web browser. In addition,
a <command>swat</command> configuration page has help links
- to all the configurable options in the <filename>smb.conf</filename> file allowing an
+ to all the configurable options in the smb.conf file allowing an
administrator to easily look up the effects of any change. </para>
- <para><command>swat</command> is run from <command>inetd</command> </para>
+ <para>swat is run from inetd </para>
</refsect1>
@@ -47,7 +47,7 @@
<listitem><para>The default configuration file path is
determined at compile time. The file specified contains
the configuration details required by the <command>smbd
- </command> server. This is the file that <command>swat</command> will modify.
+ </command> server. This is the file that swat will modify.
The information in this file includes server-specific
information such as what printcap file to use, as well as
descriptions of all the services that the server is to provide.
@@ -59,8 +59,8 @@
<varlistentry>
<term>-a</term>
<listitem><para>This option disables authentication and puts
- <command>swat</command> in demo mode. In that mode anyone will be able to modify
- the <filename>smb.conf</filename> file. </para>
+ swat in demo mode. In that mode anyone will be able to modify
+ the smb.conf file. </para>
<para><emphasis>Do NOT enable this option on a production
server. </emphasis></para></listitem>
@@ -89,7 +89,7 @@
<para>You need to edit your <filename>/etc/inetd.conf
</filename> and <filename>/etc/services</filename>
- to enable SWAT to be launched via <command>inetd</command>.</para>
+ to enable SWAT to be launched via inetd.</para>
<para>In <filename>/etc/services</filename> you need to
add a line like this: </para>
@@ -123,10 +123,10 @@
<refsect2>
<title>Launching</title>
- <para>To launch SWAT just run your favorite web browser and
+ <para>To launch swat just run your favorite web browser and
point it at "http://localhost:901/".</para>
- <para>Note that you can attach to SWAT from any IP connected
+ <para>Note that you can attach to swat from any IP connected
machine but connecting from a remote machine leaves your
connection open to password sniffing as passwords will be sent
in the clear over the wire. </para>
diff --git a/docs/docbook/manpages/testparm.1.sgml b/docs/docbook/manpages/testparm.1.sgml
index 320e39e6f58..da90dc6e6c6 100644
--- a/docs/docbook/manpages/testparm.1.sgml
+++ b/docs/docbook/manpages/testparm.1.sgml
@@ -72,7 +72,7 @@
<varlistentry>
<term>-L servername</term>
- <listitem><para>Sets the value of the %L macro to <replaceable>servername</replaceable>.
+ <listitem><para>Sets the value of the %L macro to servername.
This is useful for testing include files specified with the
%L macro. </para></listitem>
</varlistentry>
@@ -90,7 +90,7 @@
<varlistentry>
<term>hostname</term>
<listitem><para>If this parameter and the following are
- specified, then <command>testparm</command> will examine the <parameter>hosts
+ specified, then testparm will examine the <parameter>hosts
allow</parameter> and <parameter>hosts deny</parameter>
parameters in the <filename>smb.conf</filename> file to
determine if the hostname with this IP address would be
@@ -126,7 +126,7 @@
<title>DIAGNOSTICS</title>
<para>The program will issue a message saying whether the
- configuration file loaded OK or not. This message may be preceded by
+ configuration file loaded OK or not. This message may be preceeded by
errors and warnings if the file did not load. If the file was
loaded OK, the program then dumps all known service details
to stdout. </para>
diff --git a/docs/docbook/manpages/wbinfo.1.sgml b/docs/docbook/manpages/wbinfo.1.sgml
index 7a1e738401d..3a2e6c31859 100644
--- a/docs/docbook/manpages/wbinfo.1.sgml
+++ b/docs/docbook/manpages/wbinfo.1.sgml
@@ -149,7 +149,7 @@
<para>The wbinfo program returns 0 if the operation
succeeded, or 1 if the operation failed. If the <command>winbindd(8)
- </command> daemon is not working <command>wbinfo</command> will always return
+ </command> daemon is not working wbinfo will always return
failure. </para>
</refsect1>
diff --git a/docs/docbook/manpages/winbindd.8.sgml b/docs/docbook/manpages/winbindd.8.sgml
index a215c3d1af2..5b53e504cdb 100644
--- a/docs/docbook/manpages/winbindd.8.sgml
+++ b/docs/docbook/manpages/winbindd.8.sgml
@@ -49,7 +49,7 @@
of user and group ids specified by the administrator of the
Samba system.</para>
- <para>The service provided by <command>winbindd</command> is called `winbind' and
+ <para>The service provided by winbindd is called `winbind' and
can be used to resolve user and group information from a
Windows NT server. The service can also provide authentication
services via an associated PAM module. </para>
@@ -154,7 +154,7 @@ group: files winbind
DOMAIN\username. In some cases this separator character may
cause problems as the '\' character has special meaning in
unix shells. In that case you can use the winbind separator
- option to specify an alternative separator character. Good
+ option to specify an alternative sepataror character. Good
alternatives may be '/' (although that conflicts
with the unix directory separator) or a '+ 'character.
The '+' character appears to be the best choice for 100%
@@ -171,7 +171,7 @@ group: files winbind
<term>winbind uid</term>
<listitem><para>The winbind uid parameter specifies the
range of user ids that are allocated by the winbindd daemon.
- This range of ids should have no existing local or NIS users
+ This range of ids should have no existing local or nis users
within it as strange conflicts can occur otherwise. </para>
<para>Default: <command>winbind uid = &lt;empty string&gt;
@@ -185,7 +185,7 @@ group: files winbind
<term>winbind gid</term>
<listitem><para>The winbind gid parameter specifies the
range of group ids that are allocated by the winbindd daemon.
- This range of group ids should have no existing local or NIS
+ This range of group ids should have no existing local or nis
groups within it as strange conflicts can occur otherwise.</para>
<para>Default: <command>winbind gid = &lt;empty string&gt;
@@ -201,7 +201,7 @@ group: files winbind
seconds the winbindd daemon will cache user and group information
before querying a Windows NT server again. When a item in the
cache is older than this time winbindd will ask the domain
- controller for the sequence number of the server's account database.
+ controller for the sequence number of the servers account database.
If the sequence number has not changed then the cached item is
marked as valid for a further <parameter>winbind cache time
</parameter> seconds. Otherwise the item is fetched from the
@@ -225,7 +225,7 @@ group: files winbind
return any data. </para>
<para><emphasis>Warning:</emphasis> Turning off user enumeration
- may cause some programs to behave oddly. For example, the <command>finger</command>
+ may cause some programs to behave oddly. For example, the finger
program relies on having access to the full user list when
searching for matching usernames. </para>
@@ -323,7 +323,7 @@ auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok
<para><command>samedit -S '*' -W DOMAIN -UAdministrator</command></para>
<para>The username after the <parameter>-U</parameter> can be any Domain
- user that has administrator privileges on the machine. Next from
+ user that has administrator priviliges on the machine. Next from
within <command>samedit</command>, run the command: </para>
<para><command>createuser MACHINE$ -j DOMAIN -L</command></para>
@@ -331,15 +331,11 @@ auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok
<para>This assumes your domain is called "DOMAIN" and your Samba
workstation is called "MACHINE". </para>
- <para>Next copy <filename>libnss_winbind.so</filename> to
+ <para>Next copy <filename>libnss_winbind.so.2</filename> to
<filename>/lib</filename> and <filename>pam_winbind.so</filename>
- to <filename>/lib/security</filename>. A symbolic link needs to be
- made from <filename>/lib/libnss_winbind.so</filename> to
- <filename>/lib/libnss_winbind.so.2</filename>. If you are using an
- older version of glibc then the target of the link should be
- <filename>/lib/libnss_winbind.so.1</filename>.</para>
+ to <filename>/lib/security</filename>.</para>
- <para>Finally, setup a <filename>smb.conf</filename> containing directives like the
+ <para>Finally, setup a smb.conf containing directives like the
following: </para>
<para><programlisting>
@@ -476,7 +472,7 @@ auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok
<para>This man page is correct for version 2.2 of
the Samba suite. winbindd is however not available in
- the stable release of Samba as of yet.</para>
+ stable release of Samba as of yet.</para>
</refsect1>
<refsect1>
diff --git a/docs/docbook/projdoc/CVS-Access.sgml b/docs/docbook/projdoc/CVS-Access.sgml
deleted file mode 100644
index 23bde92b56e..00000000000
--- a/docs/docbook/projdoc/CVS-Access.sgml
+++ /dev/null
@@ -1,157 +0,0 @@
-<chapter>
-
-
-<chapterinfo>
- <author>
- <affiliation>
- <orgname>Samba Team</orgname>
- </affiliation>
- </author>
-
-
- <pubdate> (22 May 2001) </pubdate>
-</chapterinfo>
-
-<title>HOWTO Access Samba source code via CVS</title>
-
-<sect1>
-<title>Introduction</title>
-
-<para>
-Samba is developed in an open environment. Developers use CVS
-(Concurrent Versioning System) to "checkin" (also known as
-"commit") new source code. Samba's various CVS branches can
-be accessed via anonymous CVS using the instructions
-detailed in this chapter.
-</para>
-
-<para>
-This document is a modified version of the instructions found at
-<ulink url="http://samba.org/samba/cvs.html">http://samba.org/samba/cvs.html</ulink>
-</para>
-
-</sect1>
-
-
-<sect1>
-<title>CVS Access to samba.org</title>
-
-<para>
-The machine samba.org runs a publicly accessible CVS
-repository for access to the source code of several packages,
-including samba, rsync and jitterbug. There are two main ways of
-accessing the CVS server on this host.
-</para>
-
-<sect2>
-<title>Access via CVSweb</title>
-
-<para>
-You can access the source code via your
-favourite WWW browser. This allows you to access the contents of
-individual files in the repository and also to look at the revision
-history and commit logs of individual files. You can also ask for a diff
-listing between any two versions on the repository.
-</para>
-
-<para>
-Use the URL : <ulink
-url="http://samba.org/cgi-bin/cvsweb">http://samba.org/cgi-bin/cvsweb</ulink>
-</para>
-</sect2>
-
-<sect2>
-<title>Access via cvs</title>
-
-<para>
-You can also access the source code via a
-normal cvs client. This gives you much more control over you can
-do with the repository and allows you to checkout whole source trees
-and keep them up to date via normal cvs commands. This is the
-preferred method of access if you are a developer and not
-just a casual browser.
-</para>
-
-<para>
-To download the latest cvs source code, point your
-browser at the URL : <ulink url="http://www.cyclic.com/">http://www.cyclic.com/</ulink>.
-and click on the 'How to get cvs' link. CVS is free software under
-the GNU GPL (as is Samba). Note that there are several graphical CVS clients
-which provide a graphical interface to the sometimes mundane CVS commands.
-Links to theses clients are also available from http://www.cyclic.com.
-</para>
-
-<para>
-To gain access via anonymous cvs use the following steps.
-For this example it is assumed that you want a copy of the
-samba source code. For the other source code repositories
-on this system just substitute the correct package name
-</para>
-
-<orderedlist>
-<listitem>
- <para>
- Install a recent copy of cvs. All you really need is a
- copy of the cvs client binary.
- </para>
-</listitem>
-
-
-<listitem>
- <para>
- Run the command
- </para>
-
- <para>
- <command>cvs -d :pserver:cvs@samba.org:/cvsroot login</command>
- </para>
-
- <para>
- When it asks you for a password type <userinput>cvs</userinput>.
- </para>
-</listitem>
-
-
-<listitem>
- <para>
- Run the command
- </para>
-
- <para>
- <command>cvs -d :pserver:cvs@samba.org:/cvsroot co samba</command>
- </para>
-
- <para>
- This will create a directory called samba containing the
- latest samba source code (i.e. the HEAD tagged cvs branch). This
- currently corresponds to the 3.0 development tree.
- </para>
-
- <para>
- CVS branches other HEAD can be obtained by using the <parameter>-r</parameter>
- and defining a tag name. A list of branch tag names can be found on the
- "Development" page of the samba web site. A common request is to obtain the
- latest 2.2 release code. This could be done by using the following command.
- </para>
-
- <para>
- <command>cvs -d :pserver:cvs@samba.org:/cvsroot co -r SAMBA_2_2 samba</command>
- </para>
-</listitem>
-
-<listitem>
- <para>
- Whenever you want to merge in the latest code changes use
- the following command from within the samba directory:
- </para>
-
- <para>
- <command>cvs update -d -P</command>
- </para>
-</listitem>
-</orderedlist>
-
-</sect2>
-</sect1>
-
-</chapter>
diff --git a/docs/docbook/projdoc/ENCRYPTION.sgml b/docs/docbook/projdoc/ENCRYPTION.sgml
index fbe7fbe3a18..8b624bad1a5 100644
--- a/docs/docbook/projdoc/ENCRYPTION.sgml
+++ b/docs/docbook/projdoc/ENCRYPTION.sgml
@@ -96,7 +96,7 @@
<para>The unix and SMB password encryption techniques seem similar
on the surface. This similarity is, however, only skin deep. The unix
- scheme typically sends clear text passwords over the network when
+ scheme typically sends clear text passwords over the nextwork when
logging in. This is bad. The SMB encryption scheme never sends the
cleartext password over the network but it does store the 16 byte
hashed values on disk. This is also bad. Why? Because the 16 byte hashed
@@ -141,7 +141,7 @@
Microsoft SMB/CIFS clients support authentication via the
SMB Challenge/Response mechanism described here. Enabling
clear text authentication does not disable the ability
- of the client to participate in encrypted authentication.</para>
+ of the client to particpate in encrypted authentication.</para>
</warning>
<sect2>
diff --git a/docs/docbook/projdoc/Integrating-with-Windows.sgml b/docs/docbook/projdoc/Integrating-with-Windows.sgml
deleted file mode 100644
index 547f7e1e701..00000000000
--- a/docs/docbook/projdoc/Integrating-with-Windows.sgml
+++ /dev/null
@@ -1,935 +0,0 @@
-<chapter>
-
-
-<chapterinfo>
- <author>
- <firstname>John</firstname><surname>Terpstra</surname>
- <affiliation>
- <orgname>Samba Team</orgname>
- <address>
- <email>jht@samba.org</email>
- </address>
- </affiliation>
- </author>
-
-
- <pubdate> (Jan 01 2001) </pubdate>
-</chapterinfo>
-
-<title>Integrating MS Windows networks with Samba</title>
-
-<sect1>
-<title>Agenda</title>
-
-<para>
-To identify the key functional mechanisms of MS Windows networking
-to enable the deployment of Samba as a means of extending and/or
-replacing MS Windows NT/2000 technology.
-</para>
-
-<para>
-We will examine:
-</para>
-
-<orderedlist>
- <listitem><para>Name resolution in a pure Unix/Linux TCP/IP
- environment
- </para></listitem>
-
- <listitem><para>Name resolution as used within MS Windows
- networking
- </para></listitem>
-
- <listitem><para>How browsing functions and how to deploy stable
- and dependable browsing using Samba
- </para></listitem>
-
- <listitem><para>MS Windows security options and how to
- configure Samba for seemless integration
- </para></listitem>
-
- <listitem><para>Configuration of Samba as:</para>
- <orderedlist>
- <listitem><para>A stand-alone server</para></listitem>
- <listitem><para>An MS Windows NT 3.x/4.0 security domain member
- </para></listitem>
- <listitem><para>An alternative to an MS Windows NT 3.x/4.0 Domain Controller
- </para></listitem>
- </orderedlist>
- </listitem>
-</orderedlist>
-
-</sect1>
-
-
-<sect1>
-<title>Name Resolution in a pure Unix/Linux world</title>
-
-<para>
-The key configuration files covered in this section are:
-</para>
-
-<itemizedlist>
- <listitem><para><filename>/etc/hosts</filename></para></listitem>
- <listitem><para><filename>/etc/resolv.conf</filename></para></listitem>
- <listitem><para><filename>/etc/host.conf</filename></para></listitem>
- <listitem><para><filename>/etc/nsswitch.conf</filename></para></listitem>
-</itemizedlist>
-
-<sect2>
-<title><filename>/etc/hosts</filename></title>
-
-<para>
-Contains a static list of IP Addresses and names.
-eg:
-</para>
-<para><programlisting>
- 127.0.0.1 localhost localhost.localdomain
- 192.168.1.1 bigbox.caldera.com bigbox alias4box
-</programlisting></para>
-
-<para>
-The purpose of <filename>/etc/hosts</filename> is to provide a
-name resolution mechanism so that uses do not need to remember
-IP addresses.
-</para>
-
-
-<para>
-Network packets that are sent over the physical network transport
-layer communicate not via IP addresses but rather using the Media
-Access Control address, or MAC address. IP Addresses are currently
-32 bits in length and are typically presented as four (4) decimal
-numbers that are separated by a dot (or period). eg: 168.192.1.1
-</para>
-
-<para>
-MAC Addresses use 48 bits (or 6 bytes) and are typically represented
-as two digit hexadecimal numbers separated by colons. eg:
-40:8e:0a:12:34:56
-</para>
-
-<para>
-Every network interfrace must have an MAC address. Associated with
-a MAC address there may be one or more IP addresses. There is NO
-relationship between an IP address and a MAC address, all such assignments
-are arbitary or discretionary in nature. At the most basic level all
-network communications takes place using MAC addressing. Since MAC
-addresses must be globally unique, and generally remains fixed for
-any particular interface, the assignment of an IP address makes sense
-from a network management perspective. More than one IP address can
-be assigned per MAC address. One address must be the primary IP address,
-this is the address that will be returned in the ARP reply.
-</para>
-
-<para>
-When a user or a process wants to communicate with another machine
-the protocol implementation ensures that the "machine name" or "host
-name" is resolved to an IP address in a manner that is controlled
-by the TCP/IP configuration control files. The file
-<filename>/etc/hosts</filename> is one such file.
-</para>
-
-<para>
-When the IP address of the destination interface has been
-determined a protocol called ARP/RARP isused to identify
-the MAC address of the target interface. ARP stands for Address
-Resolution Protocol, and is a broadcast oriented method that
-uses UDP (User Datagram Protocol) to send a request to all
-interfaces on the local network segment using the all 1's MAC
-address. Network interfaces are programmed to respond to two
-MAC addresses only; their own unique address and the address
-ff:ff:ff:ff:ff:ff. The reply packet from an ARP request will
-contain the MAC address and the primary IP address for each
-interface.
-</para>
-
-<para>
-The <filename>/etc/hosts</filename> file is foundational to all
-Unix/Linux TCP/IP installations and as a minumum will contain
-the localhost and local network interface IP addresses and the
-primary names by which they are known within the local machine.
-This file helps to prime the pump so that a basic level of name
-resolution can exist before any other method of name resolution
-becomes available.
-</para>
-
-</sect2>
-
-
-<sect2>
-<title><filename>/etc/resolv.conf</filename></title>
-
-<para>
-This file tells the name resolution libraries:
-</para>
-
-<itemizedlist>
- <listitem><para>The name of the domain to which the machine
- belongs
- </para></listitem>
-
- <listitem><para>The name(s) of any domains that should be
- automatically searched when trying to resolve unqualified
- host names to their IP address
- </para></listitem>
-
- <listitem><para>The name or IP address of available Domain
- Name Servers that may be asked to perform name to address
- translation lookups
- </para></listitem>
-</itemizedlist>
-
-</sect2>
-
-
-<sect2>
-<title><filename>/etc/host.conf</filename></title>
-
-
-<para>
-<filename>/etc/host.conf</filename> is the primary means by
-which the setting in /etc/resolv.conf may be affected. It is a
-critical configuration file. This file controls the order by
-which name resolution may procede. The typical structure is:
-</para>
-
-<para><programlisting>
- order hosts,bind
- multi on
-</programlisting></para>
-
-<para>
-then both addresses should be returned. Please refer to the
-man page for host.conf for further details.
-</para>
-
-
-</sect2>
-
-
-
-<sect2>
-<title><filename>/etc/nsswitch.conf</filename></title>
-
-<para>
-This file controls the actual name resolution targets. The
-file typically has resolver object specifications as follows:
-</para>
-
-
-<para><programlisting>
- # /etc/nsswitch.conf
- #
- # Name Service Switch configuration file.
- #
-
- passwd: compat
- # Alternative entries for password authentication are:
- # passwd: compat files nis ldap winbind
- shadow: compat
- group: compat
-
- hosts: files nis dns
- # Alternative entries for host name resolution are:
- # hosts: files dns nis nis+ hesoid db compat ldap wins
- networks: nis files dns
-
- ethers: nis files
- protocols: nis files
- rpc: nis files
- services: nis files
-</programlisting></para>
-
-<para>
-Of course, each of these mechanisms requires that the appropriate
-facilities and/or services are correctly configured.
-</para>
-
-<para>
-It should be noted that unless a network request/message must be
-sent, TCP/IP networks are silent. All TCP/IP communications assumes a
-principal of speaking only when necessary.
-</para>
-
-<para>
-Samba version 2.2.0 will add Linux support for extensions to
-the name service switch infrastructure so that linux clients will
-be able to obtain resolution of MS Windows NetBIOS names to IP
-Addresses. To gain this functionality Samba needs to be compiled
-with appropriate arguments to the make command (ie: <command>make
-nsswitch/libnss_wins.so</command>). The resulting library should
-then be installed in the <filename>/lib</filename> directory and
-the "wins" parameter needs to be added to the "hosts:" line in
-the <filename>/etc/nsswitch.conf</filename> file. At this point it
-will be possible to ping any MS Windows machine by it's NetBIOS
-machine name, so long as that machine is within the workgroup to
-which both the samba machine and the MS Windows machine belong.
-</para>
-
-</sect2>
-</sect1>
-
-
-<sect1>
-<title>Name resolution as used within MS Windows networking</title>
-
-<para>
-MS Windows networking is predicated about the name each machine
-is given. This name is known variously (and inconsistently) as
-the "computer name", "machine name", "networking name", "netbios name",
-"SMB name". All terms mean the same thing with the exception of
-"netbios name" which can apply also to the name of the workgroup or the
-domain name. The terms "workgroup" and "domain" are really just a
-simply name with which the machine is associated. All NetBIOS names
-are exactly 16 characters in length. The 16th character is reserved.
-It is used to store a one byte value that indicates service level
-information for the NetBIOS name that is registered. A NetBIOS machine
-name is therefore registered for each service type that is provided by
-the client/server.
-</para>
-
-<para>
-The following are typical NetBIOS name/service type registrations:
-</para>
-
-<para><programlisting>
- Unique NetBIOS Names:
- MACHINENAME<00> = Server Service is running on MACHINENAME
- MACHINENAME<03> = Generic Machine Name (NetBIOS name)
- MACHINENAME<20> = LanMan Server service is running on MACHINENAME
- WORKGROUP<1b> = Domain Master Browser
-
- Group Names:
- WORKGROUP<03> = Generic Name registered by all members of WORKGROUP
- WORKGROUP<1c> = Domain Controllers / Netlogon Servers
- WORKGROUP<1d> = Local Master Browsers
- WORKGROUP<1e> = Internet Name Resolvers
-</programlisting></para>
-
-<para>
-It should be noted that all NetBIOS machines register their own
-names as per the above. This is in vast contrast to TCP/IP
-installations where traditionally the system administrator will
-determine in the /etc/hosts or in the DNS database what names
-are associated with each IP address.
-</para>
-
-<para>
-One further point of clarification should be noted, the <filename>/etc/hosts</filename>
-file and the DNS records do not provide the NetBIOS name type information
-that MS Windows clients depend on to locate the type of service that may
-be needed. An example of this is what happens when an MS Windows client
-wants to locate a domain logon server. It find this service and the IP
-address of a server that provides it by performing a lookup (via a
-NetBIOS broadcast) for enumeration of all machines that have
-registered the name type *<1c>. A logon request is then sent to each
-IP address that is returned in the enumerated list of IP addresses. Which
-ever machine first replies then ends up providing the logon services.
-</para>
-
-<para>
-The name "workgroup" or "domain" really can be confusing since these
-have the added significance of indicating what is the security
-architecture of the MS Windows network. The term "workgroup" indicates
-that the primary nature of the network environment is that of a
-peer-to-peer design. In a WORKGROUP all machines are responsible for
-their own security, and generally such security is limited to use of
-just a password (known as SHARE MORE security). In most situations
-with peer-to-peer networking the users who control their own machines
-will simply opt to have no security at all. It is possible to have
-USER MODE security in a WORKGROUP environment, thus requiring use
-of a user name and a matching password.
-</para>
-
-<para>
-MS Windows networking is thus predetermined to use machine names
-for all local and remote machine message passing. The protocol used is
-called Server Message Block (SMB) and this is implemented using
-the NetBIOS protocol (Network Basic Input Output System). NetBIOS can
-be encapsulated using LLC (Logical Link Control) protocol - in which case
-the resulting protocol is called NetBEUI (Network Basic Extended User
-Interface). NetBIOS can also be run over IPX (Internetworking Packet
-Exchange) protocol as used by Novell NetWare, and it can be run
-over TCP/IP protocols - in which case the resulting protocol is called
-NBT or NetBT, the NetBIOS over TCP/IP.
-</para>
-
-<para>
-MS Windows machines use a complex array of name resolution mechanisms.
-Since we are primarily concerned with TCP/IP this demonstration is
-limited to this area.
-</para>
-
-<sect2>
-<title>The NetBIOS Name Cache</title>
-
-<para>
-All MS Windows machines employ an in memory buffer in which is
-stored the NetBIOS names and their IP addresses for all external
-machines that that the local machine has communicated with over the
-past 10-15 minutes. It is more efficient to obtain an IP address
-for a machine from the local cache than it is to go through all the
-configured name resolution mechanisms.
-</para>
-
-<para>
-If a machine whose name is in the local name cache has been shut
-down before the name had been expired and flushed from the cache, then
-an attempt to exchange a message with that machine will be subject
-to time-out delays. ie: It's name is in the cache, so a name resolution
-lookup will succeed, but the machine can not respond. This can be
-frustrating for users - but it is a characteristic of the protocol.
-</para>
-
-<para>
-The MS Windows utility that allows examination of the NetBIOS
-name cache is called "nbtstat". The Samba equivalent of this
-is called "nmblookup".
-</para>
-
-</sect2>
-
-<sect2>
-<title>The LMHOSTS file</title>
-
-<para>
-This file is usually located in MS Windows NT 4.0 or
-2000 in <filename>C:\WINNT\SYSTEM32\DRIVERS\ETC</filename> and contains
-the IP Address and the machine name in matched pairs. The
-<filename>LMHOSTS</filename> file performs NetBIOS name
-to IP address mapping oriented.
-</para>
-
-<para>
-It typically looks like:
-</para>
-
-<para><programlisting>
- # Copyright (c) 1998 Microsoft Corp.
- #
- # This is a sample LMHOSTS file used by the Microsoft Wins Client (NetBIOS
- # over TCP/IP) stack for Windows98
- #
- # This file contains the mappings of IP addresses to NT computernames
- # (NetBIOS) names. Each entry should be kept on an individual line.
- # The IP address should be placed in the first column followed by the
- # corresponding computername. The address and the comptername
- # should be separated by at least one space or tab. The "#" character
- # is generally used to denote the start of a comment (see the exceptions
- # below).
- #
- # This file is compatible with Microsoft LAN Manager 2.x TCP/IP lmhosts
- # files and offers the following extensions:
- #
- # #PRE
- # #DOM:&lt;domain&gt;
- # #INCLUDE &lt;filename&gt;
- # #BEGIN_ALTERNATE
- # #END_ALTERNATE
- # \0xnn (non-printing character support)
- #
- # Following any entry in the file with the characters "#PRE" will cause
- # the entry to be preloaded into the name cache. By default, entries are
- # not preloaded, but are parsed only after dynamic name resolution fails.
- #
- # Following an entry with the "#DOM:&lt;domain&gt;" tag will associate the
- # entry with the domain specified by &lt;domain&gt;. This affects how the
- # browser and logon services behave in TCP/IP environments. To preload
- # the host name associated with #DOM entry, it is necessary to also add a
- # #PRE to the line. The &lt;domain&gt; is always preloaded although it will not
- # be shown when the name cache is viewed.
- #
- # Specifying "#INCLUDE &lt;filename&gt;" will force the RFC NetBIOS (NBT)
- # software to seek the specified &lt;filename&gt; and parse it as if it were
- # local. &lt;filename&gt; is generally a UNC-based name, allowing a
- # centralized lmhosts file to be maintained on a server.
- # It is ALWAYS necessary to provide a mapping for the IP address of the
- # server prior to the #INCLUDE. This mapping must use the #PRE directive.
- # In addtion the share "public" in the example below must be in the
- # LanManServer list of "NullSessionShares" in order for client machines to
- # be able to read the lmhosts file successfully. This key is under
- # \machine\system\currentcontrolset\services\lanmanserver\parameters\nullsessionshares
- # in the registry. Simply add "public" to the list found there.
- #
- # The #BEGIN_ and #END_ALTERNATE keywords allow multiple #INCLUDE
- # statements to be grouped together. Any single successful include
- # will cause the group to succeed.
- #
- # Finally, non-printing characters can be embedded in mappings by
- # first surrounding the NetBIOS name in quotations, then using the
- # \0xnn notation to specify a hex value for a non-printing character.
- #
- # The following example illustrates all of these extensions:
- #
- # 102.54.94.97 rhino #PRE #DOM:networking #net group's DC
- # 102.54.94.102 "appname \0x14" #special app server
- # 102.54.94.123 popular #PRE #source server
- # 102.54.94.117 localsrv #PRE #needed for the include
- #
- # #BEGIN_ALTERNATE
- # #INCLUDE \\localsrv\public\lmhosts
- # #INCLUDE \\rhino\public\lmhosts
- # #END_ALTERNATE
- #
- # In the above example, the "appname" server contains a special
- # character in its name, the "popular" and "localsrv" server names are
- # preloaded, and the "rhino" server name is specified so it can be used
- # to later #INCLUDE a centrally maintained lmhosts file if the "localsrv"
- # system is unavailable.
- #
- # Note that the whole file is parsed including comments on each lookup,
- # so keeping the number of comments to a minimum will improve performance.
- # Therefore it is not advisable to simply add lmhosts file entries onto the
- # end of this file.
-</programlisting></para>
-
-</sect2>
-
-<sect2>
-<title>HOSTS file</title>
-
-<para>
-This file is usually located in MS Windows NT 4.0 or 2000 in
-<filename>C:\WINNT\SYSTEM32\DRIVERS\ETC</filename> and contains
-the IP Address and the IP hostname in matched pairs. It can be
-used by the name resolution infrastructure in MS Windows, depending
-on how the TCP/IP environment is configured. This file is in
-every way the equivalent of the Unix/Linux <filename>/etc/hosts</filename> file.
-</para>
-</sect2>
-
-
-<sect2>
-<title>DNS Lookup</title>
-
-<para>
-This capability is configured in the TCP/IP setup area in the network
-configuration facility. If enabled an elaborate name resolution sequence
-is followed the precise nature of which isdependant on what the NetBIOS
-Node Type parameter is configured to. A Node Type of 0 means use
-NetBIOS broadcast (over UDP broadcast) is first used if the name
-that is the subject of a name lookup is not found in the NetBIOS name
-cache. If that fails then DNS, HOSTS and LMHOSTS are checked. If set to
-Node Type 8, then a NetBIOS Unicast (over UDP Unicast) is sent to the
-WINS Server to obtain a lookup before DNS, HOSTS, LMHOSTS, or broadcast
-lookup is used.
-</para>
-
-</sect2>
-
-<sect2>
-<title>WINS Lookup</title>
-
-<para>
-A WINS (Windows Internet Name Server) service is the equivaent of the
-rfc1001/1002 specified NBNS (NetBIOS Name Server). A WINS server stores
-the names and IP addresses that are registered by a Windows client
-if the TCP/IP setup has been given at least one WINS Server IP Address.
-</para>
-
-<para>
-To configure Samba to be a WINS server the following parameter needs
-to be added to the <filename>smb.conf</filename> file:
-</para>
-
-<para><programlisting>
- wins support = Yes
-</programlisting></para>
-
-<para>
-To configure Samba to use a WINS server the following parameters are
-needed in the smb.conf file:
-</para>
-
-<para><programlisting>
- wins support = No
- wins server = xxx.xxx.xxx.xxx
-</programlisting></para>
-
-<para>
-where <replaceable>xxx.xxx.xxx.xxx</replaceable> is the IP address
-of the WINS server.
-</para>
-
-</sect2>
-</sect1>
-
-
-<sect1>
-<title>How browsing functions and how to deploy stable and
-dependable browsing using Samba</title>
-
-
-<para>
-As stated above, MS Windows machines register their NetBIOS names
-(ie: the machine name for each service type in operation) on start
-up. Also, as stated above, the exact method by which this name registration
-takes place is determined by whether or not the MS Windows client/server
-has been given a WINS server address, whether or not LMHOSTS lookup
-is enabled, or if DNS for NetBIOS name resolution is enabled, etc.
-</para>
-
-<para>
-In the case where there is no WINS server all name registrations as
-well as name lookups are done by UDP broadcast. This isolates name
-resolution to the local subnet, unless LMHOSTS is used to list all
-names and IP addresses. In such situations Samba provides a means by
-which the samba server name may be forcibly injected into the browse
-list of a remote MS Windows network (using the "remote announce" parameter).
-</para>
-
-<para>
-Where a WINS server is used, the MS Windows client will use UDP
-unicast to register with the WINS server. Such packets can be routed
-and thus WINS allows name resolution to function across routed networks.
-</para>
-
-<para>
-During the startup process an election will take place to create a
-local master browser if one does not already exist. On each NetBIOS network
-one machine will be elected to function as the domain master browser. This
-domain browsing has nothing to do with MS security domain control.
-Instead, the domain master browser serves the role of contacting each local
-master browser (found by asking WINS or from LMHOSTS) and exchanging browse
-list contents. This way every master browser will eventually obtain a complete
-list of all machines that are on the network. Every 11-15 minutes an election
-is held to determine which machine will be the master browser. By nature of
-the election criteria used, the machine with the highest uptime, or the
-most senior protocol version, or other criteria, will win the election
-as domain master browser.
-</para>
-
-<para>
-Clients wishing to browse the network make use of this list, but also depend
-on the availability of correct name resolution to the respective IP
-address/addresses.
-</para>
-
-<para>
-Any configuration that breaks name resolution and/or browsing intrinsics
-will annoy users because they will have to put up with protracted
-inability to use the network services.
-</para>
-
-<para>
-Samba supports a feature that allows forced synchonisation
-of browse lists across routed networks using the "remote
-browse sync" parameter in the smb.conf file. This causes Samba
-to contact the local master browser on a remote network and
-to request browse list synchronisation. This effectively bridges
-two networks that are separated by routers. The two remote
-networks may use either broadcast based name resolution or WINS
-based name resolution, but it should be noted that the "remote
-browse sync" parameter provides browse list synchronisation - and
-that is distinct from name to address resolution, in other
-words, for cross subnet browsing to function correctly it is
-essential that a name to address resolution mechanism be provided.
-This mechanism could be via DNS, <filename>/etc/hosts</filename>,
-and so on.
-</para>
-
-</sect1>
-
-<sect1>
-<title>MS Windows security options and how to configure
-Samba for seemless integration</title>
-
-<para>
-MS Windows clients may use encrypted passwords as part of a
-challenege/response authentication model (a.k.a. NTLMv1) or
-alone, or clear text strings for simple password based
-authentication. It should be realized that with the SMB
-protocol the password is passed over the network either
-in plain text or encrypted, but not both in the same
-authentication requets.
-</para>
-
-<para>
-When encrypted passwords are used a password that has been
-entered by the user is encrypted in two ways:
-</para>
-
-<itemizedlist>
- <listitem><para>An MD4 hash of the UNICODE of the password
- string. This is known as the NT hash.
- </para></listitem>
-
- <listitem><para>The password is converted to upper case,
- and then padded or trucated to 14 bytes. This string is
- then appended with 5 bytes of NULL characters and split to
- form two 56 bit DES keys to encrypt a "magic" 8 byte value.
- The resulting 16 bytes for the LanMan hash.
- </para></listitem>
-</itemizedlist>
-
-<para>
-You should refer to the <ulink url="ENCRYPTION.html">
-Password Encryption</ulink> chapter in this HOWTO collection
-for more details on the inner workings
-</para>
-
-<para>
-MS Windows 95 pre-service pack 1, MS Windows NT versions 3.x
-and version 4.0 pre-service pack 3 will use either mode of
-password authentication. All versions of MS Windows that follow
-these versions no longer support plain text passwords by default.
-</para>
-
-<para>
-MS Windows clients have a habit of dropping network mappings that
-have been idle for 10 minutes or longer. When the user attempts to
-use the mapped drive connection that has been dropped the SMB protocol
-has a mechanism by which the connection can be re-established using
-a cached copy of the password.
-</para>
-
-<para>
-When Microsoft changed the default password mode, they dropped support for
-caching of the plain text password. This means that when the registry
-parameter is changed to re-enable use of plain text passwords it appears to
-work, but when a dropped mapping attempts to revalidate it will fail if
-the remote authentication server does not support encrypted passwords.
-This means that it is definitely not a good idea to re-enable plain text
-password support in such clients.
-</para>
-
-<para>
-The following parameters can be used to work around the
-issue of Windows 9x client upper casing usernames and
-password before transmitting them to the SMB server
-when using clear text authentication.
-</para>
-
-<para><programlisting>
- <ulink url="smb.conf.5.html#PASSWORDLEVEL">passsword level</ulink> = <replaceable>integer</replaceable>
- <ulink url="smb.conf.5.html#USERNAMELEVEL">username level</ulink> = <replaceable>integer</replaceable>
-</programlisting></para>
-
-<para>
-By default Samba will lower case the username before attempting
-to lookup the user in the database of local system accounts.
-Because UNIX usernames conventionally only contain lower case
-character, the <parameter>username level</parameter> parameter
-is rarely even needed.
-</para>
-
-<para>
-However, password on UNIX systems often make use of mixed case
-characters. This means that in order for a user on a Windows 9x
-client to connect to a Samba server using clear text authentication,
-the <parameter>password level</parameter> must be set to the maximum
-number of upper case letter which <emphasis>could</emphasis> appear
-is a password. Note that is the server OS uses the traditional
-DES version of crypt(), then a <parameter>password level</parameter>
-of 8 will result in case insensitive passwords as seen from Windows
-users. This will also result in longer login times as Samba
-hash to compute the permutations of the password string and
-try them one by one until a match is located (or all combinations fail).
-</para>
-
-<para>
-The best option to adopt is to enable support for encrypted passwords
-where ever Samba is used. There are three configuration possibilities
-for support of encrypted passwords:
-</para>
-
-
-<sect2>
-<title>Use MS Windows NT as an authentication server</title>
-
-<para>
-This method involves the additions of the following parameters
-in the smb.conf file:
-</para>
-
-<para><programlisting>
- encrypt passwords = Yes
- security = server
- password server = "NetBIOS_name_of_PDC"
-</programlisting></para>
-
-
-<para>
-There are two ways of identifying whether or not a username and
-password pair was valid or not. One uses the reply information provided
-as part of the authentication messaging process, the other uses
-just and error code.
-</para>
-
-<para>
-The down-side of this mode of configuration is the fact that
-for security reasons Samba will send the password server a bogus
-username and a bogus password and if the remote server fails to
-reject the username and password pair then an alternative mode
-of identification of validation is used. Where a site uses password
-lock out after a certain number of failed authentication attempts
-this will result in user lockouts.
-</para>
-
-<para>
-Use of this mode of authentication does require there to be
-a standard Unix account for the user, this account can be blocked
-to prevent logons by other than MS Windows clients.
-</para>
-
-</sect2>
-
-<sect2>
-<title>Make Samba a member of an MS Windows NT security domain</title>
-
-<para>
-This method involves additon of the following paramters in the smb.conf file:
-</para>
-
-<para><programlisting>
- encrypt passwords = Yes
- security = domain
- workgroup = "name of NT domain"
- password server = *
-</programlisting></para>
-
-<para>
-The use of the "*" argument to "password server" will cause samba
-to locate the domain controller in a way analogous to the way
-this is done within MS Windows NT.
-</para>
-
-<para>
-In order for this method to work the Samba server needs to join the
-MS Windows NT security domain. This is done as follows:
-</para>
-
-<itemizedlist>
- <listitem><para>On the MS Windows NT domain controller using
- the Server Manager add a machine account for the Samba server.
- </para></listitem>
-
- <listitem><para>Next, on the Linux system execute:
- <command>smbpasswd -r PDC_NAME -j DOMAIN_NAME</command>
- </para></listitem>
-</itemizedlist>
-
-<para>
-Use of this mode of authentication does require there to be
-a standard Unix account for the user in order to assign
-a uid once the account has been authenticated by the remote
-Windows DC. This account can be blocked to prevent logons by
-other than MS Windows clients by things such as setting an invalid
-shell in the <filename>/etc/passwd</filename> entry.
-</para>
-
-<para>
-An alternative to assigning UIDs to Windows users on a
-Samba member server is presented in the <ulink
-url="winbind.html">Winbind Overview</ulink> chapter in
-this HOWTO collection.
-</para>
-
-
-</sect2>
-
-
-<sect2>
-<title>Configure Samba as an authentication server</title>
-
-<para>
-This mode of authentication demands that there be on the
-Unix/Linux system both a Unix style account as well as and
-smbpasswd entry for the user. The Unix system account can be
-locked if required as only the encrypted password will be
-used for SMB client authentication.
-</para>
-
-<para>
-This method involves addition of the following parameters to
-the smb.conf file:
-</para>
-
-<para><programlisting>
-## please refer to the Samba PDC HOWTO chapter later in
-## this collection for more details
-[global]
- encrypt passwords = Yes
- security = user
- domain logons = Yes
- ; an OS level of 33 or more is recommended
- os level = 33
-
-[NETLOGON]
- path = /somewhare/in/file/system
- read only = yes
-</programlisting></para>
-
-<para>
-in order for this method to work a Unix system account needs
-to be created for each user, as well as for each MS Windows NT/2000
-machine. The following structure is required.
-</para>
-
-<sect3>
-<title>Users</title>
-
-<para>
-A user account that may provide a home directory should be
-created. The following Linux system commands are typical of
-the procedure for creating an account.
-</para>
-
-<para><programlisting>
- # useradd -s /bin/bash -d /home/"userid" -m
- # passwd "userid"
- Enter Password: &lt;pw&gt;
-
- # smbpasswd -a "userid"
- Enter Password: &lt;pw&gt;
-</programlisting></para>
-</sect3>
-
-<sect3>
-<title>MS Windows NT Machine Accounts</title>
-
-<para>
-These are required only when Samba is used as a domain
-controller. Refer to the Samba-PDC-HOWTO for more details.
-</para>
-
-<para><programlisting>
- # useradd -a /bin/false -d /dev/null "machine_name"\$
- # passwd -l "machine_name"\$
- # smbpasswd -a -m "machine_name"
-</programlisting></para>
-</sect3>
-</sect2>
-</sect1>
-
-
-<sect1>
-<title>Conclusions</title>
-
-<para>
-Samba provides a flexible means to operate as...
-</para>
-
-<itemizedlist>
- <listitem><para>A Stand-alone server - No special action is needed
- other than to create user accounts. Stand-alone servers do NOT
- provide network logon services, meaning that machines that use this
- server do NOT perform a domain logon but instead make use only of
- the MS Windows logon which is local to the MS Windows
- workstation/server.
- </para></listitem>
-
- <listitem><para>An MS Windows NT 3.x/4.0 security domain member.
- </para></listitem>
-
-
- <listitem><para>An alternative to an MS Windows NT 3.x/4.0
- Domain Controller.
- </para></listitem>
-
-</itemizedlist>
-
-</sect1>
-
-</chapter>
diff --git a/docs/docbook/projdoc/NT_Security.sgml b/docs/docbook/projdoc/NT_Security.sgml
index a9532822938..a6be4a0ffd5 100644
--- a/docs/docbook/projdoc/NT_Security.sgml
+++ b/docs/docbook/projdoc/NT_Security.sgml
@@ -16,7 +16,7 @@
</chapterinfo>
-<title>UNIX Permission Bits and Windows NT Access Control Lists</title>
+<title>UNIX Permission Bits and WIndows NT Access Control Lists</title>
<sect1>
<title>Viewing and changing UNIX permissions using the NT
@@ -33,7 +33,7 @@
administrator can set.</para>
<para>In Samba 2.0.4 and above the default value of the
- parameter <ulink url="smb.conf.5.html#NTACLSUPPORT"><parameter>
+ parameter <ulink url="smb.conf.5.html#NTACLSUPPOR"><parameter>
nt acl support</parameter></ulink> has been changed from
<constant>false</constant> to <constant>true</constant>, so
manipulation of permissions is turned on by default.</para>
@@ -75,7 +75,7 @@
<para>Where <replaceable>SERVER</replaceable> is the NetBIOS name of
the Samba server, <replaceable>user</replaceable> is the user name of
the UNIX user who owns the file, and <replaceable>(Long name)</replaceable>
- is the descriptive string identifying the user (normally found in the
+ is the discriptive string identifying the user (normally found in the
GECOS field of the UNIX password database). Click on the <command>Close
</command> button to remove this dialog.</para>
@@ -87,14 +87,14 @@
you to change the ownership of this file to yourself (clicking on
it will display a dialog box complaining that the user you are
currently logged onto the NT client cannot be found). The reason
- for this is that changing the ownership of a file is a privileged
+ for this is that changing the ownership of a file is a privilaged
operation in UNIX, available only to the <emphasis>root</emphasis>
user. As clicking on this button causes NT to attempt to change
the ownership of a file to the current user logged into the NT
client this will not work with Samba at this time.</para>
<para>There is an NT chown command that will work with Samba
- and allow a user with Administrator privilege connected
+ and allow a user with Administrator privillage connected
to a Samba 2.0.4 server as root to change the ownership of
files on both a local NTFS filesystem or remote mounted NTFS
or Samba drive. This is available as part of the <emphasis>Seclib
@@ -116,7 +116,7 @@
<para>Where <replaceable>SERVER</replaceable> is the NetBIOS name of
the Samba server, <replaceable>user</replaceable> is the user name of
the UNIX user who owns the file, and <replaceable>(Long name)</replaceable>
- is the descriptive string identifying the user (normally found in the
+ is the discriptive string identifying the user (normally found in the
GECOS field of the UNIX password database).</para>
<para>If the parameter <parameter>nt acl support</parameter>
@@ -133,7 +133,7 @@
<title>File Permissions</title>
<para>The standard UNIX user/group/world triple and
- the corresponding "read", "write", "execute" permissions
+ the correspinding "read", "write", "execute" permissions
triples are mapped by Samba into a three element NT ACL
with the 'r', 'w', and 'x' bits mapped into the corresponding
NT permissions. The UNIX world permissions are mapped into
@@ -200,7 +200,7 @@
<para>The first thing to note is that the <command>"Add"</command>
button will not return a list of users in Samba 2.0.4 (it will give
- an error message of <command>"The remote procedure call failed
+ an error message of <command>"The remote proceedure call failed
and did not execute"</command>). This means that you can only
manipulate the current user/group/world permissions listed in
the dialog box. This actually works quite well as these are the
@@ -231,7 +231,7 @@
user/group/world component then you may either highlight the
component and click the <command>"Remove"</command> button,
or set the component to only have the special <command>"Take
- Ownership"</command> permission (displayed as <command>"O"
+ Ownership"</command> permission (dsplayed as <command>"O"
</command>) highlighted.</para>
</sect1>
@@ -281,7 +281,7 @@
as the <ulink url="smb.conf.5.html#FORCECREATEMODE"><parameter>force
create mode</parameter></ulink> parameter to provide compatibility
with Samba 2.0.4 where the permission change facility was introduced.
- To allow a user to modify all the user/group/world permissions on a file
+ To allow a user to modify all the user/group/world permissions on a file,
with no restrictions set this parameter to 000.</para>
<para>The <parameter>security mask</parameter> and <parameter>force
diff --git a/docs/docbook/projdoc/OS2-Client-HOWTO.sgml b/docs/docbook/projdoc/OS2-Client-HOWTO.sgml
index 387bf9151e0..5db80cda3d7 100644
--- a/docs/docbook/projdoc/OS2-Client-HOWTO.sgml
+++ b/docs/docbook/projdoc/OS2-Client-HOWTO.sgml
@@ -116,7 +116,7 @@
driver from an OS/2 system.</para>
<para>Install the NT driver first for that printer. Then,
- add to your smb.conf a parameter, "os2 driver map =
+ add to your smb.conf a paramater, "os2 driver map =
<replaceable>filename</replaceable>". Then, in the file
specified by <replaceable>filename</replaceable>, map the
name of the NT driver name to the OS/2 driver name as
diff --git a/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml b/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml
deleted file mode 100644
index 70ceb180511..00000000000
--- a/docs/docbook/projdoc/PAM-Authentication-And-Samba.sgml
+++ /dev/null
@@ -1,212 +0,0 @@
-<chapter>
-
-
-<chapterinfo>
- <author>
- <firstname>John</firstname><surname>Terpstra</surname>
- <affiliation>
- <orgname>Samba Team</orgname>
- <address>
- <email>jht@samba.org</email>
- </address>
- </affiliation>
- </author>
-
-
- <pubdate> (Jun 21 2001) </pubdate>
-</chapterinfo>
-
-<title>Configuring PAM for distributed but centrally
-managed authentication</title>
-
-<sect1>
-<title>Samba and PAM</title>
-
-<para>
-A number of Unix systems (eg: Sun Solaris), as well as the
-xxxxBSD family and Linux, now utilize the Pluggable Authentication
-Modules (PAM) facility to provide all authentication,
-authorization and resource control services. Prior to the
-introduction of PAM, a decision to use an alternative to
-the system password database (<filename>/etc/passwd</filename>)
-would require the provision of alternatives for all programs that provide
-security services. Such a choice would involve provision of
-alternatives to such programs as: <command>login</command>,
-<command>passwd</command>, <command>chown</command>, etc.
-</para>
-
-<para>
-PAM provides a mechanism that disconnects these security programs
-from the underlying authentication/authorization infrastructure.
-PAM is configured either through one file <filename>/etc/pam.conf</filename> (Solaris),
-or by editing individual files that are located in <filename>/etc/pam.d</filename>.
-</para>
-
-<para>
-The following is an example <filename>/etc/pam.d/login</filename> configuration file.
-This example had all options been uncommented is probably not usable
-as it stacks many conditions before allowing successful completion
-of the login process. Essentially all conditions can be disabled
-by commenting them out except the calls to <filename>pam_pwdb.so</filename>.
-</para>
-
-<para><programlisting>
-#%PAM-1.0
-# The PAM configuration file for the `login' service
-#
-auth required pam_securetty.so
-auth required pam_nologin.so
-# auth required pam_dialup.so
-# auth optional pam_mail.so
-auth required pam_pwdb.so shadow md5
-# account requisite pam_time.so
-account required pam_pwdb.so
-session required pam_pwdb.so
-# session optional pam_lastlog.so
-# password required pam_cracklib.so retry=3
-password required pam_pwdb.so shadow md5
-</programlisting></para>
-
-<para>
-PAM allows use of replacable modules. Those available on a
-sample system include:
-</para>
-
-<para><programlisting>
-$ /bin/ls /lib/security
-pam_access.so pam_ftp.so pam_limits.so
-pam_ncp_auth.so pam_rhosts_auth.so pam_stress.so
-pam_cracklib.so pam_group.so pam_listfile.so
-pam_nologin.so pam_rootok.so pam_tally.so
-pam_deny.so pam_issue.so pam_mail.so
-pam_permit.so pam_securetty.so pam_time.so
-pam_dialup.so pam_lastlog.so pam_mkhomedir.so
-pam_pwdb.so pam_shells.so pam_unix.so
-pam_env.so pam_ldap.so pam_motd.so
-pam_radius.so pam_smbpass.so pam_unix_acct.so
-pam_wheel.so pam_unix_auth.so pam_unix_passwd.so
-pam_userdb.so pam_warn.so pam_unix_session.so
-</programlisting></para>
-
-<para>
-The following example for the login program replaces the use of
-the <filename>pam_pwdb.so</filename> module which uses the system
-password database (<filename>/etc/passwd</filename>,
-<filename>/etc/shadow</filename>, <filename>/etc/group</filename>) with
-the module <filename>pam_smbpass.so</filename> which uses the Samba
-database which contains the Microsoft MD4 encrypted password
-hashes. This database is stored in either
-<filename>/usr/local/samba/private/smbpasswd</filename>,
-<filename>/etc/samba/smbpasswd</filename>, or in
-<filename>/etc/samba.d/smbpasswd</filename>, depending on the
-Samba implementation for your Unix/Linux system. The
-<filename>pam_smbpass.so</filename> module is provided by
-Samba version 2.2.1 or later. It can be compiled only if the
-<constant>--with-pam --with-pam_smbpass</constant> options are both
-provided to the Samba <command>configure</command> program.
-</para>
-
-<para><programlisting>
-#%PAM-1.0
-# The PAM configuration file for the `login' service
-#
-auth required pam_smbpass.so nodelay
-account required pam_smbpass.so nodelay
-session required pam_smbpass.so nodelay
-password required pam_smbpass.so nodelay
-</programlisting></para>
-
-<para>
-The following is the PAM configuration file for a particular
-Linux system. The default condition uses <filename>pam_pwdb.so</filename>.
-</para>
-
-<para><programlisting>
-#%PAM-1.0
-# The PAM configuration file for the `samba' service
-#
-auth required /lib/security/pam_pwdb.so nullok nodelay shadow audit
-account required /lib/security/pam_pwdb.so audit nodelay
-session required /lib/security/pam_pwdb.so nodelay
-password required /lib/security/pam_pwdb.so shadow md5
-</programlisting></para>
-
-<para>
-In the following example the decision has been made to use the
-smbpasswd database even for basic samba authentication. Such a
-decision could also be made for the passwd program and would
-thus allow the smbpasswd passwords to be changed using the passwd
-program.
-</para>
-
-<para><programlisting>
-#%PAM-1.0
-# The PAM configuration file for the `samba' service
-#
-auth required /lib/security/pam_smbpass.so nodelay
-account required /lib/security/pam_pwdb.so audit nodelay
-session required /lib/security/pam_pwdb.so nodelay
-password required /lib/security/pam_smbpass.so nodelay smbconf=/etc/samba.d/smb.conf
-</programlisting></para>
-
-<para>
-Note: PAM allows stacking of authentication mechanisms. It is
-also possible to pass information obtained within on PAM module through
-to the next module in the PAM stack. Please refer to the documentation for
-your particular system implementation for details regarding the specific
-capabilities of PAM in this environment. Some Linux implmentations also
-provide the <filename>pam_stack.so</filename> module that allows all
-authentication to be configured in a single central file. The
-<filename>pam_stack.so</filename> method has some very devoted followers
-on the basis that it allows for easier administration. As with all issues in
-life though, every decision makes trade-offs, so you may want examine the
-PAM documentation for further helpful information.
-</para>
-
-</sect1>
-
-<sect1>
-<title>Distributed Authentication</title>
-
-<para>
-The astute administrator will realize from this that the
-combination of <filename>pam_smbpass.so</filename>,
-<command>winbindd</command>, and <command>rsync</command> (see
-<ulink url="http://rsync.samba.org/">http://rsync.samba.org/</ulink>)
-will allow the establishment of a centrally managed, distributed
-user/password database that can also be used by all
-PAM (eg: Linux) aware programs and applications. This arrangement
-can have particularly potent advantages compared with the
-use of Microsoft Active Directory Service (ADS) in so far as
-reduction of wide area network authentication traffic.
-</para>
-
-</sect1>
-
-<sect1>
-<title>PAM Configuration in smb.conf</title>
-
-<para>
-There is an option in smb.conf called <ulink
-url="smb.conf.5.html#OBEYPAMRESTRICTIONS">obey pam restrictions</ulink>.
-The following is from the on-line help for this option in SWAT;
-</para>
-
-<para>
-When Samba 2.2 is configure to enable PAM support (i.e.
-<constant>--with-pam</constant>), 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 and to
-ignore any account or session management. Note that Samba always
-ignores PAM for authentication in the case of
-<ulink url="smb.conf.5.html#ENCRYPTPASSWORDS">encrypt passwords = yes</ulink>.
-The reason is that PAM modules cannot support the challenge/response
-authentication mechanism needed in the presence of SMB
-password encryption.
-</para>
-
-<para>Default: <command>obey pam restrictions = no</command></para>
-
-</sect1>
-</chapter>
diff --git a/docs/docbook/projdoc/Samba-PDC-HOWTO.sgml b/docs/docbook/projdoc/Samba-PDC-HOWTO.sgml
index 765a707b47b..8135492951c 100644
--- a/docs/docbook/projdoc/Samba-PDC-HOWTO.sgml
+++ b/docs/docbook/projdoc/Samba-PDC-HOWTO.sgml
@@ -8,46 +8,17 @@
<orgname>VA Linux Systems/Samba Team</orgname>
<address><email>jerry@samba.org</email></address>
</affiliation>
- <firstname>David</firstname><surname>Bannon</surname>
- <affiliation>
- <orgname>Samba Team</orgname>
- <address><email>dbannon@samba.org</email></address>
- </affiliation>
-
</author>
- <pubdate> (26 Apr 2001) </pubdate>
+ <pubdate>15 Apr 2001</pubdate>
</chapterinfo>
<title>
-How to Configure Samba 2.2 as a Primary Domain Controller
+How to Configure Samba 2.2.x as a Primary Domain Controller
</title>
<!-- **********************************************************
- Prerequisite Reading
-
-*************************************************************** -->
-<sect1>
-<title>Prerequisite Reading</title>
-
-<para>
-Before you continue reading in this chapter, please make sure
-that you are comfortable with configuring basic files services
-in smb.conf and how to enable and administer password
-encryption in Samba. Theses two topics are covered in the
-<ulink url="smb.conf.5.html"><filename>smb.conf(5)</filename></ulink>
-manpage and the <ulink url="ENCRYPTION.html">Encryption chapter</ulink>
-of this HOWTO Collection.
-</para>
-
-
-</sect1>
-
-
-
-<!-- **********************************************************
-
Background Information
*************************************************************** -->
@@ -56,82 +27,44 @@ of this HOWTO Collection.
Background
</title>
-<note>
-<para>
-<emphasis>Author's Note :</emphasis> This document is a combination
-of David Bannon's Samba 2.2 PDC HOWTO and the Samba NT Domain FAQ.
-Both documents are superseded by this one.
+<para><emphasis>Author's Note :</emphasis> This document
+is a combination of David Bannon's Samba 2.2 PDC HOWTO
+and the Samba NT Domain FAQ. Both documents are superceeded by this one.
</para>
-</note>
<para>
Version of Samba prior to release 2.2 had marginal capabilities to
-act as a Windows NT 4.0 Primary Domain Controller (PDC). Beginning with
-Samba 2.2.0, we are proud to announce official support for Windows NT 4.0
-style domain logons from Windows NT 4.0 (through SP6) and Windows 2000 (through
-SP1) clients. This article outlines the steps necessary for configuring Samba
-as a PDC. It is necessary to have a working Samba server prior to implementing the
-PDC functionality. If you have not followed the steps outlined in
-<ulink url="UNIX_INSTALL.html"> UNIX_INSTALL.html</ulink>, please make sure
-that your server is configured correctly before proceeding. Another good
-resource in the <ulink url="smb.conf.5.html">smb.conf(5) man
-page</ulink>. The following functionality should work in 2.2:
+act as a Windows NT 4.0 Primary Domain Controller (PDC). The following
+functionality should work in 2.2.0:
</para>
<itemizedlist>
- <listitem><para>
- domain logons for Windows NT 4.0/2000 clients.
- </para></listitem>
+ <listitem><para>domain logons for Windows NT 4.0/2000 clients</para></listitem>
- <listitem><para>
- placing a Windows 9x client in user level security
- </para></listitem>
+ <listitem><para>placing a Windows 9x client in user level security</para></listitem>
- <listitem><para>
- retrieving a list of users and groups from a Samba PDC to
- Windows 9x/NT/2000 clients
- </para></listitem>
+ <listitem><para>retrieving a list of users and groups from a Samba PDC to
+ Windows 9x/NT/2000 clients </para></listitem>
- <listitem><para>
- roving (roaming) user profiles
- </para></listitem>
+ <listitem><para>roving user profiles</para></listitem>
- <listitem><para>
- Windows NT 4.0 style system policies
- </para></listitem>
+ <listitem><para>Windows NT 4.0 style system policies</para></listitem>
</itemizedlist>
-<warning>
- <title>Windows 2000 Service Pack 2 Clients</title>
- <para>
- Samba 2.2.1 is required for PDC functionality when using Windows 2000
- SP2 clients.
- </para>
-</warning>
-
-
<para>
The following pieces of functionality are not included in the 2.2 release:
</para>
<itemizedlist>
- <listitem><para>
- Windows NT 4 domain trusts
- </para></listitem>
+ <listitem><para>Windows NT 4 domain trusts</para></listitem>
- <listitem><para>
- SAM replication with Windows NT 4.0 Domain Controllers
- (i.e. a Samba PDC and a Windows NT BDC or vice versa)
- </para></listitem>
+ <listitem><para>Sam replication with Windows NT 4.0 Domain Controllers
+ (i.e. a Samba PDC and a Windows NT BDC or vice versa) </para></listitem>
- <listitem><para>
- Adding users via the User Manager for Domains
- </para></listitem>
+ <listitem><para>Adding users via the User Manager for Domains</para></listitem>
- <listitem><para>
- Acting as a Windows 2000 Domain Controller (i.e. Kerberos and
- Active Directory)
- </para></listitem>
+ <listitem><para>Acting as a Windows 2000 Domain Controller (i.e. Kerberos
+ and Active Directory)</para></listitem>
</itemizedlist>
<para>
@@ -142,6 +75,19 @@ from NT4 domain logons and has been officially supported for some
time.
</para>
+<para>
+Beginning with Samba 2.2.0, we are proud to announce official
+support for Windows NT 4.0 style domain logons from Windows NT
+4.0 and Windows 2000 (including SP1) clients. This article
+outlines the steps necessary for configuring Samba as a PDC.
+Note that it is necessary to have a working Samba server
+prior to implementing the PDC functionality. If you have not
+followed the steps outlined in <ulink url="UNIX_INSTALL.html">
+UNIX_INSTALL.html</ulink>, please make sure that your server
+is configured correctly before proceeding. Another good
+resource in the <ulink url="smb.conf.5.html">smb.conf(5) man
+page</ulink>.
+</para>
<para>
Implementing a Samba PDC can basically be divided into 2 broad
@@ -149,14 +95,11 @@ steps.
</para>
<orderedlist numeration="Arabic">
- <listitem><para>
- Configuring the Samba PDC
+ <listitem><para>Configuring the Samba Domain Controller
</para></listitem>
- <listitem><para>
- Creating machine trust accounts and joining clients
- to the domain
- </para></listitem>
+ <listitem><para>Creating machine trust accounts
+ and joining clients to the domain</para></listitem>
</orderedlist>
<para>
@@ -221,7 +164,7 @@ Here is an example smb.conf for acting as a PDC:
<ulink url="smb.conf.5.html#LOGONHOME">logon home</ulink> = \\homeserver\%u
; specify a generic logon script for all users
- ; this is a relative **DOS** path to the [netlogon] share
+ ; this is a relative path to the [netlogon] share
<ulink url="smb.conf.5.html#LOGONSCRIPT">logon script</ulink> = logon.cmd
; necessary share for domain controller
@@ -239,32 +182,28 @@ Here is an example smb.conf for acting as a PDC:
</programlisting></para>
<para>
-There are a couple of points to emphasize in the above configuration.
+There are a couple of points to emphasize in the above
+configuration.
</para>
<itemizedlist>
- <listitem><para>
- Encrypted passwords must be enabled. For more details on how
- to do this, refer to <ulink url="ENCRYPTION.html">ENCRYPTION.html</ulink>.
+ <listitem><para>encrypted passwords must be enabled.
+ For more details on how to do this, refer to
+ <ulink url="ENCRYPTION.html">ENCRYPTION.html</ulink>.
</para></listitem>
- <listitem><para>
- The server must support domain logons and a
- <filename>[netlogon]</filename> share
- </para></listitem>
+ <listitem><para>The server must support domain logons
+ and a <filename>[netlogon]</filename> share</para></listitem>
- <listitem><para>
- The server must be the domain master browser in order for Windows
- client to locate the server as a DC. Please refer to the various
- Network Browsing documentation included with this distribution for
- details.
- </para></listitem>
+ <listitem><para>The server must be the domain master browser
+ in order for Windows client to locate the server as a DC.</para>
+ </listitem>
</itemizedlist>
<para>
As Samba 2.2 does not offer a complete implementation of group mapping between
Windows NT groups and UNIX groups (this is really quite complicated to explain
-in a short space), you should refer to the <ulink url="smb.conf.5.html#DOMAINADMINUSERS">domain
+in a short space), you should refer to the <ulink url="smb.conf.5.html#DOMAINADMONUSERS">domain
admin users</ulink> and <ulink url="smb.conf.5.html#DOMAINADMINGROUP">domain
admin group</ulink> smb.conf parameters for information of creating a Domain Admins
style accounts.
@@ -278,28 +217,24 @@ style accounts.
to the Domain</title>
<para>
-A machine trust account is a samba user account owned by a computer.
-The account password acts as the shared secret for secure
-communication with the Domain Controller. This is a security feature
-to prevent an unauthorized machine with the same NetBIOS name from
-joining the domain and gaining access to domain user/group accounts.
-Hence a Windows 9x host is never a true member of a domain because it does
-not posses a machine trust account, and thus has no shared secret with the DC.
+First you must understand what a machine trust account is and what
+it is used for.
</para>
<para>
-On a Windows NT PDC, these machine trust account passwords are stored
-in the registry. A Samba PDC stores these accounts in the same location
-as user LanMan and NT password hashes (currently <filename>smbpasswd</filename>).
-However, machine trust accounts only possess and use the NT password hash.
+A machine trust account is a user account owned by a computer.
+The account password acts as the shared secret for secure
+communication with the Domain Controller. Hence the reason that
+a Windows 9x host is never a true member of a domain because
+it does not posses a machine trust account and thus has no shared
+secret with the DC.
</para>
<para>
-Because Samba requires machine accounts to possess a UNIX uid from
-which an Windows NT SID can be generated, all of these accounts
-must have an entry in <filename>/etc/passwd</filename> and smbpasswd.
-Future releases will alleviate the need to create
-<filename>/etc/passwd</filename> entries.
+On a Windows NT PDC, these machine trust account passwords are stored
+in the registry. A Samba PDC stores these accounts in he same location
+as user LanMan and NT password hashes (currently <filename>smbpasswd</filename>).
+However, machine trust accounts only possess the NT password hash.
</para>
<para>
@@ -307,35 +242,25 @@ There are two means of creating machine trust accounts.
</para>
<itemizedlist>
- <listitem><para>
- Manual creation before joining the client to the domain. In this case,
- the password is set to a known value -- the lower case of the
- machine's NetBIOS name.
- </para></listitem>
+ <listitem><para>Manual creation before joining the client
+ to the domain. In this case, the password is set to a known
+ value -- the lower case of the machine's netbios name.</para></listitem>
- <listitem><para>
- Creation of the account at the time of joining the domain. In
- this case, the session key of the administrative account used to join
- the client to the domain acts as an encryption key for setting the
- password to a random value (This is the recommended method).
- </para></listitem>
+ <listitem><para>Creation of the account at the time of
+ joining the domain. In this case, the session key of the
+ administrative account used to join the client to the domain acts
+ as an encryption key for setting the password to a random value.</para>
+ </listitem>
</itemizedlist>
-<sect2>
-<title>Manually creating machine trust accounts</title>
-
<para>
-The first step in creating a machine trust account by hand is to
-create an entry for the machine in /etc/passwd. This can be done
-using <command>vipw</command> or any 'add userr' command which is normally
-used to create new UNIX accounts. The following is an example for a Linux
-based Samba server:
+Because Samba requires machine accounts to possess a UNIX uid from
+which an Windows NT SID can be generated, all of these accounts
+will have an entry in <filename>/etc/passwd</filename> and smbpasswd.
+Future releases will alleviate the need to create
+<filename>/etc/passwd</filename> entries.
</para>
-<para>
-<prompt>root# </prompt>/usr/sbin/useradd -g 100 -d /dev/null -c <replaceable>
-machine_nickname</replaceable> -m -s /bin/false <replaceable>machine_name</replaceable>$
-</para>
<para>
The <filename>/etc/passwd</filename> entry will list the machine name
@@ -345,60 +270,39 @@ home directory. For example a machine called 'doppy' would have an
</para>
<para><programlisting>
-doppy$:x:505:501:<replaceable>machine_nickname</replaceable>:/dev/null:/bin/false
+doppy$:x:505:501:NTMachine:/dev/null:/bin/false
</programlisting></para>
<para>
-Above, <replaceable>machine_nickname</replaceable> can be any descriptive name for the
-pc i.e. BasementComputer. The <replaceable>machine_name</replaceable> absolutely must be
-the NetBIOS name of the pc to be added to the domain. The "$" must append the NetBIOS
-name of the pc or samba will not recognize this as a machine account
+If you are manually creating the machine accounts, it is necessary
+to add the <filename>/etc/passwd</filename> (or NIS passwd
+map) entry prior to adding the <filename>smbpasswd</filename>
+entry. The following command will create a new machine account
+ready for use.
</para>
-
<para>
-Now that the UNIX account has been created, the next step is to create
-the smbpasswd entry for the machine containing the well known initial
-trust account password. This can be done using the <ulink
-url="smbpasswd.6.html"><command>smbpasswd(8)</command></ulink> command
-as shown here:
+<prompt>root# </prompt> smbpasswd -a -m <replaceable>machine_name</replaceable>
</para>
<para>
-<prompt>root# </prompt> smbpasswd -a -m <replaceable>machine_name</replaceable>
+where <replaceable>machine_name</replaceable> is the machine's netbios
+name.
</para>
<para>
-where <replaceable>machine_name</replaceable> is the machine's NetBIOS
-name.
+<emphasis>If you manually create a machine account, immediately join
+the client to the domain.</emphasis> An open account like this
+can allow intruders to gain access to user account information
+in your domain.
</para>
-<warning>
- <title>Join the client to the domain immediately</title>
-
- <para>
- Manually creating a machine trust account using this method is the
- equivalent of creating a machine account on a Windows NT PDC using
- the "Server Manager". From the time at which the account is created
- to the time which th client joins the domain and changes the password,
- your domain is vulnerable to an intruder joining your domain using a
- a machine with the same NetBIOS name. A PDC inherently trusts
- members of the domain and will serve out a large degree of user
- information to such clients. You have been warned!
- </para>
-</warning>
-</sect2>
-
-
-<sect2>
-<title>Creating machine trust accounts "on the fly"</title>
-
<para>
-The second, and most recommended way of creating machine trust accounts
-is to create them as needed at the time the client is joined to
-the domain. You will need to include a value for the <ulink
-url="smb.conf.5.html#ADDUSERSCRIPT">add user script</ulink>
-parameter. Below is an example from a RedHat 6.2 Linux system.
+The second way of creating machine trust accounts is to add
+them on the fly at the time the client is joined to the domain.
+You will need to include a value for the
+<ulink url="smb.conf.5.html#ADDUSERSCRIPT">add user script</ulink>
+parameter. Below is an example I use on a RedHat 6.2 Linux system.
</para>
<para><programlisting>
@@ -406,13 +310,13 @@ add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u
</programlisting></para>
<para>
-In Samba 2.2.1, <emphasis>only the root account</emphasis> can be used to create
-machine accounts like this. Therefore, it is required to create
-an entry in smbpasswd for <emphasis>root</emphasis>. The password
-<emphasis>SHOULD</emphasis> be set to s different password that the
-associated <filename>/etc/passwd</filename> entry for security reasons.
+In Samba 2.2.0, <emphasis>only the root account</emphasis> can be used to create
+machine accounts on the fly like this. Therefore, it is required
+to create an entry in smbpasswd for <emphasis>root</emphasis>.
+The password <emphasis>SHOULD</emphasis> be set to s different
+password that the associated <filename>/etc/passwd</filename>
+entry for security reasons.
</para>
-</sect2>
</sect1>
<!-- **********************************************************
@@ -426,145 +330,108 @@ associated <filename>/etc/passwd</filename> entry for security reasons.
<para>
</para>
-<itemizedlist>
-<listitem>
- <para>
- <emphasis>I cannot include a '$' in a machine name.</emphasis>
- </para>
-
- <para>
- A 'machine name' in (typically) <filename>/etc/passwd</>
- of the machine name with a '$' appended. FreeBSD (and other BSD
- systems ?) won't create a user with a '$' in their name.
- </para>
- <para>
- The problem is only in the program used to make the entry, once
- made, it works perfectly. So create a user without the '$' and
- use <command>vipw</> to edit the entry, adding the '$'. Or create
- the whole entry with vipw if you like, make sure you use a
- unique uid !
- </para>
-</listitem>
-
-<listitem>
- <para>
- <emphasis>I get told "You already have a connection to the Domain...."
- or "Cannot join domain, the credentials supplied conflict with an
- existing set.." when creating a machine account.</emphasis>
- </para>
+<para>
+<emphasis>I cannot include a '$' in a machine name.</emphasis>
+</para>
- <para>
- This happens if you try to create a machine account from the
- machine itself and already have a connection (e.g. mapped drive)
- to a share (or IPC$) on the Samba PDC. The following command
- will remove all network drive connections:
- </para>
+<para>
+A 'machine name' in (typically) <filename>/etc/passwd</>
+of the machine name with a '$' appended. FreeBSD (and other BSD
+systems ?) won't create a user with a '$' in their name.
+</para>
- <para>
- <prompt>C:\WINNT\></prompt> <command>net use * /d</command>
- </para>
+<para>
+The problem is only in the program used to make the entry, once
+made, it works perfectly. So create a user without the '$' and
+use <command>vipw</> to edit the entry, adding the '$'. Or create
+the whole entry with vipw if you like, make sure you use a
+unique uid !
+</para>
- <para>
- Further, if the machine is a already a 'member of a workgroup' that
- is the same name as the domain you are joining (bad idea) you will
- get this message. Change the workgroup name to something else, it
- does not matter what, reboot, and try again.
- </para>
-</listitem>
-<listitem>
- <para>
- <emphasis>The system can not log you on (C000019B)....</emphasis>
- </para>
+<para>
+<emphasis>I get told "You already have a connection to the Domain...."
+when creating a machine account.</emphasis>
+</para>
- <para>I joined the domain successfully but after upgrading
- to a newer version of the Samba code I get the message, "The system
- can not log you on (C000019B), Please try a gain or consult your
- system administrator" when attempting to logon.
- </para>
+<para>
+This happens if you try to create a machine account from the
+machine itself and use a user name that does not work (for whatever
+reason) and then try another (possibly valid) user name.
+Exit out of the network applet to close the initial connection
+and try again.
+</para>
- <para>
- This occurs when the domain SID stored in
- <filename>private/WORKGROUP.SID</filename> is
- changed. For example, you remove the file and <command>smbd</command> automatically
- creates a new one. Or you are swapping back and forth between
- versions 2.0.7, TNG and the HEAD branch code (not recommended). The
- only way to correct the problem is to restore the original domain
- SID or remove the domain client from the domain and rejoin.
- </para>
-</listitem>
+<para>
+Further, if the machine is a already a 'member of a workgroup' that
+is the same name as the domain you are joining (bad idea) you will
+get this message. Change the workgroup name to something else, it
+does not matter what, reboot, and try again.
+</para>
-<listitem>
- <para>
- <emphasis>The machine account for this computer either does not
- exist or is not accessible.</emphasis>
- </para>
+<para>
+<emphasis>I get told "Cannot join domain, the credentials supplied
+conflict with an existing set.."</emphasis>
+</para>
- <para>
- When I try to join the domain I get the message "The machine account
- for this computer either does not exist or is not accessible". Whats
- wrong?
- </para>
+<para>
+This is the same basic problem as mentioned above, "You already
+have a connection..."
+</para>
- <para>
- This problem is caused by the PDC not having a suitable machine account.
- If you are using the <parameter>add user script</parameter> method to create
- accounts then this would indicate that it has not worked. Ensure the domain
- admin user system is working.
- </para>
+<para>
+<emphasis>
+"The system can not log you on (C000019B)...."</emphasis>
+</para>
- <para>
- Alternatively if you are creating account entries manually then they
- have not been created correctly. Make sure that you have the entry
- correct for the machine account in smbpasswd file on the Samba PDC.
- If you added the account using an editor rather than using the smbpasswd
- utility, make sure that the account name is the machine NetBIOS name
- with a '$' appended to it ( i.e. computer_name$ ). There must be an entry
- in both /etc/passwd and the smbpasswd file. Some people have reported
- that inconsistent subnet masks between the Samba server and the NT
- client have caused this problem. Make sure that these are consistent
- for both client and server.
- </para>
-</listitem>
+<para>I joined the domain successfully but after upgrading
+to a newer version of the Samba code I get the message, "The system
+can not log you on (C000019B), Please try a gain or consult your
+system administrator" when attempting to logon.
+</para>
-<listitem>
- <para>
- <emphasis>When I attempt to login to a Samba Domain from a NT4/W2K workstation,
- I get a message about my account being disabled.</emphasis>
- </para>
+<para>
+This occurs when the domain SID stored in
+<filename>private/WORKGROUP.SID</filename> is
+changed. For example, you remove the file and <command>smbd</command> automatically
+creates a new one. Or you are swapping back and forth between
+versions 2.0.7, TNG and the HEAD branch code (not recommended). The
+only way to correct the problem is to restore the original domain
+SID or remove the domain client from the domain and rejoin.
+</para>
- <para>
- This problem is caused by a PAM related bug in Samba 2.2.0. This bug is
- fixed in 2.2.1. Other symptoms could be unaccessible shares on
- NT/W2K member servers in the domain or the following error in your smbd.log:
- passdb/pampass.c:pam_account(268) PAM: UNKNOWN ERROR for User: %user%
- </para>
-
- <para>
- At first be ensure to enable the useraccounts with <command>smbpasswd -e
- %user%</command>, this is normally done, when you create an account.
- </para>
- <para>
- In order to work around this problem in 2.2.0, configure the
- <parameter>account</parameter> control flag in
- <filename>/etc/pam.d/samba</filename> file as follows:
- </para>
+<para>
+<emphasis>"The machine account for this computer either does not
+exist or is not accessible."</emphasis>
+</para>
- <para><programlisting>
- account required pam_permit.so
- </programlisting></para>
+<para>
+When I try to join the domain I get the message "The machine account
+for this computer either does not exist or is not accessible". Whats
+wrong ?
+</para>
- <para>
- If you want to remain backward compatibility to samba 2.0.x use
- <filename>pam_permit.so</filename>, it's also possible to use
- <filename>pam_pwdb.so</filename>. There are some bugs if you try to
- use <filename>pam_unix.so</filename>, if you need this, be ensure to use
- the most recent version of this file.
- </para>
-</listitem>
-</itemizedlist>
+<para>
+This problem is caused by the PDC not having a suitable machine account.
+If you are using the <command>add user script =</> method to create
+accounts then this would indicate that it has not worked. Ensure the domain
+admin user system is working.
+</para>
+
+<para>
+Alternatively if you are creating account entries manually then they
+have not been created correctly. Make sure that you have the entry
+correct for the machine account in smbpasswd file on the Samba PDC.
+If you added the account using an editor rather than using the smbpasswd
+utility, make sure that the account name is the machine netbios name
+with a '$' appended to it ( ie. computer_name$ ). There must be an entry
+in both /etc/passwd and the smbpasswd file. Some people have reported
+that inconsistent subnet masks between the Samba server and the NT
+client have caused this problem. Make sure that these are consistent
+for both client and server.
+</para>
</sect1>
@@ -593,98 +460,89 @@ Profiles and Policies in Windows NT 4.0</ulink> available from Microsoft.
Here are some additional details:
</para>
-<itemizedlist>
-
-<listitem>
- <para>
- <emphasis>What about Windows NT Policy Editor ?</emphasis>
- </para>
-
- <para>
- To create or edit <filename>ntconfig.pol</filename> you must use
- the NT Server Policy Editor, <command>poledit.exe</command> which
- is included with NT Server but <emphasis>not NT Workstation</emphasis>.
- There is a Policy Editor on a NTws
- but it is not suitable for creating <emphasis>Domain Policies</emphasis>.
- Further, although the Windows 95
- Policy Editor can be installed on an NT Workstation/Server, it will not
- work with NT policies because the registry key that are set by the policy templates.
- However, the files from the NT Server will run happily enough on an NTws.
- You need <filename>poledit.exe, common.adm</> and <filename>winnt.adm</>. It is convenient
- to put the two *.adm files in <filename>c:\winnt\inf</> which is where
- the binary will look for them unless told otherwise. Note also that that
- directory is 'hidden'.
- </para>
+<para>
+<emphasis>What about Windows NT Policy Editor ?</emphasis>
+</para>
- <para>
- The Windows NT policy editor is also included with the Service Pack 3 (and
- later) for Windows NT 4.0. Extract the files using <command>servicepackname /x</command>,
- i.e. that's <command>Nt4sp6ai.exe /x</command> for service pack 6a. The policy editor,
- <command>poledit.exe</command> and the associated template files (*.adm) should
- be extracted as well. It is also possible to downloaded the policy template
- files for Office97 and get a copy of the policy editor. Another possible
- location is with the Zero Administration Kit available for download from Microsoft.
- </para>
-</listitem>
+<para>
+To create or edit <filename>ntconfig.pol</filename> you must use
+the NT Server Policy Editor, <command>poledit.exe</command> which
+is included with NT Server but <emphasis>not NT Workstation</emphasis>.
+There is a Policy Editor on a NTws
+but it is not suitable for creating <emphasis>Domain Policies</emphasis>.
+Further, although the Windows 95
+Policy Editor can be installed on an NT Workstation/Server, it will not
+work with NT policies because the registry key that are set by the policy templates.
+However, the files from the NT Server will run happily enough on an NTws.
+You need <filename>poledit.exe, common.adm</> and <filename>winnt.adm</>. It is convenient
+to put the two *.adm files in <filename>c:\winnt\inf</> which is where
+the binary will look for them unless told otherwise. Note also that that
+directory is 'hidden'.
+</para>
+<para>The Windows NT policy editor is also included with the
+Service Pack 3 (and later) for Windows NT 4.0. Extract the files using
+<command>servicepackname /x</command>, ie thats <command>Nt4sp6ai.exe
+/x</command> for service pack 6a. The policy editor, <command>poledit.exe</command> and the
+associated template files (*.adm) should
+be extracted as well. It is also possible to downloaded the policy template
+files for Office97 and get a copy of the policy editor. Another possible
+location is with the Zero Administration Kit available for download from Microsoft.
+</para>
-<listitem>
- <para>
- <emphasis>Can Win95 do Policies ?</emphasis>
- </para>
- <para>
- Install the group policy handler for Win9x to pick up group
- policies. Look on the Win98 CD in <filename>\tools\reskit\netadmin\poledit</filename>.
- Install group policies on a Win9x client by double-clicking
- <filename>grouppol.inf</filename>. Log off and on again a couple of
- times and see if Win98 picks up group policies. Unfortunately this needs
- to be done on every Win9x machine that uses group policies....
- </para>
+<para>
+<emphasis>Can Win95 do Policies ?</emphasis>
+</para>
- <para>
- If group policies don't work one reports suggests getting the updated
- (read: working) grouppol.dll for Windows 9x. The group list is grabbed
- from /etc/group.
- </para>
-</listitem>
+<para>
+Install the group policy handler for Win9x to pick up group
+policies. Look on the Win98 CD in <filename>\tools\reskit\netadmin\poledit</filename>.
+Install group policies on a Win9x client by double-clicking
+<filename>grouppol.inf</filename>. Log off and on again a couple of
+times and see if Win98 picks up group policies. Unfortunately this needs
+to be done on every Win9x machine that uses group policies....
+</para>
+<para>
+If group policies don't work one reports suggests getting the updated
+(read: working) grouppol.dll for Windows 9x. The group list is grabbed
+from /etc/group.
+</para>
-<listitem>
- <para>
- <emphasis>How do I get 'User Manager' and 'Server Manager'</emphasis>
- </para>
+<para>
+<emphasis>How do I get 'User Manager' and 'Server Manager'</emphasis>
+</para>
- <para>
- Since I don't need to buy an NT Server CD now, how do I get
- the 'User Manager for Domains', the 'Server Manager' ?
- </para>
+<para>
+Since I don't need to buy an NT Server CD now, how do I get
+the 'User Manager for Domains', the 'Server Manager' ?
+</para>
- <para>
- Microsoft distributes a version of these tools called nexus for
- installation on Windows 95 systems. The tools set includes
- </para>
+<para>
+Microsoft distributes a version of
+these tools called nexus for installation on Windows 95 systems. The
+tools set includes
+</para>
- <itemizedlist>
- <listitem><para>Server Manager</para></listitem>
+<itemizedlist>
+ <listitem><para>Server Manager</para></listitem>
- <listitem><para>User Manager for Domains</para></listitem>
+ <listitem><para>User Manager for Domains</para></listitem>
- <listitem><para>Event Viewer</para></listitem>
- </itemizedlist>
+ <listitem><para>Event Viewer</para></listitem>
+</itemizedlist>
- <para>
- Click here to download the archived file <ulink
- url="ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE">ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE</ulink>
- </para>
+<para>
+Click here to download the archived file <ulink
+url="ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE">ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE</ulink>
+</para>
- <para>
- The Windows NT 4.0 version of the 'User Manager for
- Domains' and 'Server Manager' are available from Microsoft via ftp
- from <ulink url="ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE">ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE</ulink>
- </para>
-</listitem>
-</itemizedlist>
+<para>
+The Windows NT 4.0 version of the 'User Manager for
+Domains' and 'Server Manager' are available from Microsoft via ftp
+from <ulink url="ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE">ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE</ulink>
+</para>
</sect1>
@@ -706,16 +564,14 @@ of mailing lists, RFC's and documentation. The docs that come
with the samba distribution contain very good explanations of
general SMB topics such as browsing.</para>
-<itemizedlist>
-<listitem>
- <para>
- <emphasis>What are some diagnostics tools I can use to debug the domain logon
- process and where can I find them?</emphasis>
- </para>
+<para>
+<emphasis>What are some diagnostics tools I can use to debug the domain logon
+process and where can I find them?</emphasis>
+</para>
- <para>
+ <para>
One of the best diagnostic tools for debugging problems is Samba itself.
- You can use the -d option for both smbd and nmbd to specify what
+ You can use the -d option for both smbd and nmbd to specifiy what
'debug level' at which to run. See the man pages on smbd, nmbd and
smb.conf for more information on debugging options. The debug
level can range from 1 (the default) to 10 (100 for debugging passwords).
@@ -745,9 +601,9 @@ general SMB topics such as browsing.</para>
<listitem><para>smbclient -L //{netbios name of server}</para></listitem>
</itemizedlist>
- <para>
+ <para>
An SMB enabled version of tcpdump is available from
- <ulink url="http://www.tcpdump.org/">http://www.tcpdup.org/</ulink>.
+ <ulink url="http://www.tcpdump.org/">http://www.tcpdup.org/</ulink>.
Ethereal, another good packet sniffer for UNIX and Win32
hosts, can be downloaded from <ulink
url="http://www.ethereal.com/">http://www.ethereal.com</ulink>.
@@ -758,21 +614,17 @@ general SMB topics such as browsing.</para>
(aka. netmon) is available on the Microsoft Developer Network CD's,
the Windows NT Server install CD and the SMS CD's. The version of
netmon that ships with SMS allows for dumping packets between any two
- computers (i.e. placing the network interface in promiscuous mode).
+ computers (ie. placing the network interface in promiscuous mode).
The version on the NT Server install CD will only allow monitoring
of network traffic directed to the local NT box and broadcasts on the
local subnet. Be aware that Ethereal can read and write netmon
formatted files.
</para>
-</listitem>
-
-
-<listitem>
- <para>
- <emphasis>How do I install 'Network Monitor' on an NT Workstation
- or a Windows 9x box?</emphasis>
- </para>
+<para>
+<emphasis>How do I install 'Network Monitor' on an NT Workstation
+or a Windows 9x box?</emphasis>
+</para>
<para>
Installing netmon on an NT workstation requires a couple
of steps. The following are for installing Netmon V4.00.349, which comes
@@ -844,17 +696,12 @@ general SMB topics such as browsing.</para>
information on how to do this. Copy the files from a working
Netmon installation.
</para>
-</listitem>
-
-
+<sect2>
+<title>URLs and similar</title>
-<listitem>
- <para>
- The following is a list if helpful URLs and other links:
- </para>
- <itemizedlist>
+<itemizedlist>
<listitem><para>Home of Samba site <ulink url="http://samba.org">
http://samba.org</ulink>. We have a mirror near you !</para></listitem>
@@ -881,35 +728,36 @@ general SMB topics such as browsing.</para>
<ulink url="ftp://ftp.microsoft.com/developr/drg/CIFS/">
ftp://ftp.microsoft.com/developr/drg/CIFS/</ulink></para></listitem>
- </itemizedlist>
-</listitem>
</itemizedlist>
+</sect2>
-<itemizedlist>
-<listitem>
- <para>
- <emphasis>How do I get help from the mailing lists ?</emphasis>
- </para>
- <para>
- There are a number of Samba related mailing lists. Go to <ulink
- url="http://samba.org">http://samba.org</ulink>, click on your nearest mirror
- and then click on <command>Support</> and then click on <command>
- Samba related mailing lists</>.
- </para>
+<sect2>
+<title>Mailing Lists</title>
- <para>
- For questions relating to Samba TNG go to
- <ulink url="http://www.samba-tng.org/">http://www.samba-tng.org/</ulink>
- It has been requested that you don't post questions about Samba-TNG to the
- main stream Samba lists.</para>
+<para>
+<emphasis>How do I get help from the mailing lists ?</emphasis>
+</para>
+
+<para>
+There are a number of Samba related mailing lists. Go to <ulink
+url="http://samba.org">http://samba.org</ulink>, click on your nearest mirror
+and then click on <command>Support</> and then click on <command>
+Samba related mailing lists</>.
+</para>
+
+<para>
+For questions relating to Samba TNG go to
+<ulink url="http://www.samba-tng.org/">http://www.samba-tng.org/</ulink>
+It has been requested that you don't post questions about Samba-TNG to the
+main stream Samba lists.</para>
- <para>
- If you post a message to one of the lists please observe the following guide lines :
- </para>
+<para>
+If you post a message to one of the lists please observe the following guide lines :
+</para>
- <itemizedlist>
+<itemizedlist>
<listitem><para> Always remember that the developers are volunteers, they are
not paid and they never guarantee to produce a particular feature at
@@ -934,7 +782,7 @@ general SMB topics such as browsing.</para>
</para></listitem>
<listitem><para> Don't cross post. Work out which is the best list to post to
- and see what happens, i.e. don't post to both samba-ntdom and samba-technical.
+ and see what happens, ie don't post to both samba-ntdom and samba-technical.
Many people active on the lists subscribe to more
than one list and get annoyed to see the same message two or more times.
Often someone will see a message and thinking it would be better dealt
@@ -953,787 +801,28 @@ general SMB topics such as browsing.</para>
mailing lists go to a huge number of people, do they all need a copy of your
smb.conf in their attach directory ?</para></listitem>
- </itemizedlist>
-</listitem>
-
-
-<listitem>
- <para>
- <emphasis>How do I get off the mailing lists ?</emphasis>
- </para>
-
- <para>To have your name removed from a samba mailing list, go to the
- same place you went to to get on it. Go to <ulink
- url="http://lists.samba.org/">http://lists.samba.org</ulink>,
- click on your nearest mirror and then click on <command>Support</> and
- then click on <command> Samba related mailing lists</>. Or perhaps see
- <ulink url="http://lists.samba.org/mailman/roster/samba-ntdom">here</ulink>
- </para>
-
- <para>
- Please don't post messages to the list asking to be removed, you will just
- be referred to the above address (unless that process failed in some way...)
- </para>
-</listitem>
</itemizedlist>
-</sect1>
-
-
-<!-- **********************************************************
-
- Windows 9x domain control
-
-*************************************************************** -->
-<sect1>
-<title>Domain Control for Windows 9x/ME</title>
-
-<note>
-<para>
-The following section contains much of the original
-DOMAIN.txt file previously included with Samba. Much of
-the material is based on what went into the book Special
-Edition, Using Samba. (Richard Sharpe)
-</para>
-</note>
-
-<para>
-A domain and a workgroup are exactly the same thing in terms of network
-browsing. The difference is that a distributable authentication
-database is associated with a domain, for secure login access to a
-network. Also, different access rights can be granted to users if they
-successfully authenticate against a domain logon server (NT server and
-other systems based on NT server support this, as does at least Samba TNG now).
-</para>
-
-<para>
-The SMB client logging on to a domain has an expectation that every other
-server in the domain should accept the same authentication information.
-Network browsing functionality of domains and workgroups is
-identical and is explained in BROWSING.txt. It should be noted, that browsing
-is total orthogonal to logon support.
-</para>
-
-<para>
-Issues related to the single-logon network model are discussed in this
-document. Samba supports domain logons, network logon scripts, and user
-profiles for MS Windows for workgroups and MS Windows 9X clients.
-</para>
-
-
-<para>
-When an SMB client in a domain wishes to logon it broadcast requests for a
-logon server. The first one to reply gets the job, and validates its
-password using whatever mechanism the Samba administrator has installed.
-It is possible (but very stupid) to create a domain where the user
-database is not shared between servers, i.e. they are effectively workgroup
-servers advertising themselves as participating in a domain. This
-demonstrates how authentication is quite different from but closely
-involved with domains.
-</para>
-
-<para>
-Another thing commonly associated with single-logon domains is remote
-administration over the SMB protocol. Again, there is no reason why this
-cannot be implemented with an underlying username database which is
-different from the Windows NT SAM. Support for the Remote Administration
-Protocol is planned for a future release of Samba.
-</para>
-
-<para>
-Network logon support as discussed in this section is aimed at Window for
-Workgroups, and Windows 9X clients.
-</para>
-
-<para>
-Support for profiles is confirmed as working for Win95, NT 4.0 and NT 3.51.
-It is possible to specify: the profile location; script file to be loaded
-on login; the user's home directory; and for NT a kick-off time could also
-now easily be supported. However, there are some differences between Win9X
-profile support and WinNT profile support. These are discussed below.
-</para>
-
-<para>
-With NT Workstations, all this does not require the use or intervention of
-an NT 4.0 or NT 3.51 server: Samba can now replace the logon services
-provided by an NT server, to a limited and experimental degree (for example,
-running "User Manager for Domains" will not provide you with access to
-a domain created by a Samba Server).
-</para>
-
-<para>
-With Win95, the help of an NT server can be enlisted, both for profile storage
-and for user authentication. For details on user authentication, see
-security_level.txt. For details on profile storage, see below.
-</para>
-
-<para>
-Using these features you can make your clients verify their logon via
-the Samba server; make clients run a batch file when they logon to
-the network and download their preferences, desktop and start menu.
-</para>
-
-<para>
-Before launching into the configuration instructions, it is worthwhile looking
-at how a Win9X client performs a logon:
-</para>
-
-<orderedlist>
-<listitem>
- <para>
- The client broadcasts (to the IP broadcast address of the subnet it is in)
- a NetLogon request. This is sent to the NetBIOS address DOMAIN<00> at the
- NetBIOS layer. The client chooses the first response it receives, which
- contains the NetBIOS name of the logon server to use in the format of
- \\SERVER.
- </para>
-</listitem>
-
-<listitem>
- <para>
- The client then connects to that server, logs on (does an SMBsessetupX) and
- then connects to the IPC$ share (using an SMBtconX).
- </para>
-</listitem>
-
-<listitem>
- <para>
- The client then does a NetWkstaUserLogon request, which retrieves the name
- of the user's logon script.
- </para>
-</listitem>
-
-<listitem>
- <para>
- The client then connects to the NetLogon share and searches for this
- and if it is found and can be read, is retrieved and executed by the client.
- After this, the client disconnects from the NetLogon share.
- </para>
-</listitem>
-
-<listitem>
- <para>
- The client then sends a NetUserGetInfo request to the server, to retrieve
- the user's home share, which is used to search for profiles. Since the
- response to the NetUserGetInfo request does not contain much more
- the user's home share, profiles for Win9X clients MUST reside in the user
- home directory.
- </para>
-</listitem>
-
-<listitem>
- <para>
- The client then connects to the user's home share and searches for the
- user's profile. As it turns out, you can specify the user's home share as
- a sharename and path. For example, \\server\fred\.profile.
- If the profiles are found, they are implemented.
- </para>
-</listitem>
-
-<listitem>
- <para>
- The client then disconnects from the user's home share, and reconnects to
- the NetLogon share and looks for CONFIG.POL, the policies file. If this is
- found, it is read and implemented.
- </para>
-</listitem>
-</orderedlist>
-
-
-<sect2>
-<title>Configuration Instructions: Network Logons</title>
-
-<para>
-To use domain logons and profiles you need to do the following:
-</para>
-
-
-<orderedlist>
-<listitem>
- <para>
- Create a share called [netlogon] in your smb.conf. This share should
- be readable by all users, and probably should not be writeable. This
- share will hold your network logon scripts, and the CONFIG.POL file
- (Note: for details on the CONFIG.POL file, how to use it, what it is,
- refer to the Microsoft Windows NT Administration documentation.
- The format of these files is not known, so you will need to use
- Microsoft tools).
- </para>
-
- <para>
- For example I have used:
- </para>
-
- <para><programlisting>
-[netlogon]
- path = /data/dos/netlogon
- writeable = no
- guest ok = no
-</programlisting></para>
-
- <para>
- Note that it is important that this share is not writeable by ordinary
- users, in a secure environment: ordinary users should not be allowed
- to modify or add files that another user's computer would then download
- when they log in.
- </para>
-</listitem>
-
-
-
-<listitem>
- <para>
- in the [global] section of smb.conf set the following:
- </para>
-
- <para><programlisting>
-domain logons = yes
-logon script = %U.bat
- </programlisting></para>
-
- <para>
- The choice of batch file is, of course, up to you. The above would
- give each user a separate batch file as the %U will be changed to
- their username automatically. The other standard % macros may also be
- used. You can make the batch files come from a subdirectory by using
- something like:
- </para>
-
- <para><programlisting>
-logon script = scripts\%U.bat
- </programlisting></para>
-</listitem>
-
-<listitem>
- <para>
- create the batch files to be run when the user logs in. If the batch
- file doesn't exist then no batch file will be run.
- </para>
-
- <para>
- In the batch files you need to be careful to use DOS style cr/lf line
- endings. If you don't then DOS may get confused. I suggest you use a
- DOS editor to remotely edit the files if you don't know how to produce
- DOS style files under unix.
- </para>
-</listitem>
-
-
-<listitem>
- <para>
- Use smbclient with the -U option for some users to make sure that
- the \\server\NETLOGON share is available, the batch files are
- visible and they are readable by the users.
- </para>
-</listitem>
-
-<listitem>
- <para>
- you will probably find that your clients automatically mount the
- \\SERVER\NETLOGON share as drive z: while logging in. You can put
- some useful programs there to execute from the batch files.
- </para>
-</listitem>
-</orderedlist>
-
-<warning>
-<title>security mode and master browsers</title>
-
-<para>
-There are a few comments to make in order to tie up some
-loose ends. There has been much debate over the issue of whether
-or not it is ok to configure Samba as a Domain Controller in security
-modes other than <constant>USER</constant>. The only security mode
-which will not work due to technical reasons is <constant>SHARE</constant>
-mode security. <constant>DOMAIN</constant> and <constant>SERVER</constant>
-mode security is really just a variation on SMB user level security.
-</para>
-
-<para>
-Actually, this issue is also closer tied to the debate on whether
-or not Samba must be the domain master browser for its workgroup
-when operating as a DC. While it may technically be possible
-to configure a server as such (after all, browsing and domain logons
-are two distinctly different functions), it is not a good idea to
-so. You should remember that the DC must register the DOMAIN#1b NetBIOS
-name. This is the name used by Windows clients to locate the DC.
-Windows clients do not distinguish between the DC and the DMB.
-For this reason, it is very wise to configure the Samba DC as the DMB.
-</para>
-
-<para>
-Now back to the issue of configuring a Samba DC to use a mode other
-than "security = user". If a Samba host is configured to use
-another SMB server or DC in order to validate user connection
-requests, then it is a fact that some other machine on the network
-(the "password server") knows more about user than the Samba host.
-99% of the time, this other host is a domain controller. Now
-in order to operate in domain mode security, the "workgroup" parameter
-must be set to the name of the Windows NT domain (which already
-has a domain controller, right?)
-</para>
-
-<para>
-Therefore configuring a Samba box as a DC for a domain that
-already by definition has a PDC is asking for trouble.
-Therefore, you should always configure the Samba DC to be the DMB
-for its domain.
-</para>
-</warning>
-
-</sect2>
-
-
-<sect2>
-<title>Configuration Instructions: Setting up Roaming User Profiles</title>
-
-<warning>
-<para>
-<emphasis>NOTE!</emphasis> Roaming profiles support is different
-for Win9X and WinNT.
-</para>
-</warning>
-
-<para>
-Before discussing how to configure roaming profiles, it is useful to see how
-Win9X and WinNT clients implement these features.
-</para>
-
-<para>
-Win9X clients send a NetUserGetInfo request to the server to get the user's
-profiles location. However, the response does not have room for a separate
-profiles location field, only the user's home share. This means that Win9X
-profiles are restricted to being in the user's home directory.
-</para>
-
-
-<para>
-WinNT clients send a NetSAMLogon RPC request, which contains many fields,
-including a separate field for the location of the user's profiles.
-This means that support for profiles is different for Win9X and WinNT.
-</para>
-
-
-
-<sect3>
-<title>Windows NT Configuration</title>
-
-<para>
-To support WinNT clients, inn the [global] section of smb.conf set the
-following (for example):
-</para>
-
-<para><programlisting>
-logon path = \\profileserver\profileshare\profilepath\%U\moreprofilepath
-</programlisting></para>
-
-<para>
-The default for this option is \\%N\%U\profile, namely
-\\sambaserver\username\profile. The \\N%\%U service is created
-automatically by the [homes] service.
-If you are using a samba server for the profiles, you _must_ make the
-share specified in the logon path browseable.
-</para>
-
-<note>
-<para>
-[lkcl 26aug96 - we have discovered a problem where Windows clients can
-maintain a connection to the [homes] share in between logins. The
-[homes] share must NOT therefore be used in a profile path.]
-</para>
-</note>
-
-</sect3>
-
-
-<sect3>
-<title>Windows 9X Configuration</title>
-
-<para>
-To support Win9X clients, you must use the "logon home" parameter. Samba has
-now been fixed so that "net use/home" now works as well, and it, too, relies
-on the "logon home" parameter.
-</para>
-
-<para>
-By using the logon home parameter, you are restricted to putting Win9X
-profiles in the user's home directory. But wait! There is a trick you
-can use. If you set the following in the [global] section of your
-smb.conf file:
-</para>
-
-<para><programlisting>
-logon home = \\%L\%U\.profiles
-</programlisting></para>
-
-<para>
-then your Win9X clients will dutifully put their clients in a subdirectory
-of your home directory called .profiles (thus making them hidden).
-</para>
-
-<para>
-Not only that, but 'net use/home' will also work, because of a feature in
-Win9X. It removes any directory stuff off the end of the home directory area
-and only uses the server and share portion. That is, it looks like you
-specified \\%L\%U for "logon home".
-</para>
-
-
-</sect3>
-
-
-<sect3>
-<title>Win9X and WinNT Configuration</title>
-
-<para>
-You can support profiles for both Win9X and WinNT clients by setting both the
-"logon home" and "logon path" parameters. For example:
-</para>
-
-<para><programlisting>
-logon home = \\%L\%U\.profiles
-logon path = \\%L\profiles\%U
-</programlisting></para>
-
-<note>
-<para>
-I have not checked what 'net use /home' does on NT when "logon home" is
-set as above.
-</para>
-</note>
-</sect3>
-
-
-
-<sect3>
-<title>Windows 9X Profile Setup</title>
-
-<para>
-When a user first logs in on Windows 9X, the file user.DAT is created,
-as are folders "Start Menu", "Desktop", "Programs" and "Nethood".
-These directories and their contents will be merged with the local
-versions stored in c:\windows\profiles\username on subsequent logins,
-taking the most recent from each. You will need to use the [global]
-options "preserve case = yes", "short case preserve = yes" and
-"case sensitive = no" in order to maintain capital letters in shortcuts
-in any of the profile folders.
-</para>
-
-
-<para>
-The user.DAT file contains all the user's preferences. If you wish to
-enforce a set of preferences, rename their user.DAT file to user.MAN,
-and deny them write access to this file.
-</para>
-
-<orderedlist>
-<listitem>
- <para>
- On the Windows 95 machine, go to Control Panel | Passwords and
- select the User Profiles tab. Select the required level of
- roaming preferences. Press OK, but do _not_ allow the computer
- to reboot.
- </para>
-</listitem>
-
-
-<listitem>
- <para>
- On the Windows 95 machine, go to Control Panel | Network |
- Client for Microsoft Networks | Preferences. Select 'Log on to
- NT Domain'. Then, ensure that the Primary Logon is 'Client for
- Microsoft Networks'. Press OK, and this time allow the computer
- to reboot.
- </para>
-</listitem>
-
-</orderedlist>
-
-<para>
-Under Windows 95, Profiles are downloaded from the Primary Logon.
-If you have the Primary Logon as 'Client for Novell Networks', then
-the profiles and logon script will be downloaded from your Novell
-Server. If you have the Primary Logon as 'Windows Logon', then the
-profiles will be loaded from the local machine - a bit against the
-concept of roaming profiles, if you ask me.
-</para>
-
-<para>
-You will now find that the Microsoft Networks Login box contains
-[user, password, domain] instead of just [user, password]. Type in
-the samba server's domain name (or any other domain known to exist,
-but bear in mind that the user will be authenticated against this
-domain and profiles downloaded from it, if that domain logon server
-supports it), user name and user's password.
-</para>
-
-<para>
-Once the user has been successfully validated, the Windows 95 machine
-will inform you that 'The user has not logged on before' and asks you
-if you wish to save the user's preferences? Select 'yes'.
-</para>
-
-<para>
-Once the Windows 95 client comes up with the desktop, you should be able
-to examine the contents of the directory specified in the "logon path"
-on the samba server and verify that the "Desktop", "Start Menu",
-"Programs" and "Nethood" folders have been created.
-</para>
-
-<para>
-These folders will be cached locally on the client, and updated when
-the user logs off (if you haven't made them read-only by then :-).
-You will find that if the user creates further folders or short-cuts,
-that the client will merge the profile contents downloaded with the
-contents of the profile directory already on the local client, taking
-the newest folders and short-cuts from each set.
-</para>
-
-<para>
-If you have made the folders / files read-only on the samba server,
-then you will get errors from the w95 machine on logon and logout, as
-it attempts to merge the local and the remote profile. Basically, if
-you have any errors reported by the w95 machine, check the unix file
-permissions and ownership rights on the profile directory contents,
-on the samba server.
-</para>
-
-<para>
-If you have problems creating user profiles, you can reset the user's
-local desktop cache, as shown below. When this user then next logs in,
-they will be told that they are logging in "for the first time".
-</para>
-
-<orderedlist>
-<listitem>
- <para>
- instead of logging in under the [user, password, domain] dialog,
- press escape.
- </para>
-</listitem>
-
-<listitem>
- <para>
- run the regedit.exe program, and look in:
- </para>
-
- <para>
- HKEY_LOCAL_MACHINE\Windows\CurrentVersion\ProfileList
- </para>
-
- <para>
- you will find an entry, for each user, of ProfilePath. Note the
- contents of this key (likely to be c:\windows\profiles\username),
- then delete the key ProfilePath for the required user.
- </para>
-
- <para>
- [Exit the registry editor].
- </para>
-</listitem>
-
-<listitem>
- <para>
- <emphasis>WARNING</emphasis> - before deleting the contents of the
- directory listed in
- the ProfilePath (this is likely to be c:\windows\profiles\username),
- ask them if they have any important files stored on their desktop
- or in their start menu. delete the contents of the directory
- ProfilePath (making a backup if any of the files are needed).
- </para>
-
- <para>
- This will have the effect of removing the local (read-only hidden
- system file) user.DAT in their profile directory, as well as the
- local "desktop", "nethood", "start menu" and "programs" folders.
- </para>
-</listitem>
-
-<listitem>
- <para>
- search for the user's .PWL password-caching file in the c:\windows
- directory, and delete it.
- </para>
-</listitem>
-
-
-<listitem>
- <para>
- log off the windows 95 client.
- </para>
-</listitem>
-
-<listitem>
- <para>
- check the contents of the profile path (see "logon path" described
- above), and delete the user.DAT or user.MAN file for the user,
- making a backup if required.
- </para>
-</listitem>
-
-</orderedlist>
-
-<para>
-If all else fails, increase samba's debug log levels to between 3 and 10,
-and / or run a packet trace program such as tcpdump or netmon.exe, and
-look for any error reports.
-</para>
-
-<para>
-If you have access to an NT server, then first set up roaming profiles
-and / or netlogons on the NT server. Make a packet trace, or examine
-the example packet traces provided with NT server, and see what the
-differences are with the equivalent samba trace.
-</para>
-
-</sect3>
-
-
-<sect3>
-<title>Windows NT Workstation 4.0</title>
-
-<para>
-When a user first logs in to a Windows NT Workstation, the profile
-NTuser.DAT is created. The profile location can be now specified
-through the "logon path" parameter.
-</para>
-
-<note>
-<para>
-[lkcl 10aug97 - i tried setting the path to
-\\samba-server\homes\profile, and discovered that this fails because
-a background process maintains the connection to the [homes] share
-which does _not_ close down in between user logins. you have to
-have \\samba-server\%L\profile, where user is the username created
-from the [homes] share].
-</para>
-</note>
-
-<para>
-There is a parameter that is now available for use with NT Profiles:
-"logon drive". This should be set to "h:" or any other drive, and
-should be used in conjunction with the new "logon home" parameter.
-</para>
-
-<para>
-The entry for the NT 4.0 profile is a _directory_ not a file. The NT
-help on profiles mentions that a directory is also created with a .PDS
-extension. The user, while logging in, must have write permission to
-create the full profile path (and the folder with the .PDS extension)
-[lkcl 10aug97 - i found that the creation of the .PDS directory failed,
-and had to create these manually for each user, with a shell script.
-also, i presume, but have not tested, that the full profile path must
-be browseable just as it is for w95, due to the manner in which they
-attempt to create the full profile path: test existence of each path
-component; create path component].
-</para>
-
-<para>
-In the profile directory, NT creates more folders than 95. It creates
-"Application Data" and others, as well as "Desktop", "Nethood",
-"Start Menu" and "Programs". The profile itself is stored in a file
-NTuser.DAT. Nothing appears to be stored in the .PDS directory, and
-its purpose is currently unknown.
-</para>
-
-<para>
-You can use the System Control Panel to copy a local profile onto
-a samba server (see NT Help on profiles: it is also capable of firing
-up the correct location in the System Control Panel for you). The
-NT Help file also mentions that renaming NTuser.DAT to NTuser.MAN
-turns a profile into a mandatory one.
-</para>
-
-<note>
-<para>
-[lkcl 10aug97 - i notice that NT Workstation tells me that it is
-downloading a profile from a slow link. whether this is actually the
-case, or whether there is some configuration issue, as yet unknown,
-that makes NT Workstation _think_ that the link is a slow one is a
-matter to be resolved].
-</para>
-
-<para>
-[lkcl 20aug97 - after samba digest correspondence, one user found, and
-another confirmed, that profiles cannot be loaded from a samba server
-unless "security = user" and "encrypt passwords = yes" (see the file
-ENCRYPTION.txt) or "security = server" and "password server = ip.address.
-of.yourNTserver" are used. Either of these options will allow the NT
-workstation to access the samba server using LAN manager encrypted
-passwords, without the user intervention normally required by NT
-workstation for clear-text passwords].
-</para>
<para>
-[lkcl 25aug97 - more comments received about NT profiles: the case of
-the profile _matters_. the file _must_ be called NTuser.DAT or, for
-a mandatory profile, NTuser.MAN].
+<emphasis>How do I get off the mailing lists ?</emphasis>
</para>
-</note>
-</sect3>
+ <para>To have your name removed from a samba mailing list, go to the
+ same place you went to to get on it. Go to <ulink url=
+ "http://lists.samba.org/">http://lists.samba.org</ulink>, click
+ on your nearest mirror and then click on <command>Support</> and
+ then click on <command> Samba related mailing lists</>. Or perhaps see
+ <ulink url="http://lists.samba.org/mailman/roster/samba-ntdom">here</ulink></para>
+ <para>
+ Please don't post messages to the list asking to be removed, you will just
+ be referred to the above address (unless that process failed in some way...)
+ </para>
+</sect2>
+</sect1>
-<sect3>
-<title>Windows NT Server</title>
-
-<para>
-There is nothing to stop you specifying any path that you like for the
-location of users' profiles. Therefore, you could specify that the
-profile be stored on a samba server, or any other SMB server, as long as
-that SMB server supports encrypted passwords.
-</para>
-
-</sect3>
-
-
-<sect3>
-<title>Sharing Profiles between W95 and NT Workstation 4.0</title>
-
-<warning>
-<title>Potentially outdated or incorrect material follows</title>
-<para>
-I think this is all bogus, but have not deleted it. (Richard Sharpe)
-</para>
-</warning>
-
-<para>
-The default logon path is \\%N\U%. NT Workstation will attempt to create
-a directory "\\samba-server\username.PDS" if you specify the logon path
-as "\\samba-server\username" with the NT User Manager. Therefore, you
-will need to specify (for example) "\\samba-server\username\profile".
-NT 4.0 will attempt to create "\\samba-server\username\profile.PDS", which
-is more likely to succeed.
-</para>
-
-<para>
-If you then want to share the same Start Menu / Desktop with W95, you will
-need to specify "logon path = \\samba-server\username\profile" [lkcl 10aug97
-this has its drawbacks: i created a shortcut to telnet.exe, which attempts
-to run from the c:\winnt\system32 directory. this directory is obviously
-unlikely to exist on a Win95-only host].
-</para>
-
-<para>
-
-If you have this set up correctly, you will find separate user.DAT and
-NTuser.DAT files in the same profile directory.
-</para>
-
-<note>
-<para>
-[lkcl 25aug97 - there are some issues to resolve with downloading of
-NT profiles, probably to do with time/date stamps. i have found that
-NTuser.DAT is never updated on the workstation after the first time that
-it is copied to the local workstation profile directory. this is in
-contrast to w95, where it _does_ transfer / update profiles correctly].
-</para>
-</note>
-
-</sect3>
-</sect2>
-</sect1>
<!-- **********************************************************
@@ -1747,14 +836,10 @@ contrast to w95, where it _does_ transfer / update profiles correctly].
DOMAIN_CONTROL.txt : Windows NT Domain Control & Samba
</title>
-<warning>
- <title>Possibly Outdated Material</title>
-
- <para>
- This appendix was originally authored by John H Terpstra of
- the Samba Team and is included here for posterity.
- </para>
-</warning>
+<para>
+This appendix was originally authored by John H Terpstra of the Samba Team
+and is included here for posterity.
+</para>
<para>
@@ -1773,8 +858,13 @@ Windows NT SAM.
Windows NT Server can be installed as either a plain file and print server
(WORKGROUP workstation or server) or as a server that participates in Domain
Control (DOMAIN member, Primary Domain controller or Backup Domain controller).
+</para>
+
+<para>
The same is true for OS/2 Warp Server, Digital Pathworks and other similar
products, all of which can participate in Domain Control along with Windows NT.
+However only those servers which have licensed Windows NT code in them can be
+a primary Domain Controller (eg Windows NT Server, Advanced Server for Unix.)
</para>
<para>
@@ -1843,7 +933,7 @@ plain Servers.
<para>
The User database is called the SAM (Security Access Manager) database and
is used for all user authentication as well as for authentication of inter-
-process authentication (i.e. to ensure that the service action a user has
+process authentication (ie: to ensure that the service action a user has
requested is permitted within the limits of that user's privileges).
</para>
@@ -1858,7 +948,7 @@ to Samba systems.
<para>
Windows for Workgroups, Windows 95, and Windows NT Workstations and Servers
can participate in a Domain security system that is controlled by Windows NT
-servers that have been correctly configured. Almost every domain will have
+servers that have been correctly configured. At most every domain will have
ONE Primary Domain Controller (PDC). It is desirable that each domain will
have at least one Backup Domain Controller (BDC).
</para>
diff --git a/docs/docbook/projdoc/UNIX_INSTALL.sgml b/docs/docbook/projdoc/UNIX_INSTALL.sgml
index 91b1602312e..41eb7a478cc 100644
--- a/docs/docbook/projdoc/UNIX_INSTALL.sgml
+++ b/docs/docbook/projdoc/UNIX_INSTALL.sgml
@@ -30,7 +30,7 @@
</userinput></para>
<para>first to see what special options you can enable.
- Then executing</para>
+ Then exectuting</para>
<para><prompt>root# </prompt><userinput>make</userinput></para>
@@ -96,7 +96,7 @@
<para>which would allow connections by anyone with an
account on the server, using either their login name or
"homes" as the service name. (Note that I also set the
- workgroup that Samba is part of. See BROWSING.txt for details)</para>
+ workgroup that Samba is part of. See BROWSING.txt for defails)</para>
<para>Note that <command>make install</command> will not install
a <filename>smb.conf</filename> file. You need to create it
@@ -120,7 +120,7 @@
not it will give an error message.</para>
<para>Make sure it runs OK and that the services look
- reasonable before proceeding. </para>
+ resonable before proceeding. </para>
</sect1>
@@ -174,14 +174,14 @@
<para>NOTE: Some unixes already have entries like netbios_ns
(note the underscore) in <filename>/etc/services</filename>.
You must either edit <filename>/etc/services</filename> or
- <filename>/etc/inetd.conf</filename> to make them consistent.</para>
+ <filename>/etc/inetd.conf</filename> to make them consistant.</para>
<para>NOTE: On many systems you may need to use the
"interfaces" option in smb.conf to specify the IP address
and netmask of your interfaces. Run <command>ifconfig</command>
as root if you don't know what the broadcast is for your
net. <command>nmbd</command> tries to determine it at run
- time, but fails on some unixes. See the section on "testing nmbd"
+ time, but fails on somunixes. See the section on "testing nmbd"
for a method of finding if you need to do this.</para>
<para>!!!WARNING!!! Many unixes only accept around 5
@@ -305,7 +305,7 @@
<sect2>
<title>Diagnosing Problems</title>
- <para>If you have installation problems then go to
+ <para>If you have instalation problems then go to
<filename>DIAGNOSIS.txt</filename> to try to find the
problem.</para>
</sect2>
@@ -414,7 +414,7 @@
are set by an application when it opens a file to determine
what types of access should be allowed simultaneously with
its open. A client may ask for DENY_NONE, DENY_READ, DENY_WRITE
- or DENY_ALL. There are also special compatibility modes called
+ or DENY_ALL. There are also special compatability modes called
DENY_FCB and DENY_DOS.</para>
<para>You can disable share modes using "share modes = no".
@@ -437,7 +437,7 @@
<para>If you have problems using filenames with accented
characters in them (like the German, French or Scandinavian
- character sets) then I recommend you look at the "valid chars"
+ character sets) then I recommmend you look at the "valid chars"
option in smb.conf and also take a look at the validchars
package in the examples directory.</para>
</sect2>
diff --git a/docs/docbook/projdoc/printer_driver2.sgml b/docs/docbook/projdoc/printer_driver2.sgml
index 8bc671ce7d8..7cdbcd8d4ee 100644
--- a/docs/docbook/projdoc/printer_driver2.sgml
+++ b/docs/docbook/projdoc/printer_driver2.sgml
@@ -13,408 +13,244 @@
</author>
- <pubdate> (3 May 2001) </pubdate>
+ <pubdate>5 Mar 2001</pubdate>
</chapterinfo>
<title>Printing Support in Samba 2.2.x</title>
<sect1>
-<title>Introduction</title>
+ <title>Introduction</title>
-<para>Beginning with the 2.2.0 release, Samba supports
-the native Windows NT printing mechanisms implemented via
-MS-RPC (i.e. the SPOOLSS named pipe). Previous versions of
-Samba only supported LanMan printing calls.</para>
+ <para>Beginning with the 2.2.0 release, Samba supports
+ the native Windows NT printing mechanisms implemented via
+ MS-RPC (i.e. the SPOOLSS named pipe). Previous versions of
+ Samba only supported LanMan printing calls.</para>
-<para>The additional functionality provided by the new
-SPOOLSS support includes:</para>
+ <para>The additional functionality provided by the new
+ SPOOLSS support includes:</para>
-<itemizedlist>
- <listitem><para>Support for downloading printer driver
- files to Windows 95/98/NT/2000 clients upon demand.
- </para></listitem>
-
- <listitem><para>Uploading of printer drivers via the
- Windows NT Add Printer Wizard (APW) or the
- Imprints tool set (refer to <ulink
- url="http://imprints.sourceforge.net">http://imprints.sourceforge.net</ulink>).
- </para></listitem>
+ <itemizedlist>
+ <listitem><para>Support for downloading printer driver
+ files to Windows 95/98/NT/2000 clients upon demand.
+ </para></listitem>
- <listitem><para>Support for the native MS-RPC printing
- calls such as StartDocPrinter, EnumJobs(), etc... (See
- the MSDN documentation at <ulink
- url="http://msdn.microsoft.com/">http://msdn.microsoft.com/</ulink>
- for more information on the Win32 printing API)
- </para></listitem>
+ <listitem><para>Uploading of printer drivers via the
+ Windows NT Add Printer Wizard (APW) or the <ulink
+ url="http://imprints.sourceforge.net">Imprints tool set
+ </ulink></para></listitem>
- <listitem><para>Support for NT Access Control Lists (ACL)
- on printer objects</para></listitem>
-
- <listitem><para>Improved support for printer queue manipulation
- through the use of an internal databases for spooled job
- information</para></listitem>
-</itemizedlist>
-
-<para>
-There has been some initial confusion about what all this means
-and whether or not it is a requirement for printer drivers to be
-installed on a Samba host in order to support printing from Windows
-clients. A bug existed in Samba 2.2.0 which made Windows NT/2000 clients
-require that the Samba server possess a valid driver for the printer.
-This is fixed in Samba 2.2.1 and once again, Windows NT/2000 clients
-can use the local APW for installing drivers to be used with a Samba
-served printer. This is the same behavior exhibited by Windows 9x clients.
-As a side note, Samba does not use these drivers in any way to process
-spooled files. They are utilized entirely by the clients.
-</para>
-
-<para>
-The following MS KB article, may be of some help if you are dealing with
-Windows 2000 clients: <emphasis>How to Add Printers with No User
-Interaction in Windows 2000</emphasis>
-</para>
-
-<para>
-<ulink url="http://support.microsoft.com/support/kb/articles/Q189/1/05.ASP">http://support.microsoft.com/support/kb/articles/Q189/1/05.ASP</ulink>
-</para>
+ <listitem><para>Support for the native MS-RPC printing
+ calls such as StartDocPrinter, EnumJobs(), etc... (See
+ the <ulink url="http://msdn.microsoft.com/">MSDN documentation
+ </ulink> for more information on the Win32 printing API)
+ </para></listitem>
+
+ <listitem><para>Support for NT Access Control Lists (ACL)
+ on printer objects</para></listitem>
+
+ <listitem><para>Improved support for printer queue manipulation
+ through the use of an internal databases for spooled job
+ information</para></listitem>
+ </itemizedlist>
</sect1>
<sect1>
-<title>Configuration</title>
-
-<warning>
-<title>[print$] vs. [printer$]</title>
-
-<para>
-Previous versions of Samba recommended using a share named [printer$].
-This name was taken from the printer$ service created by Windows 9x
-clients when a printer was shared. Windows 9x printer servers always have
-a printer$ service which provides read-only access via no
-password in order to support printer driver downloads.
-</para>
+ <title>Configuration</title>
+
+ <para>In order to support the uploading of printer driver
+ files, you must first configure a file share named [print$].
+ The name of this share is hard coded in Samba's internals so
+ the name is very important (print$ is the service used by
+ Windows NT print servers to provide support for printer driver
+ download).</para>
+
+ <warning>
+ <para>Previous versions of Samba recommended using
+ a share named [printer$]. This name was taken from the
+ printer$ service created by Windows 9x clients when a
+ printer was shared. Windows 9x printer servers always have
+ a printer$ service which provides read-only access via no
+ password in order to support printer driver downloads.</para>
-<para>
-However, the initial implementation allowed for a
-parameter named <parameter>printer driver location</parameter>
-to be used on a per share basis to specify the location of
-the driver files associated with that printer. Another
-parameter named <parameter>printer driver</parameter> provided
-a means of defining the printer driver name to be sent to
-the client.
-</para>
-
-<para>
-These parameters, including <parameter>printer driver
-file</parameter> parameter, are being depreciated and should not
-be used in new installations. For more information on this change,
-you should refer to the <link linkend="MIGRATION">Migration section</link>
-of this document.
-</para>
-</warning>
-
-<sect2>
-<title>Creating [print$]</title>
-
-<para>
-In order to support the uploading of printer driver
-files, you must first configure a file share named [print$].
-The name of this share is hard coded in Samba's internals so
-the name is very important (print$ is the service used by
-Windows NT print servers to provide support for printer driver
-download).
-</para>
-
-<para>You should modify the server's smb.conf file to add the global
-parameters and to create the
-following file share (of course, some of the parameter values,
-such as 'path' are arbitrary and should be replaced with
-appropriate values for your site):</para>
-
-<para><programlisting>
-[global]
- ; members of the ntadmin group should be able
- ; to add drivers and set printer properties
- ; root is implicitly a 'printer admin'
- printer admin = @ntadmin
+ <para>However, the initial implementation allowed for a
+ parameter named <parameter>printer driver location</parameter>
+ to be used on a per share basis to specify the location of
+ the driver files associated with that printer. Another
+ parameter named <parameter>printer driver</parameter> provided
+ a means of defining the printer driver name to be sent to
+ the client.</para>
+
+ <para>These parameters, including <parameter>printer driver
+ file</parameter> parameter, are being depreciated and should not
+ be used in new installations. For more information on this change,
+ you should refer to the <link linkend="MIGRATION">Migration section
+ </link>of this document.</para>
+ </warning>
+
+ <para>You should modify the server's smb.conf file to create the
+ following file share (of course, some of the parameter values,
+ such as 'path' are arbitrary and should be replaced with
+ appropriate values for your site):</para>
+ <para><programlisting>
[print$]
- path = /usr/local/samba/printers
- guest ok = yes
- browseable = yes
- read only = yes
- ; since this share is configured as read only, then we need
- ; a 'write list'. Check the file system permissions to make
- ; sure this account can copy files to the share. If this
- ; is setup to a non-root account, then it should also exist
- ; as a 'printer admin'
- write list = @ntadmin,root
-</programlisting></para>
+ path = /usr/local/samba/printers
+ guest ok = yes
+ browseable = yes
+ read only = yes
+ write list = ntadmin
+ </programlisting></para>
-<para>The <ulink url="smb.conf.5.html#WRITELIST"><parameter>
-write list</parameter></ulink> is used to allow administrative
-level user accounts to have write access in order to update files
-on the share. See the <ulink url="smb./conf.5.html">smb.conf(5)
-man page</ulink> for more information on configuring file shares.</para>
+ <para>The <ulink url="smb.conf.5.html#WRITELIST"><parameter>
+ write list</parameter></ulink> is used to allow administrative
+ level user accounts to have write access in order to update files
+ on the share. See the <ulink url="smb./conf.5.html">
+ smb.conf(5) man page</ulink> for more information on
+ configuring file shares.</para>
-<para>The requirement for <ulink url="smb.conf.5.html#GUESTOK"><command>guest
-ok = yes</command></ulink> depends upon how your
-site is configured. If users will be guaranteed to have
-an account on the Samba host, then this is a non-issue.</para>
-
-<note>
-<title>Author's Note</title>
-
-<para>
-The non-issue is that if all your Windows NT users are guaranteed to be
-authenticated by the Samba server (such as a domain member server and the NT
-user has already been validated by the Domain Controller in
-order to logon to the Windows NT console), then guest access
-is not necessary. Of course, in a workgroup environment where
-you just want to be able to print without worrying about
-silly accounts and security, then configure the share for
-guest access. You'll probably want to add <ulink
-url="smb.conf.5.html#MAPTOGUEST"><command>map to guest = Bad User
-</command></ulink> in the [global] section as well. Make sure
-you understand what this parameter does before using it
-though. --jerry
-</para>
-</note>
-
-<para>In order for a Windows NT print server to support
-the downloading of driver files by multiple client architectures,
-it must create subdirectories within the [print$] service
-which correspond to each of the supported client architectures.
-Samba follows this model as well.</para>
-
-<para>Next create the directory tree below the [print$] share
-for each architecture you wish to support.</para>
-
-<para><programlisting>
-[print$]-----
- |-W32X86 ; "Windows NT x86"
- |-WIN40 ; "Windows 95/98"
- |-W32ALPHA ; "Windows NT Alpha_AXP"
- |-W32MIPS ; "Windows NT R4000"
- |-W32PPC ; "Windows NT PowerPC"
-</programlisting></para>
-
-<warning>
-<title>ATTENTION! REQUIRED PERMISSIONS</title>
+ <para>The requirement for <ulink url="smb.conf.5.html#GUESTOK"><command>
+ guest ok = yes</command></ulink> depends upon how your
+ site is configured. If users will be guaranteed to have
+ an account on the Samba host, then this is a non-issue.</para>
-<para>
-In order to currently add a new driver to you Samba host,
-one of two conditions must hold true:
-</para>
+ <para><emphasis>author's note: </emphasis>The non-issue is that
+ if all your Windows NT users are guarenteed to be authenticated
+ by the Samba server (such as a domain member server and the NT
+ user has already been validated by the Domain Controller in
+ order to logon to the Windows NT console), then guest access
+ is not necessary. Of course, in a workgroup environment where
+ you just want to be able to print without worrying about
+ silly accounts and security, then configure the share for
+ guest access. You'll probably want to add <ulink
+ url="smb.conf.5.html#MAPTOGUEST"><command>map to guest = Bad User
+ </command></ulink> in the [global] section as well. Make sure
+ you understand what this parameter does before using it
+ though. --jerry]</para>
+
+ <para>In order for a Windows NT print server to support
+ the downloading of driver files by multiple client architectures,
+ it must create subdirectories within the [print$] service
+ which correspond to each of the supported client architectures.
+ Samba follows this model as well.</para>
+
+ <para>Next create the directory tree below the [print$] share
+ for each architecture you wish to support.</para>
+
+ <para><programlisting>
+ [print$]-----
+ |-W32X86 ; "Windows NT x86"
+ |-WIN40 ; "Windows 95/98"
+ |-W32ALPHA ; "Windows NT Alpha_AXP"
+ |-W32MIPS ; "Windows NT R4000"
+ |-W32PPC ; "Windows NT PowerPC"
+ </programlisting></para>
+
+ <warning>
+ <para><emphasis>ATTENTION! REQUIRED PERMISSIONS</emphasis></para>
+
+ <para>In order to currently add a new driver to you Samba host,
+ one of two conditions must hold true:</para>
-<itemizedlist>
- <listitem><para>The account used to connect to the Samba host
- must have a uid of 0 (i.e. a root account)</para></listitem>
-
- <listitem><para>The account used to connect to the Samba host
- must be a member of the <ulink
- url="smb.conf.5.html#PRINTERADMIN"><parameter>printer
- admin</parameter></ulink> list.</para></listitem>
-</itemizedlist>
-
-<para>
-Of course, the connected account must still possess access
-to add files to the subdirectories beneath [print$]. Remember
-that all file shares are set to 'read only' by default.
-</para>
-</warning>
-
-
-<para>
-Once you have created the required [print$] service and
-associated subdirectories, simply log onto the Samba server using
-a root (or <parameter>printer admin</parameter>) account
-from a Windows NT 4.0 client. Navigate to the "Printers" folder
-on the Samba server. You should see an initial listing of printers
-that matches the printer shares defined on your Samba host.
-</para>
-</sect2>
-
-<sect2>
-<title>Setting Drivers for Existing Printers</title>
-
-<para>The initial listing of printers in the Samba host's
-Printers folder will have no real printer driver assigned
-to them. By default, in Samba 2.2.0 this driver name was set to
-<emphasis>NO PRINTER DRIVER AVAILABLE FOR THIS PRINTER</emphasis>.
-Later versions changed this to a NULL string to allow the use
-tof the local Add Printer Wizard on NT/2000 clients.
-Attempting to view the printer properties for a printer
-which has this default driver assigned will result in
-the error message:</para>
-
-<para>
-<emphasis>Device settings cannot be displayed. The driver
-for the specified printer is not installed, only spooler
-properties will be displayed. Do you want to install the
-driver now?</emphasis>
-</para>
-
-<para>
-Click "No" in the error dialog and you will be presented with
-the printer properties window. The way assign a driver to a
-printer is to either
-</para>
+ <itemizedlist>
+ <listitem><para>The account used to connect to the Samba host
+ must have a uid of 0 (i.e. a root account)</para></listitem>
+
+ <listitem><para>The account used to connect to the Samba host
+ must be a member of the <ulink url="smb.conf.5.html"><parameter>
+ printer admin</parameter></ulink> list.</para></listitem>
+ </itemizedlist>
+
+ <para>Of course, the connected account must still possess access
+ to add files to the subdirectories beneath [print$].</para>
+ </warning>
+
+
+ <para>Once you have created the required [print$] service and
+ associated subdirectories, simply log onto the Samba server using
+ a root (or <parameter>printer admin</parameter>) account
+ from a Windows NT 4.0 client. Navigate to the "Printers" folder
+ on the Samba server. You should see an initial listing of printers
+ that matches the printer shares defined on your Samba host.</para>
+
+ <para>The initial listing of printers in the Samba host's
+ Printers folder will have no printer driver assigned to them.
+ The way assign a driver to a printer is to view the Properties
+ of the printer and either</para>
-<itemizedlist>
- <listitem><para>Use the "New Driver..." button to install
- a new printer driver, or</para></listitem>
+ <itemizedlist>
+ <listitem><para>Use the "New Driver..." button to install
+ a new printer driver, or</para></listitem>
+
+ <listitem><para>Select a driver from the popup list of
+ installed drivers. Initially this list will be empty.</para>
+ </listitem>
+ </itemizedlist>
- <listitem><para>Select a driver from the popup list of
- installed drivers. Initially this list will be empty.</para>
- </listitem>
-</itemizedlist>
+ <para>If you wish to install printer drivers for client
+ operating systems other than "Windows NT x86", you will need
+ to use the "Sharing" tab of the printer properties dialog.</para>
+
+ <para>Assuming you have connected with a root account, you
+ will also be able modify other printer properties such as
+ ACLs and device settings using this dialog box.</para>
-<para>If you wish to install printer drivers for client
-operating systems other than "Windows NT x86", you will need
-to use the "Sharing" tab of the printer properties dialog.</para>
-
-<para>Assuming you have connected with a root account, you
-will also be able modify other printer properties such as
-ACLs and device settings using this dialog box.</para>
-
-<para>A few closing comments for this section, it is possible
-on a Windows NT print server to have printers
-listed in the Printers folder which are not shared. Samba does
-not make this distinction. By definition, the only printers of
-which Samba is aware are those which are specified as shares in
-<filename>smb.conf</filename>.</para>
+ <para>A few closing comments for this section, it is possible
+ on a Windows NT print server to have printers
+ listed in the Printers folder which are not shared. Samba does
+ not make this distinction. By definition, the only printers of
+ which Samba is aware are those which are specified as shares in
+ <filename>smb.conf</filename>.</para>
-<para>Another interesting side note is that Windows NT clients do
-not use the SMB printer share, but rather can print directly
-to any printer on another Windows NT host using MS-RPC. This
-of course assumes that the printing client has the necessary
-privileges on the remote host serving the printer. The default
-permissions assigned by Windows NT to a printer gives the "Print"
-permissions to the "Everyone" well-known group.
-</para>
-
-</sect2>
-
-
-<sect2>
-<title>Support a large number of printers</title>
+ <para>Another interesting side note is that Windows NT clients do
+ not use the SMB printer share, but rather can print directly
+ to any printer on another Windows NT host using MS-RPC. This
+ of course assumes that the printing client has the necessary
+ privileges on the remote host serving the printer. The default
+ permissions assigned by Windows NT to a printer gives the "Print"
+ permissions to the "Everyone" well-known group.</para>
+
+ <sect2>
+ <title>Support a large number of printers</title>
-<para>One issue that has arisen during the development
-phase of Samba 2.2 is the need to support driver downloads for
-100's of printers. Using the Windows NT APW is somewhat
-awkward to say the list. If more than one printer are using the
-same driver, the <ulink url="rpcclient.1.html"><command>rpcclient's
-setdriver command</command></ulink> can be used to set the driver
-associated with an installed driver. The following is example
-of how this could be accomplished:</para>
+ <para>One issue that has arisen during the development
+ phase of Samba 2.2 is the need to support driver downloads for
+ 100's of printers. Using the Windows NT APW is somewhat
+ awkward to say the list. If more than one printer are using the
+ same driver, the <ulink url="rpcclient.1.html"><command>rpcclient's
+ setdriver command</command></ulink> can be used to set the driver
+ associated with an installed driver. The following is example
+ of how this could be accomplished:</para>
-<para><programlisting>
-<prompt>$ </prompt>rpcclient pogo -U root%secret -c "enumdrivers"
+ <para><programlisting>
+ <prompt>$ </prompt>rpcclient pogo -U root%secret -c "enumdrivers"
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
[Windows NT x86]
Printer Driver Info 1:
- Driver Name: [HP LaserJet 4000 Series PS]
+ Driver Name: [HP LaserJet 4000 Series PS]
Printer Driver Info 1:
- Driver Name: [HP LaserJet 2100 Series PS]
+ Driver Name: [HP LaserJet 2100 Series PS]
Printer Driver Info 1:
- Driver Name: [HP LaserJet 4Si/4SiMX PS]
+ Driver Name: [HP LaserJet 4Si/4SiMX PS]
-<prompt>$ </prompt>rpcclient pogo -U root%secret -c "enumprinters"
+ <prompt>$ </prompt>rpcclient pogo -U root%secret -c "enumprinters"
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
- flags:[0x800000]
- name:[\\POGO\hp-print]
- description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
- comment:[]
+ flags:[0x800000]
+ name:[\\POGO\hp-print]
+ description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
+ comment:[]
-<prompt>$ </prompt>rpcclient pogo -U root%secret \
-<prompt>&gt; </prompt> -c "setdriver hp-print \"HP LaserJet 4000 Series PS\""
+ <prompt>$ </prompt>rpcclient pogo -U root%bleaK.er \
+ <prompt>&gt; </prompt> -c "setdriver hp-print \"HP LaserJet 4000 Series PS\""
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
-Successfully set hp-print to driver HP LaserJet 4000 Series PS.
-</programlisting></para>
-</sect2>
-
-
-
-<sect2>
-<title>Adding New Printers via the Windows NT APW</title>
-
-<para>
-By default, Samba offers all printer shares defined in <filename>smb.conf</filename>
-in the "Printers..." folder. Also existing in this folder is the Windows NT
-Add Printer Wizard icon. The APW will be show only if
-</para>
-
-<itemizedlist>
- <listitem><para>The connected user is able to successfully
- execute an OpenPrinterEx(\\server) with administrative
- privileges (i.e. root or <parameter>printer admin</parameter>).
- </para></listitem>
+Succesfully set hp-print to driver HP LaserJet 4000 Series PS.
+ </programlisting></para>
+ </sect2>
- <listitem><para><ulink url="smb.conf.5.html#SHOWADDPRINTERWIZARD"><parameter>show
- add printer wizard = yes</parameter></ulink> (the default).
- </para></listitem>
-</itemizedlist>
-
-<para>
-In order to be able to use the APW to successfully add a printer to a Samba
-server, the <ulink url="smb.conf.5.html#ADDPRINTERCOMMAND"><parameter>add
-printer command</parameter></ulink> must have a defined value. The program
-hook must successfully add the printer to the system (i.e.
-<filename>/etc/printcap</filename> or appropriate files) and
-<filename>smb.conf</filename> if necessary.
-</para>
-
-<para>
-When using the APW from a client, if the named printer share does
-not exist, <command>smbd</command> will execute the <parameter>add printer
-command</parameter> and reparse to the <filename>smb.conf</filename>
-to attempt to locate the new printer share. If the share is still not defined,
-an error of "Access Denied" is returned to the client. Note that the
-<parameter>add printer program</parameter> is executed under the context
-of the connected user, not necessarily a root account.
-</para>
-
-<para>
-There is a complementing <ulink url="smb.conf.5.html#DELETEPRINTERCOMMAND"><parameter>delete
-printer command</parameter></ulink> for removing entries from the "Printers..."
-folder.
-</para>
-
-</sect2>
-
-
-<sect2>
-<title>Samba and Printer Ports</title>
-
-<para>
-Windows NT/2000 print servers associate a port with each printer. These normally
-take the form of LPT1:, COM1:, FILE:, etc... Samba must also support the
-concept of ports associated with a printer. By default, only one printer port,
-named "Samba Printer Port", exists on a system. Samba does not really a port in
-order to print, rather it is a requirement of Windows clients.
-</para>
-
-<para>
-Note that Samba does not support the concept of "Printer Pooling" internally
-either. This is when a logical printer is assigned to multiple ports as
-a form of load balancing or fail over.
-</para>
-
-<para>
-If you require that multiple ports be defined for some reason,
-<filename>smb.conf</filename> possesses a <ulink
-url="smb.conf.5.html#ENUMPORTSCOMMAND"><parameter>enumports
-command</parameter></ulink> which can be used to define an external program
-that generates a listing of ports on a system.
-</para>
-
-</sect2>
-
</sect1>
@@ -503,24 +339,24 @@ that generates a listing of ports on a system.
perl code is wrapped around <command>smbclient</command>
and <command>rpcclient</command>.</para>
-<para><programlisting>
-foreach (supported architecture for a given driver)
-{
- 1. rpcclient: Get the appropriate upload directory
- on the remote server
- 2. smbclient: Upload the driver files
- 3. rpcclient: Issues an AddPrinterDriver() MS-RPC
-}
+ <para><programlisting>
+ foreach (supported architecture for a given driver)
+ {
+ 1. rpcclient: Get the appropriate upload directory
+ on the remote server
+ 2. smbclient: Upload the driver files
+ 3. rpcclient: Issues an AddPrinterDriver() MS-RPC
+ }
-4. rpcclient: Issue an AddPrinterEx() MS-RPC to actually
- create the printer
-</programlisting></para>
+ 4. rpcclient: Issue an AddPrinterEx() MS-RPC to actually
+ create the printer
+ </programlisting></para>
<para>One of the problems encountered when implementing
the Imprints tool set was the name space issues between
various supported client architectures. For example, Windows
NT includes a driver named "Apple LaserWriter II NTX v51.8"
- and Windows 95 calls its version of this driver "Apple
+ and Windows 95 callsits version of this driver "Apple
LaserWriter II NTX"</para>
<para>The problem is how to know what client drivers have
@@ -533,7 +369,7 @@ foreach (supported architecture for a given driver)
</filename></para>
<para>will reveal that Windows NT always uses the NT driver
- name. This is ok as Windows NT always requires that at least
+ name. The is ok as Windows NT always requires that at least
the Windows NT version of the printer driver is present.
However, Samba does not have the requirement internally.
Therefore, how can you use the NT driver name if is has not
@@ -549,167 +385,64 @@ foreach (supported architecture for a given driver)
<sect1>
-<title><anchor id="MIGRATION">Migration to from Samba 2.0.x to 2.2.x</title>
-
-<para>
-Given that printer driver management has changed (we hope improved) in
-2.2 over prior releases, migration from an existing setup to 2.2 can
-follow several paths.
-</para>
-
-<para>
-Windows clients have a tendency to remember things for quite a while.
-For example, if a Windows NT client has attached to a Samba 2.0 server,
-it will remember the server as a LanMan printer server. Upgrading
-the Samba host to 2.2 makes support for MSRPC printing possible, but
-the NT client will still remember the previous setting.
-</para>
-
-<para>
-In order to give an NT client printing "amnesia" (only necessary if you
-want to use the newer MSRPC printing functionality in Samba), delete
-the registry keys associated with the print server contained in
-<constant>[HKLM\SYSTEM\CurrentControlSet\Control\Print]</constant>. The
-spooler service on the client should be stopped prior to doing this:
-</para>
-
-<para>
-<prompt>C:\WINNT\ ></prompt> <userinput>net stop spooler</userinput>
-</para>
-
-<para>
-<emphasis>All the normal disclaimers about editing the registry go
-here.</emphasis> Be careful, and know what you are doing.
-</para>
-
-<para>
-The spooler service should be restarted after you have finished
-removing the appropriate registry entries by replacing the
-<command>stop</command> command above with <command>start</command>.
-</para>
-
-<para>
-Windows 9x clients will continue to use LanMan printing calls
-with a 2.2 Samba server so there is no need to perform any of these
-modifications on non-NT clients.
-</para>
+ <title><anchor id="MIGRATION">Migration to from Samba 2.0.x to
+ 2.2.x</title>
-<warning>
-<title>Achtung!</title>
-
-<para>
-The following smb.conf parameters are considered to be depreciated and will
-be removed soon. Do not use them in new installations
-</para>
+ <para>Given that printer driver management has changed
+ (we hope improved :) ) in 2.2.0 over prior releases,
+ migration from an existing setup to 2.2.0 can follow
+ several paths.</para>
+
+ <warning>
+ <para>The following smb.conf parameters are considered to be
+ depreciated and will be removed soon. Do not use them
+ in new installations</para>
-<itemizedlist>
- <listitem><para><parameter>printer driver file (G)</parameter>
- </para></listitem>
+ <itemizedlist>
+ <listitem><para><parameter>printer driver file (G)</parameter>
+ </para></listitem>
- <listitem><para><parameter>printer driver (S)</parameter>
- </para></listitem>
+ <listitem><para><parameter>printer driver (S)</parameter>
+ </para></listitem>
- <listitem><para><parameter>printer driver location (S)</parameter>
- </para></listitem>
-</itemizedlist>
-</warning>
+ <listitem><para><parameter>printer driver location (S)</parameter>
+ </para></listitem>
+ </itemizedlist>
+ </warning>
-<para>
-Here are the possible scenarios for supporting migration:
-</para>
+ <para>Here are the possible scenarios for supporting migration:</para>
-<itemizedlist>
- <listitem><para>If you do not desire the new Windows NT
- print driver support, nothing needs to be done.
- All existing parameters work the same.</para></listitem>
-
- <listitem><para>If you want to take advantage of NT printer
- driver support but do not want to migrate the
- 9x drivers to the new setup, the leave the existing
- printers.def file. When smbd attempts to locate a
- 9x driver for the printer in the TDB and fails it
- will drop down to using the printers.def (and all
- associated parameters). The <command>make_printerdef</command>
- tool will also remain for backwards compatibility but will
- be moved to the "this tool is the old way of doing it"
- pile.</para></listitem>
-
- <listitem><para>If you install a Windows 9x driver for a printer
- on your Samba host (in the printing TDB), this information will
- take precedence and the three old printing parameters
- will be ignored (including print driver location).</para></listitem>
-
- <listitem><para>If you want to migrate an existing <filename>printers.def</filename>
- file into the new setup, the current only solution is to use the Windows
- NT APW to install the NT drivers and the 9x drivers. This can be scripted
- using <command>smbclient</command> and <command>rpcclient</command>. See the
- Imprints installation client at <ulink
- url="http://imprints.sourceforge.net/">http://imprints.sourceforge.net/</ulink>
- for an example.
- </para></listitem>
-</itemizedlist>
+ <itemizedlist>
+ <listitem><para>If you do not desire the new Windows NT
+ print driver support, nothing needs to be done.
+ All existing parameters work the same.</para></listitem>
+
+ <listitem><para>If you want to take advantage of NT printer
+ driver support but do not want to migrate the
+ 9x drivers to the new setup, the leave the existing
+ printers.def file. When smbd attempts to locate a
+ 9x driver for the printer in the TDB and fails it
+ will drop down to using the printers.def (and all
+ associated parameters). The <command>make_printerdef</command>
+ tool will also remain for backwards compatibility but will
+ be moved to the "this tool is the old way of doing it"
+ pile.</para></listitem>
+
+ <listitem><para>If you install a Windows 9x driver for a printer
+ on your Samba host (in the printing TDB), this information will
+ take precedence and the three old printing parameters
+ will be ignored (including print driver location).</para></listitem>
+
+ <listitem><para>If you want to migrate an existing <filename>
+ printers.def</filename> file into the new setup, the current only
+ solution is to use the Windows NT APW to install the NT drivers
+ and the 9x drivers. This can be scripted using smbclient and
+ rpcclient. See the <ulink url="http://imprints.sourceforge.net/">
+ Imprints insrallation client</ulink> for an example.
+ </para></listitem>
+ </itemizedlist>
</sect1>
-
-<!--
-
- This comment from rpc_server/srv_spoolss_nt.c:_spoolss_open_printer_ex()
- needs to be added into a section probably. This is to remind me it needs
- to be done. -jerry
-
- /*
- * If the openprinterex rpc call contains a devmode,
- * it's a per-user one. This per-user devmode is derivated
- * from the global devmode. Openprinterex() contains a per-user
- * devmode for when you do EMF printing and spooling.
- * In the EMF case, the NT workstation is only doing half the job
- * of rendering the page. The other half is done by running the printer
- * driver on the server.
- * The EMF file doesn't contain the page description (paper size, orientation, ...).
- * The EMF file only contains what is to be printed on the page.
- * So in order for the server to know how to print, the NT client sends
- * a devicemode attached to the openprinterex call.
- * But this devicemode is short lived, it's only valid for the current print job.
- *
- * If Samba would have supported EMF spooling, this devicemode would
- * have been attached to the handle, to sent it to the driver to correctly
- * rasterize the EMF file.
- *
- * As Samba only supports RAW spooling, we only receive a ready-to-print file,
- * we just act as a pass-thru between windows and the printer.
- *
- * In order to know that Samba supports only RAW spooling, NT has to call
- * getprinter() at level 2 (attribute field) or NT has to call startdoc()
- * and until NT sends a RAW job, we refuse it.
- *
- * But to call getprinter() or startdoc(), you first need a valid handle,
- * and to get an handle you have to call openprintex(). Hence why you have
- * a devicemode in the openprinterex() call.
- *
- *
- * Differences between NT4 and NT 2000.
- * NT4:
- *
- * On NT4, you only have a global devicemode. This global devicemode can be changed
- * by the administrator (or by a user with enough privs). Every time a user
- * wants to print, the devicemode is reset to the default. In Word, every time
- * you print, the printer's characteristics are always reset to the global devicemode.
- *
- * NT 2000:
- *
- * In W2K, there is the notion of per-user devicemode. The first time you use
- * a printer, a per-user devicemode is build from the global devicemode.
- * If you change your per-user devicemode, it is saved in the registry, under the
- * H_KEY_CURRENT_KEY sub_tree. So that every time you print, you have your default
- * printer preferences available.
- *
- * To change the per-user devicemode: it's the "Printing Preferences ..." button
- * on the General Tab of the printer properties windows.
- *
- * To change the global devicemode: it's the "Printing Defaults..." button
- * on the Advanced Tab of the printer properties window.
--->
-
</chapter>
diff --git a/docs/docbook/projdoc/samba-doc.sgml b/docs/docbook/projdoc/samba-doc.sgml
index 7583e90b46e..81469df51a0 100644
--- a/docs/docbook/projdoc/samba-doc.sgml
+++ b/docs/docbook/projdoc/samba-doc.sgml
@@ -8,9 +8,6 @@
<!ENTITY NT-Security SYSTEM "NT_Security.sgml">
<!ENTITY OS2-Client SYSTEM "OS2-Client-HOWTO.sgml">
<!ENTITY Samba-PDC-HOWTO SYSTEM "Samba-PDC-HOWTO.sgml">
-<!ENTITY CVS-Access SYSTEM "CVS-Access.sgml">
-<!ENTITY IntegratingWithWindows SYSTEM "Integrating-with-Windows.sgml">
-<!ENTITY Samba-PAM SYSTEM "PAM-Authentication-And-Samba.sgml">
]>
<book id="Samba-Project-Documentation">
@@ -25,34 +22,17 @@
<pubdate>$rcsId</pubdate>
</bookinfo>
-<dedication>
-<title>Abstract</title>
+<toc></toc>
-<para>
-This book is a collection of HOWTOs added to Samba documentation over the years.
-I try to ensure that all are current, but sometimes the is a larger job
-than one person can maintain. The most recent version of this document
-can be found at <ulink url="http://www.samba.org/">http://www.samba.org/</ulink>
-on the "Documentation" page. Please send updates to <ulink
-url="mailto:jerry@samba.org">jerry@samba.org</ulink>.
-</para>
-
-<para>
-Cheers, jerry
-</para>
-
-</dedication>
&UNIX-INSTALL;
-&IntegratingWithWindows;
-&Samba-PAM;
+&ENCRYPTION;
&MS-Dfs-Setup;
-&NT-Security;
&PRINTER-DRIVER2;
&DOMAIN-MEMBER;
&Samba-PDC-HOWTO;
&WINBIND;
+&NT-Security;
&OS2-Client;
-&CVS-Access;
</book>
diff --git a/docs/docbook/projdoc/winbind.sgml b/docs/docbook/projdoc/winbind.sgml
index 75138458d93..8a380c206db 100644
--- a/docs/docbook/projdoc/winbind.sgml
+++ b/docs/docbook/projdoc/winbind.sgml
@@ -21,7 +21,7 @@
<pubdate>16 Oct 2000</pubdate>
</chapterinfo>
-<title>Unified Logons between Windows NT and UNIX using Winbind</title>
+<title>Unifed Logons between Windows NT and UNIX using Winbind</title>
<sect1>
<title>Abstract</title>
@@ -30,7 +30,7 @@
a unified logon has been considered a "holy grail" in heterogeneous
computing environments for a long time. We present <emphasis>winbind
</emphasis>, a component of the Samba suite of programs as a
- solution to the unified logon problem. Winbind uses a UNIX implementation
+ solution to the unied logon problem. Winbind uses a UNIX implementation
of Microsoft RPC calls, Pluggable Authentication Modules, and the Name
Service Switch to allow Windows NT domain users to appear and operate
as UNIX users on a UNIX machine. This paper describes the winbind
@@ -57,7 +57,7 @@
can lead to synchronization problems between the UNIX and Windows
systems and confusion for users.</para>
- <para>We divide the unified logon problem for UNIX machines into
+ <para>We divide the unifed logon problem for UNIX machines into
three smaller problems:</para>
<itemizedlist>
@@ -77,7 +77,7 @@
information on the UNIX machines and without creating additional
tasks for the system administrator when maintaining users and
groups on either system. The winbind system provides a simple
- and elegant solution to all three components of the unified logon
+ and elegant solution to all three components of the unifed logon
problem.</para>
</sect1>
@@ -179,7 +179,7 @@
<para>The Name Service Switch, or NSS, is a feature that is
present in many UNIX operating systems. It allows system
information such as hostnames, mail aliases and user information
- to be resolved from different sources. For example, a standalone
+ to be resolved from dierent sources. For example, a standalone
UNIX workstation may resolve system information from a series of
flat files stored on the local lesystem. A networked workstation
may first attempt to resolve system information from local files,
@@ -202,7 +202,7 @@
for a line which matches the service type being requested, for
example the "passwd" service type is used when user or group names
are looked up. This config line species which implementations
- of that service should be tried and in what order. If the passwd
+ of that service should be tried andin what order. If the passwd
config line is:</para>
<para><command>passwd: files example</command></para>
@@ -229,7 +229,7 @@
<para>Pluggable Authentication Modules, also known as PAM,
is a system for abstracting authentication and authorization
technologies. With a PAM module it is possible to specify different
- authentication methods for different system applications without
+ authentication methods for dierent system applications without
having to recompile these applications. PAM is also useful
for implementing a particular policy for authorization. For example,
a system administrator may only allow console logins from users
@@ -244,7 +244,7 @@
this change take eect directly on the Primary Domain Controller.
</para>
- <para>PAM is configured by providing control files in the directory
+ <para>PAM is congured by providing control files in the directory
<filename>/etc/pam.d/</filename> for each of the services that
require authentication. When an authentication request is made
by an application the PAM code in the C library looks up this
@@ -263,11 +263,11 @@
<title>User and Group ID Allocation</title>
<para>When a user or group is created under Windows NT
- is it allocated a numerical relative identifier (RID). This is
- slightly different to UNIX which has a range of numbers which are
+ is it allocated a numerical relative identier (RID). This is
+ slightly dierent to UNIX which has a range of numbers which are
used to identify users, and the same range in which to identify
groups. It is winbind's job to convert RIDs to UNIX id numbers and
- vice versa. When winbind is configured it is given part of the UNIX
+ vice versa. When winbind is congured it is given part of the UNIX
user id space and a part of the UNIX group id space in which to
store Windows NT users and groups. If a Windows NT user is
resolved for the first time, it is allocated the next UNIX id from
@@ -290,7 +290,7 @@
by NT domain controllers. User or group information returned
by a PDC is cached by winbind along with a sequence number also
returned by the PDC. This sequence number is incremented by
- Windows NT whenever any user or group information is modified. If
+ Windows NT whenever any user or group information is modied. If
a cached entry has expired, the sequence number is requested from
the PDC and compared against the sequence number of the cached entry.
If the sequence numbers do not match, then the cached information
@@ -314,7 +314,7 @@
<para>Once you have installed the packages you should read
the <command>winbindd(8)</command> man page which will provide you
- with configuration information and give you sample configuration files.
+ with conguration information and give you sample conguration files.
You may also wish to update the main Samba daemons smbd and nmbd)
with a more recent development release, such as the recently
announced Samba 2.2 alpha release.</para>
diff --git a/docs/docbook/scripts/README.ldp_print b/docs/docbook/scripts/README.ldp_print
deleted file mode 100644
index 8d61a855343..00000000000
--- a/docs/docbook/scripts/README.ldp_print
+++ /dev/null
@@ -1,60 +0,0 @@
-
-######################################################################
- ldp_print - print tool/script for DocBook SGML/XML documents
-######################################################################
-
-This process/script is used in the production environment for the
-LDP. It relies on the HTMLDOC software package (GPL'ed) which can be
-obtained from the Easy Software Products (c) web site:
-
- http://www.easysw.com/htmldoc/
-
-This process creates a PDF variant from the single-file HTML
-representation of a DocBook SGML (or XML) instance. The simple
-wrapper script (ldp_print) assumes that the file was created using
-{open}jade in a manner similar to:
-
- jade -t sgml -i html -V nochunks -d $style $fname > $fname.html
-
-Give the script the filename as an argument. It will then parse the
-file into 'title.html' and 'body.html' and send each to htmldoc (as
-the corresponding title page and body of the document).
-
-
-CAVEATS
-=======
-
-o Assumes perl is in /usr/bin; adjust if necessary
-
-o You may need to specify where the htmldoc executable resides.
- The script assumes it's within your $PATH.
-
-o If you want Postscript as an output variant, uncomment the
- appropriate lines (see below).
-
-o Relies on output from a DocBook instance created via DSSSL/{open}jade!
-
-o Cleans up (removes) the intermediate files it creates (but not the
- PDF or Postscript files, obviously!)
-
-o Works silently; PDF (PostScript) will be created in the same directory
- as was specified for the input (single-file HTML) file.
-
-o Provided without warranty or support!
-
-o I ran into a problem with htmldoc v1.8.8 which required a source
- code change (I was getting a core dump from the htmldoc process).
- Here is the change required:
-
- htmldoc/ps-pdf.cxx :
- 3662,3665d3661
- < /* gjf = 11Oct2000 */
- < if( temprow == NULL )
- < break;
- <
-
-
-====
-gferg (at) sgi.com / Ferg
-11 Jan 2000
-
diff --git a/docs/docbook/scripts/fix_print_html.lib b/docs/docbook/scripts/fix_print_html.lib
deleted file mode 100644
index e8a9aaa4c77..00000000000
--- a/docs/docbook/scripts/fix_print_html.lib
+++ /dev/null
@@ -1,172 +0,0 @@
-#
-# fix_print_html.lib
-#
-# Dan Scott / <dan.scott (at) acm.org>
-# Ferg / <gferg (at) sgi.com>
-#
-# Used to prepare single-file HTML variant for PDF/Postscript creation
-# thru htmldoc.
-#
-# log:
-# 16Oct2000 - initial entry <gferg (at) sgi.com>
-# 03Apr2001 - fix for <preface>
-#
-#
-
-sub fix_print_html {
-
- my($in,$out,$ttl) = @_;
-
- open(IN_FILE, "< $in") || do {
- print "fix_print_html: cannot open $in: $!\n";
- return 0;
- };
-
- my($buf,$ttl_buf) = '';
- my($indx) = -1;
- my($is_article) = 0;
- while(<IN_FILE>) {
-
- if( $indx == 1 ) {
-
- # ignore everything until we see the chapter or sect
- #
- if( $_ =~ /CLASS="CHAP/i || $_ =~ /CLASS="PREF/i ) {
-
- $buf .= $_;
- $indx++;
-
- } elsif( $_ =~ /CLASS="SECT/ || $_ =~ /CLASS="sect/ ) {
-
- $buf .= $_;
- $indx++;
- $is_article = 1;
-
- } else {
- next;
- }
-
- } elsif( $indx == 0 ) {
-
- # write out the title page file
- #
- if( $_ =~ /CLASS="TOC"/ ) {
-
- $ttl_buf .= "></DIV>\n</BODY>\n</HTML>\n";
- $ttl_buf =~ s/<\/H1\n/<\/H1\n><P><BR><BR\n/ms;
-
- open(TOC_FILE, "> $ttl") || do {
- print "fix_print_html: cannot open $ttl: $!\n";
- close(IN_FILE);
- return 0;
- };
- print TOC_FILE $ttl_buf;
- close(TOC_FILE);
- $ttl_buf = '';
- $indx++;
-
- } else {
- $ttl_buf .= $_;
- }
-
- } elsif( $indx < 0 ) {
-
- # up to this point, both buffers get the line
- #
- if( $_ =~ /CLASS="TITLEPAGE"/ ) {
-
- $ttl_buf .= $_ . ">\n<P>\n<BR><BR><BR><BR>\n<\/P\n";
- $indx++;
-
- } else {
- $buf .= $_;
- $ttl_buf .= $_;
- }
-
- } else {
-
- $buf .= $_;
- }
- }
- close(IN_FILE);
-
- open(OUT_FILE, "> $out") || do {
- print "fix_print_html: cannot open $out: $!\n";
- return 0;
- };
-
-
- # make these corrections and write out the file
- #
-
- $buf =~ s/(\n><LI\n)><P\n(.*?)<\/P\n>/$1$2\n/gms;
- $buf =~ s/(\n><LI\n><DIV\nCLASS="FORMALPARA"\n)><P\n(.*?)<\/P\n>/$1$2\n/gms;
- $buf =~ s/(\n><LI\nSTYLE="[^\"]+"\n)><P\n(.*?)<\/P\n>/$1$2\n/gms;
- if( $is_article == 0 ) {
- $buf =~ s/(\nCLASS="SECT[TION\d]+"\n>)<H1\n(.*?)<\/H1/$1<H2\n$2<\/H2/gims;
- $buf =~ s/(\nCLASS="SECT[TION\d]+"\n><HR>)<H1\n(.*?)<\/H1/$1<H2\n$2<\/H2/gims;
- }
- $buf =~ s/<H1(\nCLASS="INDEXDIV"\n)(.*?)<\/H1/<H2$1$2<\/H2/gims;
- if( ($indx = rindex($buf, "<H1\n><A\nNAME=\"DOC-INDEX\"")) > -1 ) {
- $buf = substr($buf, 0, $indx);
- $buf .= "\n<\/BODY>\n<\/HTML>\n\n";
- } elsif( ($indx = rindex($buf, "<H1\n><A\nNAME=\"doc-index\"")) > -1 ) {
- $buf = substr($buf, 0, $indx);
- $buf .= "\n<\/BODY>\n<\/HTML>\n\n";
- }
- $buf =~ s/\&\#13;//g;
- $buf =~ s/\&\#60;/\&lt;/g;
- $buf =~ s/\&\#62;/\&gt;/g;
- $buf =~ s/\&\#8211;/\-/g;
- $buf =~ s/WIDTH=\"\d\"//g;
- $buf =~ s/><[\/]*TBODY//g;
- $buf =~ s/><[\/]*THEAD//g;
- $buf =~ s/TYPE=\"1\"\n//gim;
-
- if( $is_article == 0 ) {
-
- # for books...decrement the headers by 1 and then re-set the
- # chapter level only to H1...
- #
- my($cnt,$j) = 0;
- for($cnt=5; $cnt > 0; $cnt--) {
- $j = $cnt + 1;
- $buf =~ s/<H${cnt}/<H${j}/g;
- $buf =~ s/<\/H${cnt}/<\/H${j}/g;
- }
-
- my(@l) = split(/\n/, $buf);
- for( $cnt=0; $cnt < (@l + 0); $cnt++ ) {
-
- if( $j == 1 ) {
- if( $l[$cnt] =~ /<DIV/ ) {
- $j = 0;
- next;
- }
- $l[$cnt] =~ s/<H2/<H1/g;
- $l[$cnt] =~ s/<\/H2/<\/H1/g;
- }
- if( $l[$cnt] =~ /^CLASS=\"CHAP/i
- ||
- $l[$cnt] =~ /^CLASS=\"PREF/i ) {
- $j = 1;
- }
- }
-
- $buf = join("\n", @l);
-
- }
- $buf =~ s/><DIV\nCLASS="\w+"\n//gms;
- $buf =~ s/><\/DIV\n//gms;
- $buf =~ s/(><LI\n)><P\n(.*?)<\/P\n>(<\/LI\n)/$1$2$3/gms;
-
- print OUT_FILE $buf;
- close(OUT_FILE);
-
- return 1;
-}
-
-# Return true from package include
-#
-1;
-
diff --git a/docs/docbook/scripts/ldp_print b/docs/docbook/scripts/ldp_print
deleted file mode 100755
index 70bb801def4..00000000000
--- a/docs/docbook/scripts/ldp_print
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/perl -w
-#
-# usage: ldp_print <single_file.html>
-#
-# Creates a PDF variant of a single-file HTML representation of a
-# DocBook SGML (or XML) instance. This simple wrapper assumes that
-# the file was created using {open}jade in a manner similar to:
-#
-# jade -t sgml -i html -V nochunks -d $style $fname > $fname.html
-#
-# Give this script the filename as an argument. It will then parse
-# the file into 'title.html' and 'body.html' and send each to
-# htmldoc (as the corresponding title page and body of the document).
-#
-#
-# CAVEATS:
-#
-# Assumes perl is in /usr/bin; adjust if necessary
-#
-# You may need to specify where the htmldoc executable resides.
-# The script assumes it's within your $PATH.
-#
-# If you want Postscript as an output variant, uncomment the
-# appropriate lines (see below).
-#
-# Relies on output from a DocBook instance created via DSSSL/{open}jade!
-#
-# Cleans up (removes) the intermediate files it creates (but not the
-# PDF or Postscript files, obviously!)
-#
-# Works silently; PDF (PostScript) will be created in the same directory
-# as was specified for the input (single-file HTML) file.
-#
-# Provided without warranty or support!
-#
-# gferg@sgi.com / Ferg (used as part of the LDP production env)
-#
-
-use strict;
-push(@INC, "./");
-require 'fix_print_html.lib';
-
-if( $ARGV[0] eq '' || !(-r $ARGV[0]) ) {
- die "\nusage: ldp_print <single_file.html>\n\n";
-}
-
-my($fname_wo_ext) = $ARGV[0];
-$fname_wo_ext =~ s/\.[\w]+$//;
-
-
-# create new files from single HTML file to use for print
-#
-&fix_print_html($ARGV[0], 'body.html', 'title.html');
-
-my($cmd) = "htmldoc --size universal -t pdf -f ${fname_wo_ext}.pdf " .
- "--firstpage p1 --titlefile title.html body.html";
-
-# For postscript output; append onto the above cmd string:
-#
-# "; htmldoc --size universal -t ps -f -f ${fname_wo_ext}.ps " .
-# "--firstpage p1 --titlefile title.html body.html";
-#
-system($cmd);
-die "\nldp_print: could not create ${fname_wo_ext}.pdf ($!)\n" if ($?);
-
-# cleanup
-#
-system("rm -f body.html title.html");
-
-exit(0);
-
diff --git a/docs/docbook/scripts/strip-links.pl b/docs/docbook/scripts/strip-links.pl
index dbbdceaabcc..495822264ec 100644
--- a/docs/docbook/scripts/strip-links.pl
+++ b/docs/docbook/scripts/strip-links.pl
@@ -6,9 +6,8 @@
while (<STDIN>) {
- chomp ($_);
$_ =~ s/\s*<URL:.*html.*>\s*//g;
- print "$_\n";
+ print "$_";
}
exit 0;
diff --git a/docs/docbook/stylesheets/ldp.dsl.in b/docs/docbook/stylesheets/ldp.dsl.in
deleted file mode 100644
index d6e06f4b6d1..00000000000
--- a/docs/docbook/stylesheets/ldp.dsl.in
+++ /dev/null
@@ -1,256 +0,0 @@
-<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
-<!ENTITY % html "IGNORE">
-<![%html;[
-<!ENTITY % print "IGNORE">
-<!ENTITY docbook.dsl SYSTEM "@SGML_SHARE@/dsssl/docbook/html/docbook.dsl" CDATA dsssl>
-]]>
-<!ENTITY % print "INCLUDE">
-<![%print;[
-<!ENTITY docbook.dsl SYSTEM "@SGML_SHARE@/dsssl/docbook/print/docbook.dsl" CDATA dsssl>
-]]>
-]>
-
-<style-sheet>
-
-<style-specification id="print" use="docbook">
-<style-specification-body>
-
-;; ==============================
-;; customize the print stylesheet
-;; ==============================
-
-(declare-characteristic preserve-sdata?
- ;; this is necessary because right now jadetex does not understand
- ;; symbolic entities, whereas things work well with numeric entities.
- "UNREGISTERED::James Clark//Characteristic::preserve-sdata?"
- #f)
-
-(define %generate-article-toc%
- ;; Should a Table of Contents be produced for Articles?
- #t)
-
-(define (toc-depth nd)
- 2)
-
-(define %generate-article-titlepage-on-separate-page%
- ;; Should the article title page be on a separate page?
- #t)
-
-(define %section-autolabel%
- ;; Are sections enumerated?
- #t)
-
-(define %footnote-ulinks%
- ;; Generate footnotes for ULinks?
- #f)
-
-(define %bop-footnotes%
- ;; Make "bottom-of-page" footnotes?
- #f)
-
-(define %body-start-indent%
- ;; Default indent of body text
- 0pi)
-
-(define %para-indent-firstpara%
- ;; First line start-indent for the first paragraph
- 0pt)
-
-(define %para-indent%
- ;; First line start-indent for paragraphs (other than the first)
- 0pt)
-
-(define %block-start-indent%
- ;; Extra start-indent for block-elements
- 0pt)
-
-(define formal-object-float
- ;; Do formal objects float?
- #t)
-
-(define %hyphenation%
- ;; Allow automatic hyphenation?
- #t)
-
-(define %admon-graphics%
- ;; Use graphics in admonitions?
- #f)
-
-</style-specification-body>
-</style-specification>
-
-
-<!--
-;; ===================================================
-;; customize the html stylesheet; borrowed from Cygnus
-;; at http://sourceware.cygnus.com/ (cygnus-both.dsl)
-;; ===================================================
--->
-
-<style-specification id="html" use="docbook">
-<style-specification-body>
-
-(declare-characteristic preserve-sdata?
- ;; this is necessary because right now jadetex does not understand
- ;; symbolic entities, whereas things work well with numeric entities.
- "UNREGISTERED::James Clark//Characteristic::preserve-sdata?"
- #f)
-
-(define %generate-legalnotice-link%
- ;; put the legal notice in a separate file
- #t)
-
-(define %admon-graphics-path%
- ;; use graphics in admonitions, set their
- "../images/")
-
-(define %admon-graphics%
- #f)
-
-(define %funcsynopsis-decoration%
- ;; make funcsynopsis look pretty
- #t)
-
-(define %html-ext%
- ;; when producing HTML files, use this extension
- ".html")
-
-(define %generate-book-toc%
- ;; Should a Table of Contents be produced for books?
- #t)
-
-(define %generate-article-toc%
- ;; Should a Table of Contents be produced for articles?
- #t)
-
-(define %generate-part-toc%
- ;; Should a Table of Contents be produced for parts?
- #t)
-
-(define %generate-book-titlepage%
- ;; produce a title page for books
- #t)
-
-(define %generate-article-titlepage%
- ;; produce a title page for articles
- #t)
-
-(define (chunk-skip-first-element-list)
- ;; forces the Table of Contents on separate page
- '())
-
-(define (list-element-list)
- ;; fixes bug in Table of Contents generation
- '())
-
-(define %root-filename%
- ;; The filename of the root HTML document (e.g, "index").
- "index")
-
-(define %shade-verbatim%
- ;; verbatim sections will be shaded if t(rue)
- #t)
-
-(define %use-id-as-filename%
- ;; Use ID attributes as name for component HTML files?
- #t)
-
-(define %graphic-extensions%
- ;; graphic extensions allowed
- '("gif" "png" "jpg" "jpeg" "tif" "tiff" "eps" "epsf" ))
-
-(define %graphic-default-extension%
- "gif")
-
-(define %section-autolabel%
- ;; For enumerated sections (1.1, 1.1.1, 1.2, etc.)
- #t)
-
-(define (toc-depth nd)
- ;; more depth (2 levels) to toc; instead of flat hierarchy
- ;; 2)
- 4)
-
-(element emphasis
- ;; make role=strong equate to bold for emphasis tag
- (if (equal? (attribute-string "role") "strong")
- (make element gi: "STRONG" (process-children))
- (make element gi: "EM" (process-children))))
-
-(define (book-titlepage-recto-elements)
- ;; elements on a book's titlepage
- ;; note: added revhistory to the default list
- (list (normalize "title")
- (normalize "subtitle")
- (normalize "graphic")
- (normalize "mediaobject")
- (normalize "corpauthor")
- (normalize "authorgroup")
- (normalize "author")
- (normalize "editor")
- (normalize "copyright")
- (normalize "revhistory")
- (normalize "abstract")
- (normalize "legalnotice")))
-
-(define (article-titlepage-recto-elements)
- ;; elements on an article's titlepage
- ;; note: added othercredit to the default list
- (list (normalize "title")
- (normalize "subtitle")
- (normalize "authorgroup")
- (normalize "author")
- (normalize "othercredit")
- (normalize "releaseinfo")
- (normalize "copyright")
- (normalize "pubdate")
- (normalize "revhistory")
- (normalize "abstract")))
-
-(mode article-titlepage-recto-mode
-
- (element contrib
- ;; print out with othercredit information; for translators, etc.
- (make sequence
- (make element gi: "SPAN"
- attributes: (list (list "CLASS" (gi)))
- (process-children))))
-
- (element othercredit
- ;; print out othercredit information; for translators, etc.
- (let ((author-name (author-string))
- (author-contrib (select-elements (children (current-node))
- (normalize "contrib"))))
- (make element gi: "P"
- attributes: (list (list "CLASS" (gi)))
- (make element gi: "B"
- (literal author-name)
- (literal " - "))
- (process-node-list author-contrib))))
-)
-
-(define (article-title nd)
- (let* ((artchild (children nd))
- (artheader (select-elements artchild (normalize "artheader")))
- (artinfo (select-elements artchild (normalize "articleinfo")))
- (ahdr (if (node-list-empty? artheader)
- artinfo
- artheader))
- (ahtitles (select-elements (children ahdr)
- (normalize "title")))
- (artitles (select-elements artchild (normalize "title")))
- (titles (if (node-list-empty? artitles)
- ahtitles
- artitles)))
- (if (node-list-empty? titles)
- ""
- (node-list-first titles))))
-
-
-</style-specification-body>
-</style-specification>
-
-<external-specification id="docbook" document="docbook.dsl">
-
-</style-sheet>
-
diff --git a/docs/htmldocs/CVS-Access.html b/docs/htmldocs/CVS-Access.html
deleted file mode 100644
index ff02a18f290..00000000000
--- a/docs/htmldocs/CVS-Access.html
+++ /dev/null
@@ -1,193 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->HOWTO Access Samba source code via CVS</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.57"></HEAD
-><BODY
-CLASS="ARTICLE"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="ARTICLE"
-><DIV
-CLASS="TITLEPAGE"
-><H1
-CLASS="TITLE"
-><A
-NAME="AEN1"
->HOWTO Access Samba source code via CVS</A
-></H1
-><HR></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN3"
->Introduction</A
-></H1
-><P
->Samba is developed in an open environment. Developers use CVS
-(Concurrent Versioning System) to "checkin" (also known as
-"commit") new source code. Samba's various CVS branches can
-be accessed via anonymous CVS using the instructions
-detailed in this chapter.</P
-><P
->This document is a modified version of the instructions found at
-<A
-HREF="http://samba.org/samba/cvs.html"
-TARGET="_top"
->http://samba.org/samba/cvs.html</A
-></P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN8"
->CVS Access to samba.org</A
-></H1
-><P
->The machine samba.org runs a publicly accessible CVS
-repository for access to the source code of several packages,
-including samba, rsync and jitterbug. There are two main ways of
-accessing the CVS server on this host.</P
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN11"
->Access via CVSweb</A
-></H2
-><P
->You can access the source code via your
-favourite WWW browser. This allows you to access the contents of
-individual files in the repository and also to look at the revision
-history and commit logs of individual files. You can also ask for a diff
-listing between any two versions on the repository.</P
-><P
->Use the URL : <A
-HREF="http://samba.org/cgi-bin/cvsweb"
-TARGET="_top"
->http://samba.org/cgi-bin/cvsweb</A
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN16"
->Access via cvs</A
-></H2
-><P
->You can also access the source code via a
-normal cvs client. This gives you much more control over you can
-do with the repository and allows you to checkout whole source trees
-and keep them up to date via normal cvs commands. This is the
-preferred method of access if you are a developer and not
-just a casual browser.</P
-><P
->To download the latest cvs source code, point your
-browser at the URL : <A
-HREF="http://www.cyclic.com/"
-TARGET="_top"
->http://www.cyclic.com/</A
->.
-and click on the 'How to get cvs' link. CVS is free software under
-the GNU GPL (as is Samba). Note that there are several graphical CVS clients
-which provide a graphical interface to the sometimes mundane CVS commands.
-Links to theses clients are also available from http://www.cyclic.com.</P
-><P
->To gain access via anonymous cvs use the following steps.
-For this example it is assumed that you want a copy of the
-samba source code. For the other source code repositories
-on this system just substitute the correct package name</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
-> Install a recent copy of cvs. All you really need is a
- copy of the cvs client binary.
- </P
-></LI
-><LI
-><P
-> Run the command
- </P
-><P
-> <B
-CLASS="COMMAND"
->cvs -d :pserver:cvs@samba.org:/cvsroot login</B
->
- </P
-><P
-> When it asks you for a password type <TT
-CLASS="USERINPUT"
-><B
->cvs</B
-></TT
->.
- </P
-></LI
-><LI
-><P
-> Run the command
- </P
-><P
-> <B
-CLASS="COMMAND"
->cvs -d :pserver:cvs@samba.org:/cvsroot co samba</B
->
- </P
-><P
-> This will create a directory called samba containing the
- latest samba source code (i.e. the HEAD tagged cvs branch). This
- currently corresponds to the 3.0 development tree.
- </P
-><P
-> CVS branches other HEAD can be obtained by using the <TT
-CLASS="PARAMETER"
-><I
->-r</I
-></TT
->
- and defining a tag name. A list of branch tag names can be found on the
- "Development" page of the samba web site. A common request is to obtain the
- latest 2.2 release code. This could be done by using the following command.
- </P
-><P
-> <B
-CLASS="COMMAND"
->cvs -d :pserver:cvs@samba.org:/cvsroot co -r SAMBA_2_2 samba</B
->
- </P
-></LI
-><LI
-><P
-> Whenever you want to merge in the latest code changes use
- the following command from within the samba directory:
- </P
-><P
-> <B
-CLASS="COMMAND"
->cvs update -d -P</B
->
- </P
-></LI
-></OL
-></DIV
-></DIV
-></DIV
-></BODY
-></HTML
-> \ No newline at end of file
diff --git a/docs/htmldocs/ENCRYPTION.html b/docs/htmldocs/ENCRYPTION.html
index cff06c4822a..f7424be11a4 100644
--- a/docs/htmldocs/ENCRYPTION.html
+++ b/docs/htmldocs/ENCRYPTION.html
@@ -118,7 +118,7 @@ NAME="AEN18"
><P
>The unix and SMB password encryption techniques seem similar
on the surface. This similarity is, however, only skin deep. The unix
- scheme typically sends clear text passwords over the network when
+ scheme typically sends clear text passwords over the nextwork when
logging in. This is bad. The SMB encryption scheme never sends the
cleartext password over the network but it does store the 16 byte
hashed values on disk. This is also bad. Why? Because the 16 byte hashed
@@ -196,7 +196,7 @@ CLASS="EMPHASIS"
Microsoft SMB/CIFS clients support authentication via the
SMB Challenge/Response mechanism described here. Enabling
clear text authentication does not disable the ability
- of the client to participate in encrypted authentication.</P
+ of the client to particpate in encrypted authentication.</P
></TD
></TR
></TABLE
diff --git a/docs/htmldocs/Integrating-with-Windows.html b/docs/htmldocs/Integrating-with-Windows.html
deleted file mode 100644
index 5de6fe996b8..00000000000
--- a/docs/htmldocs/Integrating-with-Windows.html
+++ /dev/null
@@ -1,1072 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Integrating MS Windows networks with Samba</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.57"></HEAD
-><BODY
-CLASS="ARTICLE"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="ARTICLE"
-><DIV
-CLASS="TITLEPAGE"
-><H1
-CLASS="TITLE"
-><A
-NAME="AEN1"
->Integrating MS Windows networks with Samba</A
-></H1
-><HR></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN3"
->Agenda</A
-></H1
-><P
->To identify the key functional mechanisms of MS Windows networking
-to enable the deployment of Samba as a means of extending and/or
-replacing MS Windows NT/2000 technology.</P
-><P
->We will examine:</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
->Name resolution in a pure Unix/Linux TCP/IP
- environment
- </P
-></LI
-><LI
-><P
->Name resolution as used within MS Windows
- networking
- </P
-></LI
-><LI
-><P
->How browsing functions and how to deploy stable
- and dependable browsing using Samba
- </P
-></LI
-><LI
-><P
->MS Windows security options and how to
- configure Samba for seemless integration
- </P
-></LI
-><LI
-><P
->Configuration of Samba as:</P
-><P
-></P
-><OL
-TYPE="a"
-><LI
-><P
->A stand-alone server</P
-></LI
-><LI
-><P
->An MS Windows NT 3.x/4.0 security domain member
- </P
-></LI
-><LI
-><P
->An alternative to an MS Windows NT 3.x/4.0 Domain Controller
- </P
-></LI
-></OL
-></LI
-></OL
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN25"
->Name Resolution in a pure Unix/Linux world</A
-></H1
-><P
->The key configuration files covered in this section are:</P
-><P
-></P
-><UL
-><LI
-><P
-><TT
-CLASS="FILENAME"
->/etc/hosts</TT
-></P
-></LI
-><LI
-><P
-><TT
-CLASS="FILENAME"
->/etc/resolv.conf</TT
-></P
-></LI
-><LI
-><P
-><TT
-CLASS="FILENAME"
->/etc/host.conf</TT
-></P
-></LI
-><LI
-><P
-><TT
-CLASS="FILENAME"
->/etc/nsswitch.conf</TT
-></P
-></LI
-></UL
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN41"
-><TT
-CLASS="FILENAME"
->/etc/hosts</TT
-></A
-></H2
-><P
->Contains a static list of IP Addresses and names.
-eg:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> 127.0.0.1 localhost localhost.localdomain
- 192.168.1.1 bigbox.caldera.com bigbox alias4box</PRE
-></P
-><P
->The purpose of <TT
-CLASS="FILENAME"
->/etc/hosts</TT
-> is to provide a
-name resolution mechanism so that uses do not need to remember
-IP addresses.</P
-><P
->Network packets that are sent over the physical network transport
-layer communicate not via IP addresses but rather using the Media
-Access Control address, or MAC address. IP Addresses are currently
-32 bits in length and are typically presented as four (4) decimal
-numbers that are separated by a dot (or period). eg: 168.192.1.1</P
-><P
->MAC Addresses use 48 bits (or 6 bytes) and are typically represented
-as two digit hexadecimal numbers separated by colons. eg:
-40:8e:0a:12:34:56</P
-><P
->Every network interfrace must have an MAC address. Associated with
-a MAC address there may be one or more IP addresses. There is NO
-relationship between an IP address and a MAC address, all such assignments
-are arbitary or discretionary in nature. At the most basic level all
-network communications takes place using MAC addressing. Since MAC
-addresses must be globally unique, and generally remains fixed for
-any particular interface, the assignment of an IP address makes sense
-from a network management perspective. More than one IP address can
-be assigned per MAC address. One address must be the primary IP address,
-this is the address that will be returned in the ARP reply.</P
-><P
->When a user or a process wants to communicate with another machine
-the protocol implementation ensures that the "machine name" or "host
-name" is resolved to an IP address in a manner that is controlled
-by the TCP/IP configuration control files. The file
-<TT
-CLASS="FILENAME"
->/etc/hosts</TT
-> is one such file.</P
-><P
->When the IP address of the destination interface has been
-determined a protocol called ARP/RARP isused to identify
-the MAC address of the target interface. ARP stands for Address
-Resolution Protocol, and is a broadcast oriented method that
-uses UDP (User Datagram Protocol) to send a request to all
-interfaces on the local network segment using the all 1's MAC
-address. Network interfaces are programmed to respond to two
-MAC addresses only; their own unique address and the address
-ff:ff:ff:ff:ff:ff. The reply packet from an ARP request will
-contain the MAC address and the primary IP address for each
-interface.</P
-><P
->The <TT
-CLASS="FILENAME"
->/etc/hosts</TT
-> file is foundational to all
-Unix/Linux TCP/IP installations and as a minumum will contain
-the localhost and local network interface IP addresses and the
-primary names by which they are known within the local machine.
-This file helps to prime the pump so that a basic level of name
-resolution can exist before any other method of name resolution
-becomes available.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN57"
-><TT
-CLASS="FILENAME"
->/etc/resolv.conf</TT
-></A
-></H2
-><P
->This file tells the name resolution libraries:</P
-><P
-></P
-><UL
-><LI
-><P
->The name of the domain to which the machine
- belongs
- </P
-></LI
-><LI
-><P
->The name(s) of any domains that should be
- automatically searched when trying to resolve unqualified
- host names to their IP address
- </P
-></LI
-><LI
-><P
->The name or IP address of available Domain
- Name Servers that may be asked to perform name to address
- translation lookups
- </P
-></LI
-></UL
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN68"
-><TT
-CLASS="FILENAME"
->/etc/host.conf</TT
-></A
-></H2
-><P
-><TT
-CLASS="FILENAME"
->/etc/host.conf</TT
-> is the primary means by
-which the setting in /etc/resolv.conf may be affected. It is a
-critical configuration file. This file controls the order by
-which name resolution may procede. The typical structure is:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> order hosts,bind
- multi on</PRE
-></P
-><P
->then both addresses should be returned. Please refer to the
-man page for host.conf for further details.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN76"
-><TT
-CLASS="FILENAME"
->/etc/nsswitch.conf</TT
-></A
-></H2
-><P
->This file controls the actual name resolution targets. The
-file typically has resolver object specifications as follows:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> # /etc/nsswitch.conf
- #
- # Name Service Switch configuration file.
- #
-
- passwd: compat
- # Alternative entries for password authentication are:
- # passwd: compat files nis ldap winbind
- shadow: compat
- group: compat
-
- hosts: files nis dns
- # Alternative entries for host name resolution are:
- # hosts: files dns nis nis+ hesoid db compat ldap wins
- networks: nis files dns
-
- ethers: nis files
- protocols: nis files
- rpc: nis files
- services: nis files</PRE
-></P
-><P
->Of course, each of these mechanisms requires that the appropriate
-facilities and/or services are correctly configured.</P
-><P
->It should be noted that unless a network request/message must be
-sent, TCP/IP networks are silent. All TCP/IP communications assumes a
-principal of speaking only when necessary.</P
-><P
->Samba version 2.2.0 will add Linux support for extensions to
-the name service switch infrastructure so that linux clients will
-be able to obtain resolution of MS Windows NetBIOS names to IP
-Addresses. To gain this functionality Samba needs to be compiled
-with appropriate arguments to the make command (ie: <B
-CLASS="COMMAND"
->make
-nsswitch/libnss_wins.so</B
->). The resulting library should
-then be installed in the <TT
-CLASS="FILENAME"
->/lib</TT
-> directory and
-the "wins" parameter needs to be added to the "hosts:" line in
-the <TT
-CLASS="FILENAME"
->/etc/nsswitch.conf</TT
-> file. At this point it
-will be possible to ping any MS Windows machine by it's NetBIOS
-machine name, so long as that machine is within the workgroup to
-which both the samba machine and the MS Windows machine belong.</P
-></DIV
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN88"
->Name resolution as used within MS Windows networking</A
-></H1
-><P
->MS Windows networking is predicated about the name each machine
-is given. This name is known variously (and inconsistently) as
-the "computer name", "machine name", "networking name", "netbios name",
-"SMB name". All terms mean the same thing with the exception of
-"netbios name" which can apply also to the name of the workgroup or the
-domain name. The terms "workgroup" and "domain" are really just a
-simply name with which the machine is associated. All NetBIOS names
-are exactly 16 characters in length. The 16th character is reserved.
-It is used to store a one byte value that indicates service level
-information for the NetBIOS name that is registered. A NetBIOS machine
-name is therefore registered for each service type that is provided by
-the client/server.</P
-><P
->The following are typical NetBIOS name/service type registrations:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> Unique NetBIOS Names:
- MACHINENAME&#60;00&#62; = Server Service is running on MACHINENAME
- MACHINENAME&#60;03&#62; = Generic Machine Name (NetBIOS name)
- MACHINENAME&#60;20&#62; = LanMan Server service is running on MACHINENAME
- WORKGROUP&#60;1b&#62; = Domain Master Browser
-
- Group Names:
- WORKGROUP&#60;03&#62; = Generic Name registered by all members of WORKGROUP
- WORKGROUP&#60;1c&#62; = Domain Controllers / Netlogon Servers
- WORKGROUP&#60;1d&#62; = Local Master Browsers
- WORKGROUP&#60;1e&#62; = Internet Name Resolvers</PRE
-></P
-><P
->It should be noted that all NetBIOS machines register their own
-names as per the above. This is in vast contrast to TCP/IP
-installations where traditionally the system administrator will
-determine in the /etc/hosts or in the DNS database what names
-are associated with each IP address.</P
-><P
->One further point of clarification should be noted, the <TT
-CLASS="FILENAME"
->/etc/hosts</TT
->
-file and the DNS records do not provide the NetBIOS name type information
-that MS Windows clients depend on to locate the type of service that may
-be needed. An example of this is what happens when an MS Windows client
-wants to locate a domain logon server. It find this service and the IP
-address of a server that provides it by performing a lookup (via a
-NetBIOS broadcast) for enumeration of all machines that have
-registered the name type *&#60;1c&#62;. A logon request is then sent to each
-IP address that is returned in the enumerated list of IP addresses. Which
-ever machine first replies then ends up providing the logon services.</P
-><P
->The name "workgroup" or "domain" really can be confusing since these
-have the added significance of indicating what is the security
-architecture of the MS Windows network. The term "workgroup" indicates
-that the primary nature of the network environment is that of a
-peer-to-peer design. In a WORKGROUP all machines are responsible for
-their own security, and generally such security is limited to use of
-just a password (known as SHARE MORE security). In most situations
-with peer-to-peer networking the users who control their own machines
-will simply opt to have no security at all. It is possible to have
-USER MODE security in a WORKGROUP environment, thus requiring use
-of a user name and a matching password.</P
-><P
->MS Windows networking is thus predetermined to use machine names
-for all local and remote machine message passing. The protocol used is
-called Server Message Block (SMB) and this is implemented using
-the NetBIOS protocol (Network Basic Input Output System). NetBIOS can
-be encapsulated using LLC (Logical Link Control) protocol - in which case
-the resulting protocol is called NetBEUI (Network Basic Extended User
-Interface). NetBIOS can also be run over IPX (Internetworking Packet
-Exchange) protocol as used by Novell NetWare, and it can be run
-over TCP/IP protocols - in which case the resulting protocol is called
-NBT or NetBT, the NetBIOS over TCP/IP.</P
-><P
->MS Windows machines use a complex array of name resolution mechanisms.
-Since we are primarily concerned with TCP/IP this demonstration is
-limited to this area.</P
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN100"
->The NetBIOS Name Cache</A
-></H2
-><P
->All MS Windows machines employ an in memory buffer in which is
-stored the NetBIOS names and their IP addresses for all external
-machines that that the local machine has communicated with over the
-past 10-15 minutes. It is more efficient to obtain an IP address
-for a machine from the local cache than it is to go through all the
-configured name resolution mechanisms.</P
-><P
->If a machine whose name is in the local name cache has been shut
-down before the name had been expired and flushed from the cache, then
-an attempt to exchange a message with that machine will be subject
-to time-out delays. ie: It's name is in the cache, so a name resolution
-lookup will succeed, but the machine can not respond. This can be
-frustrating for users - but it is a characteristic of the protocol.</P
-><P
->The MS Windows utility that allows examination of the NetBIOS
-name cache is called "nbtstat". The Samba equivalent of this
-is called "nmblookup".</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN105"
->The LMHOSTS file</A
-></H2
-><P
->This file is usually located in MS Windows NT 4.0 or
-2000 in <TT
-CLASS="FILENAME"
->C:\WINNT\SYSTEM32\DRIVERS\ETC</TT
-> and contains
-the IP Address and the machine name in matched pairs. The
-<TT
-CLASS="FILENAME"
->LMHOSTS</TT
-> file performs NetBIOS name
-to IP address mapping oriented.</P
-><P
->It typically looks like:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> # Copyright (c) 1998 Microsoft Corp.
- #
- # This is a sample LMHOSTS file used by the Microsoft Wins Client (NetBIOS
- # over TCP/IP) stack for Windows98
- #
- # This file contains the mappings of IP addresses to NT computernames
- # (NetBIOS) names. Each entry should be kept on an individual line.
- # The IP address should be placed in the first column followed by the
- # corresponding computername. The address and the comptername
- # should be separated by at least one space or tab. The "#" character
- # is generally used to denote the start of a comment (see the exceptions
- # below).
- #
- # This file is compatible with Microsoft LAN Manager 2.x TCP/IP lmhosts
- # files and offers the following extensions:
- #
- # #PRE
- # #DOM:&lt;domain&gt;
- # #INCLUDE &lt;filename&gt;
- # #BEGIN_ALTERNATE
- # #END_ALTERNATE
- # \0xnn (non-printing character support)
- #
- # Following any entry in the file with the characters "#PRE" will cause
- # the entry to be preloaded into the name cache. By default, entries are
- # not preloaded, but are parsed only after dynamic name resolution fails.
- #
- # Following an entry with the "#DOM:&lt;domain&gt;" tag will associate the
- # entry with the domain specified by &lt;domain&gt;. This affects how the
- # browser and logon services behave in TCP/IP environments. To preload
- # the host name associated with #DOM entry, it is necessary to also add a
- # #PRE to the line. The &lt;domain&gt; is always preloaded although it will not
- # be shown when the name cache is viewed.
- #
- # Specifying "#INCLUDE &lt;filename&gt;" will force the RFC NetBIOS (NBT)
- # software to seek the specified &lt;filename&gt; and parse it as if it were
- # local. &lt;filename&gt; is generally a UNC-based name, allowing a
- # centralized lmhosts file to be maintained on a server.
- # It is ALWAYS necessary to provide a mapping for the IP address of the
- # server prior to the #INCLUDE. This mapping must use the #PRE directive.
- # In addtion the share "public" in the example below must be in the
- # LanManServer list of "NullSessionShares" in order for client machines to
- # be able to read the lmhosts file successfully. This key is under
- # \machine\system\currentcontrolset\services\lanmanserver\parameters\nullsessionshares
- # in the registry. Simply add "public" to the list found there.
- #
- # The #BEGIN_ and #END_ALTERNATE keywords allow multiple #INCLUDE
- # statements to be grouped together. Any single successful include
- # will cause the group to succeed.
- #
- # Finally, non-printing characters can be embedded in mappings by
- # first surrounding the NetBIOS name in quotations, then using the
- # \0xnn notation to specify a hex value for a non-printing character.
- #
- # The following example illustrates all of these extensions:
- #
- # 102.54.94.97 rhino #PRE #DOM:networking #net group's DC
- # 102.54.94.102 "appname \0x14" #special app server
- # 102.54.94.123 popular #PRE #source server
- # 102.54.94.117 localsrv #PRE #needed for the include
- #
- # #BEGIN_ALTERNATE
- # #INCLUDE \\localsrv\public\lmhosts
- # #INCLUDE \\rhino\public\lmhosts
- # #END_ALTERNATE
- #
- # In the above example, the "appname" server contains a special
- # character in its name, the "popular" and "localsrv" server names are
- # preloaded, and the "rhino" server name is specified so it can be used
- # to later #INCLUDE a centrally maintained lmhosts file if the "localsrv"
- # system is unavailable.
- #
- # Note that the whole file is parsed including comments on each lookup,
- # so keeping the number of comments to a minimum will improve performance.
- # Therefore it is not advisable to simply add lmhosts file entries onto the
- # end of this file.</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN113"
->HOSTS file</A
-></H2
-><P
->This file is usually located in MS Windows NT 4.0 or 2000 in
-<TT
-CLASS="FILENAME"
->C:\WINNT\SYSTEM32\DRIVERS\ETC</TT
-> and contains
-the IP Address and the IP hostname in matched pairs. It can be
-used by the name resolution infrastructure in MS Windows, depending
-on how the TCP/IP environment is configured. This file is in
-every way the equivalent of the Unix/Linux <TT
-CLASS="FILENAME"
->/etc/hosts</TT
-> file.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN118"
->DNS Lookup</A
-></H2
-><P
->This capability is configured in the TCP/IP setup area in the network
-configuration facility. If enabled an elaborate name resolution sequence
-is followed the precise nature of which isdependant on what the NetBIOS
-Node Type parameter is configured to. A Node Type of 0 means use
-NetBIOS broadcast (over UDP broadcast) is first used if the name
-that is the subject of a name lookup is not found in the NetBIOS name
-cache. If that fails then DNS, HOSTS and LMHOSTS are checked. If set to
-Node Type 8, then a NetBIOS Unicast (over UDP Unicast) is sent to the
-WINS Server to obtain a lookup before DNS, HOSTS, LMHOSTS, or broadcast
-lookup is used.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN121"
->WINS Lookup</A
-></H2
-><P
->A WINS (Windows Internet Name Server) service is the equivaent of the
-rfc1001/1002 specified NBNS (NetBIOS Name Server). A WINS server stores
-the names and IP addresses that are registered by a Windows client
-if the TCP/IP setup has been given at least one WINS Server IP Address.</P
-><P
->To configure Samba to be a WINS server the following parameter needs
-to be added to the <TT
-CLASS="FILENAME"
->smb.conf</TT
-> file:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> wins support = Yes</PRE
-></P
-><P
->To configure Samba to use a WINS server the following parameters are
-needed in the smb.conf file:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> wins support = No
- wins server = xxx.xxx.xxx.xxx</PRE
-></P
-><P
->where <TT
-CLASS="REPLACEABLE"
-><I
->xxx.xxx.xxx.xxx</I
-></TT
-> is the IP address
-of the WINS server.</P
-></DIV
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN133"
->How browsing functions and how to deploy stable and
-dependable browsing using Samba</A
-></H1
-><P
->As stated above, MS Windows machines register their NetBIOS names
-(ie: the machine name for each service type in operation) on start
-up. Also, as stated above, the exact method by which this name registration
-takes place is determined by whether or not the MS Windows client/server
-has been given a WINS server address, whether or not LMHOSTS lookup
-is enabled, or if DNS for NetBIOS name resolution is enabled, etc.</P
-><P
->In the case where there is no WINS server all name registrations as
-well as name lookups are done by UDP broadcast. This isolates name
-resolution to the local subnet, unless LMHOSTS is used to list all
-names and IP addresses. In such situations Samba provides a means by
-which the samba server name may be forcibly injected into the browse
-list of a remote MS Windows network (using the "remote announce" parameter).</P
-><P
->Where a WINS server is used, the MS Windows client will use UDP
-unicast to register with the WINS server. Such packets can be routed
-and thus WINS allows name resolution to function across routed networks.</P
-><P
->During the startup process an election will take place to create a
-local master browser if one does not already exist. On each NetBIOS network
-one machine will be elected to function as the domain master browser. This
-domain browsing has nothing to do with MS security domain control.
-Instead, the domain master browser serves the role of contacting each local
-master browser (found by asking WINS or from LMHOSTS) and exchanging browse
-list contents. This way every master browser will eventually obtain a complete
-list of all machines that are on the network. Every 11-15 minutes an election
-is held to determine which machine will be the master browser. By nature of
-the election criteria used, the machine with the highest uptime, or the
-most senior protocol version, or other criteria, will win the election
-as domain master browser.</P
-><P
->Clients wishing to browse the network make use of this list, but also depend
-on the availability of correct name resolution to the respective IP
-address/addresses. </P
-><P
->Any configuration that breaks name resolution and/or browsing intrinsics
-will annoy users because they will have to put up with protracted
-inability to use the network services.</P
-><P
->Samba supports a feature that allows forced synchonisation
-of browse lists across routed networks using the "remote
-browse sync" parameter in the smb.conf file. This causes Samba
-to contact the local master browser on a remote network and
-to request browse list synchronisation. This effectively bridges
-two networks that are separated by routers. The two remote
-networks may use either broadcast based name resolution or WINS
-based name resolution, but it should be noted that the "remote
-browse sync" parameter provides browse list synchronisation - and
-that is distinct from name to address resolution, in other
-words, for cross subnet browsing to function correctly it is
-essential that a name to address resolution mechanism be provided.
-This mechanism could be via DNS, <TT
-CLASS="FILENAME"
->/etc/hosts</TT
->,
-and so on.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN143"
->MS Windows security options and how to configure
-Samba for seemless integration</A
-></H1
-><P
->MS Windows clients may use encrypted passwords as part of a
-challenege/response authentication model (a.k.a. NTLMv1) or
-alone, or clear text strings for simple password based
-authentication. It should be realized that with the SMB
-protocol the password is passed over the network either
-in plain text or encrypted, but not both in the same
-authentication requets.</P
-><P
->When encrypted passwords are used a password that has been
-entered by the user is encrypted in two ways:</P
-><P
-></P
-><UL
-><LI
-><P
->An MD4 hash of the UNICODE of the password
- string. This is known as the NT hash.
- </P
-></LI
-><LI
-><P
->The password is converted to upper case,
- and then padded or trucated to 14 bytes. This string is
- then appended with 5 bytes of NULL characters and split to
- form two 56 bit DES keys to encrypt a "magic" 8 byte value.
- The resulting 16 bytes for the LanMan hash.
- </P
-></LI
-></UL
-><P
->You should refer to the <A
-HREF="ENCRYPTION.html"
-TARGET="_top"
->Password Encryption</A
-> chapter in this HOWTO collection
-for more details on the inner workings</P
-><P
->MS Windows 95 pre-service pack 1, MS Windows NT versions 3.x
-and version 4.0 pre-service pack 3 will use either mode of
-password authentication. All versions of MS Windows that follow
-these versions no longer support plain text passwords by default.</P
-><P
->MS Windows clients have a habit of dropping network mappings that
-have been idle for 10 minutes or longer. When the user attempts to
-use the mapped drive connection that has been dropped the SMB protocol
-has a mechanism by which the connection can be re-established using
-a cached copy of the password.</P
-><P
->When Microsoft changed the default password mode, they dropped support for
-caching of the plain text password. This means that when the registry
-parameter is changed to re-enable use of plain text passwords it appears to
-work, but when a dropped mapping attempts to revalidate it will fail if
-the remote authentication server does not support encrypted passwords.
-This means that it is definitely not a good idea to re-enable plain text
-password support in such clients.</P
-><P
->The following parameters can be used to work around the
-issue of Windows 9x client upper casing usernames and
-password before transmitting them to the SMB server
-when using clear text authentication.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> <A
-HREF="smb.conf.5.html#PASSWORDLEVEL"
-TARGET="_top"
->passsword level</A
-> = <TT
-CLASS="REPLACEABLE"
-><I
->integer</I
-></TT
->
- <A
-HREF="smb.conf.5.html#USERNAMELEVEL"
-TARGET="_top"
->username level</A
-> = <TT
-CLASS="REPLACEABLE"
-><I
->integer</I
-></TT
-></PRE
-></P
-><P
->By default Samba will lower case the username before attempting
-to lookup the user in the database of local system accounts.
-Because UNIX usernames conventionally only contain lower case
-character, the <TT
-CLASS="PARAMETER"
-><I
->username level</I
-></TT
-> parameter
-is rarely even needed.</P
-><P
->However, password on UNIX systems often make use of mixed case
-characters. This means that in order for a user on a Windows 9x
-client to connect to a Samba server using clear text authentication,
-the <TT
-CLASS="PARAMETER"
-><I
->password level</I
-></TT
-> must be set to the maximum
-number of upper case letter which <I
-CLASS="EMPHASIS"
->could</I
-> appear
-is a password. Note that is the server OS uses the traditional
-DES version of crypt(), then a <TT
-CLASS="PARAMETER"
-><I
->password level</I
-></TT
->
-of 8 will result in case insensitive passwords as seen from Windows
-users. This will also result in longer login times as Samba
-hash to compute the permutations of the password string and
-try them one by one until a match is located (or all combinations fail).</P
-><P
->The best option to adopt is to enable support for encrypted passwords
-where ever Samba is used. There are three configuration possibilities
-for support of encrypted passwords:</P
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN171"
->Use MS Windows NT as an authentication server</A
-></H2
-><P
->This method involves the additions of the following parameters
-in the smb.conf file:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> encrypt passwords = Yes
- security = server
- password server = "NetBIOS_name_of_PDC"</PRE
-></P
-><P
->There are two ways of identifying whether or not a username and
-password pair was valid or not. One uses the reply information provided
-as part of the authentication messaging process, the other uses
-just and error code.</P
-><P
->The down-side of this mode of configuration is the fact that
-for security reasons Samba will send the password server a bogus
-username and a bogus password and if the remote server fails to
-reject the username and password pair then an alternative mode
-of identification of validation is used. Where a site uses password
-lock out after a certain number of failed authentication attempts
-this will result in user lockouts.</P
-><P
->Use of this mode of authentication does require there to be
-a standard Unix account for the user, this account can be blocked
-to prevent logons by other than MS Windows clients.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN179"
->Make Samba a member of an MS Windows NT security domain</A
-></H2
-><P
->This method involves additon of the following paramters in the smb.conf file:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> encrypt passwords = Yes
- security = domain
- workgroup = "name of NT domain"
- password server = *</PRE
-></P
-><P
->The use of the "*" argument to "password server" will cause samba
-to locate the domain controller in a way analogous to the way
-this is done within MS Windows NT.</P
-><P
->In order for this method to work the Samba server needs to join the
-MS Windows NT security domain. This is done as follows:</P
-><P
-></P
-><UL
-><LI
-><P
->On the MS Windows NT domain controller using
- the Server Manager add a machine account for the Samba server.
- </P
-></LI
-><LI
-><P
->Next, on the Linux system execute:
- <B
-CLASS="COMMAND"
->smbpasswd -r PDC_NAME -j DOMAIN_NAME</B
->
- </P
-></LI
-></UL
-><P
->Use of this mode of authentication does require there to be
-a standard Unix account for the user in order to assign
-a uid once the account has been authenticated by the remote
-Windows DC. This account can be blocked to prevent logons by
-other than MS Windows clients by things such as setting an invalid
-shell in the <TT
-CLASS="FILENAME"
->/etc/passwd</TT
-> entry.</P
-><P
->An alternative to assigning UIDs to Windows users on a
-Samba member server is presented in the <A
-HREF="winbind.html"
-TARGET="_top"
->Winbind Overview</A
-> chapter in
-this HOWTO collection.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN196"
->Configure Samba as an authentication server</A
-></H2
-><P
->This mode of authentication demands that there be on the
-Unix/Linux system both a Unix style account as well as and
-smbpasswd entry for the user. The Unix system account can be
-locked if required as only the encrypted password will be
-used for SMB client authentication.</P
-><P
->This method involves addition of the following parameters to
-the smb.conf file:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->## please refer to the Samba PDC HOWTO chapter later in
-## this collection for more details
-[global]
- encrypt passwords = Yes
- security = user
- domain logons = Yes
- ; an OS level of 33 or more is recommended
- os level = 33
-
-[NETLOGON]
- path = /somewhare/in/file/system
- read only = yes</PRE
-></P
-><P
->in order for this method to work a Unix system account needs
-to be created for each user, as well as for each MS Windows NT/2000
-machine. The following structure is required.</P
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN203"
->Users</A
-></H3
-><P
->A user account that may provide a home directory should be
-created. The following Linux system commands are typical of
-the procedure for creating an account.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> # useradd -s /bin/bash -d /home/"userid" -m
- # passwd "userid"
- Enter Password: &lt;pw&gt;
-
- # smbpasswd -a "userid"
- Enter Password: &lt;pw&gt;</PRE
-></P
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN208"
->MS Windows NT Machine Accounts</A
-></H3
-><P
->These are required only when Samba is used as a domain
-controller. Refer to the Samba-PDC-HOWTO for more details.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> # useradd -a /bin/false -d /dev/null "machine_name"\$
- # passwd -l "machine_name"\$
- # smbpasswd -a -m "machine_name"</PRE
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN213"
->Conclusions</A
-></H1
-><P
->Samba provides a flexible means to operate as...</P
-><P
-></P
-><UL
-><LI
-><P
->A Stand-alone server - No special action is needed
- other than to create user accounts. Stand-alone servers do NOT
- provide network logon services, meaning that machines that use this
- server do NOT perform a domain logon but instead make use only of
- the MS Windows logon which is local to the MS Windows
- workstation/server.
- </P
-></LI
-><LI
-><P
->An MS Windows NT 3.x/4.0 security domain member.
- </P
-></LI
-><LI
-><P
->An alternative to an MS Windows NT 3.x/4.0
- Domain Controller.
- </P
-></LI
-></UL
-></DIV
-></DIV
-></BODY
-></HTML
-> \ No newline at end of file
diff --git a/docs/htmldocs/NT_Security.html b/docs/htmldocs/NT_Security.html
index e7bf9890a9d..081f7fb838a 100644
--- a/docs/htmldocs/NT_Security.html
+++ b/docs/htmldocs/NT_Security.html
@@ -1,7 +1,7 @@
<HTML
><HEAD
><TITLE
->UNIX Permission Bits and Windows NT Access Control Lists</TITLE
+>UNIX Permission Bits and WIndows NT Access Control Lists</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.57"></HEAD
@@ -20,7 +20,7 @@ CLASS="TITLEPAGE"
CLASS="TITLE"
><A
NAME="AEN1"
->UNIX Permission Bits and Windows NT Access Control Lists</A
+>UNIX Permission Bits and WIndows NT Access Control Lists</A
></H1
><HR></DIV
><DIV
@@ -44,7 +44,7 @@ NAME="AEN3"
><P
>In Samba 2.0.4 and above the default value of the
parameter <A
-HREF="smb.conf.5.html#NTACLSUPPORT"
+HREF="smb.conf.5.html#NTACLSUPPOR"
TARGET="_top"
><TT
CLASS="PARAMETER"
@@ -153,7 +153,7 @@ CLASS="REPLACEABLE"
>(Long name)</I
></TT
>
- is the descriptive string identifying the user (normally found in the
+ is the discriptive string identifying the user (normally found in the
GECOS field of the UNIX password database). Click on the <B
CLASS="COMMAND"
>Close
@@ -182,7 +182,7 @@ CLASS="COMMAND"
you to change the ownership of this file to yourself (clicking on
it will display a dialog box complaining that the user you are
currently logged onto the NT client cannot be found). The reason
- for this is that changing the ownership of a file is a privileged
+ for this is that changing the ownership of a file is a privilaged
operation in UNIX, available only to the <I
CLASS="EMPHASIS"
>root</I
@@ -192,7 +192,7 @@ CLASS="EMPHASIS"
client this will not work with Samba at this time.</P
><P
>There is an NT chown command that will work with Samba
- and allow a user with Administrator privilege connected
+ and allow a user with Administrator privillage connected
to a Samba 2.0.4 server as root to change the ownership of
files on both a local NTFS filesystem or remote mounted NTFS
or Samba drive. This is available as part of the <I
@@ -242,7 +242,7 @@ CLASS="REPLACEABLE"
>(Long name)</I
></TT
>
- is the descriptive string identifying the user (normally found in the
+ is the discriptive string identifying the user (normally found in the
GECOS field of the UNIX password database).</P
><P
>If the parameter <TT
@@ -274,7 +274,7 @@ NAME="AEN58"
></H2
><P
>The standard UNIX user/group/world triple and
- the corresponding "read", "write", "execute" permissions
+ the correspinding "read", "write", "execute" permissions
triples are mapped by Samba into a three element NT ACL
with the 'r', 'w', and 'x' bits mapped into the corresponding
NT permissions. The UNIX world permissions are mapped into
@@ -400,7 +400,7 @@ CLASS="COMMAND"
button will not return a list of users in Samba 2.0.4 (it will give
an error message of <B
CLASS="COMMAND"
->"The remote procedure call failed
+>"The remote proceedure call failed
and did not execute"</B
>). This means that you can only
manipulate the current user/group/world permissions listed in
@@ -450,7 +450,7 @@ CLASS="COMMAND"
CLASS="COMMAND"
>"Take
Ownership"</B
-> permission (displayed as <B
+> permission (dsplayed as <B
CLASS="COMMAND"
>"O"
</B
@@ -582,7 +582,7 @@ CLASS="PARAMETER"
></A
> parameter to provide compatibility
with Samba 2.0.4 where the permission change facility was introduced.
- To allow a user to modify all the user/group/world permissions on a file
+ To allow a user to modify all the user/group/world permissions on a file,
with no restrictions set this parameter to 000.</P
><P
>The <TT
diff --git a/docs/htmldocs/OS2-Client-HOWTO.html b/docs/htmldocs/OS2-Client-HOWTO.html
index d7a3132d151..84a424c017e 100644
--- a/docs/htmldocs/OS2-Client-HOWTO.html
+++ b/docs/htmldocs/OS2-Client-HOWTO.html
@@ -173,7 +173,7 @@ NAME="AEN33"
driver from an OS/2 system.</P
><P
>Install the NT driver first for that printer. Then,
- add to your smb.conf a parameter, "os2 driver map =
+ add to your smb.conf a paramater, "os2 driver map =
<TT
CLASS="REPLACEABLE"
><I
diff --git a/docs/htmldocs/PAM-Authentication-And-Samba.html b/docs/htmldocs/PAM-Authentication-And-Samba.html
deleted file mode 100644
index 33604d3e707..00000000000
--- a/docs/htmldocs/PAM-Authentication-And-Samba.html
+++ /dev/null
@@ -1,309 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Configuring PAM for distributed but centrally
-managed authentication</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.57"></HEAD
-><BODY
-CLASS="ARTICLE"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="ARTICLE"
-><DIV
-CLASS="TITLEPAGE"
-><H1
-CLASS="TITLE"
-><A
-NAME="AEN1"
->Configuring PAM for distributed but centrally
-managed authentication</A
-></H1
-><HR></DIV
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN3"
->Samba and PAM</A
-></H1
-><P
->A number of Unix systems (eg: Sun Solaris), as well as the
-xxxxBSD family and Linux, now utilize the Pluggable Authentication
-Modules (PAM) facility to provide all authentication,
-authorization and resource control services. Prior to the
-introduction of PAM, a decision to use an alternative to
-the system password database (<TT
-CLASS="FILENAME"
->/etc/passwd</TT
->)
-would require the provision of alternatives for all programs that provide
-security services. Such a choice would involve provision of
-alternatives to such programs as: <B
-CLASS="COMMAND"
->login</B
->,
-<B
-CLASS="COMMAND"
->passwd</B
->, <B
-CLASS="COMMAND"
->chown</B
->, etc.</P
-><P
->PAM provides a mechanism that disconnects these security programs
-from the underlying authentication/authorization infrastructure.
-PAM is configured either through one file <TT
-CLASS="FILENAME"
->/etc/pam.conf</TT
-> (Solaris),
-or by editing individual files that are located in <TT
-CLASS="FILENAME"
->/etc/pam.d</TT
->.</P
-><P
->The following is an example <TT
-CLASS="FILENAME"
->/etc/pam.d/login</TT
-> configuration file.
-This example had all options been uncommented is probably not usable
-as it stacks many conditions before allowing successful completion
-of the login process. Essentially all conditions can be disabled
-by commenting them out except the calls to <TT
-CLASS="FILENAME"
->pam_pwdb.so</TT
->.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->#%PAM-1.0
-# The PAM configuration file for the `login' service
-#
-auth required pam_securetty.so
-auth required pam_nologin.so
-# auth required pam_dialup.so
-# auth optional pam_mail.so
-auth required pam_pwdb.so shadow md5
-# account requisite pam_time.so
-account required pam_pwdb.so
-session required pam_pwdb.so
-# session optional pam_lastlog.so
-# password required pam_cracklib.so retry=3
-password required pam_pwdb.so shadow md5</PRE
-></P
-><P
->PAM allows use of replacable modules. Those available on a
-sample system include:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->$ /bin/ls /lib/security
-pam_access.so pam_ftp.so pam_limits.so
-pam_ncp_auth.so pam_rhosts_auth.so pam_stress.so
-pam_cracklib.so pam_group.so pam_listfile.so
-pam_nologin.so pam_rootok.so pam_tally.so
-pam_deny.so pam_issue.so pam_mail.so
-pam_permit.so pam_securetty.so pam_time.so
-pam_dialup.so pam_lastlog.so pam_mkhomedir.so
-pam_pwdb.so pam_shells.so pam_unix.so
-pam_env.so pam_ldap.so pam_motd.so
-pam_radius.so pam_smbpass.so pam_unix_acct.so
-pam_wheel.so pam_unix_auth.so pam_unix_passwd.so
-pam_userdb.so pam_warn.so pam_unix_session.so</PRE
-></P
-><P
->The following example for the login program replaces the use of
-the <TT
-CLASS="FILENAME"
->pam_pwdb.so</TT
-> module which uses the system
-password database (<TT
-CLASS="FILENAME"
->/etc/passwd</TT
->,
-<TT
-CLASS="FILENAME"
->/etc/shadow</TT
->, <TT
-CLASS="FILENAME"
->/etc/group</TT
->) with
-the module <TT
-CLASS="FILENAME"
->pam_smbpass.so</TT
-> which uses the Samba
-database which contains the Microsoft MD4 encrypted password
-hashes. This database is stored in either
-<TT
-CLASS="FILENAME"
->/usr/local/samba/private/smbpasswd</TT
->,
-<TT
-CLASS="FILENAME"
->/etc/samba/smbpasswd</TT
->, or in
-<TT
-CLASS="FILENAME"
->/etc/samba.d/smbpasswd</TT
->, depending on the
-Samba implementation for your Unix/Linux system. The
-<TT
-CLASS="FILENAME"
->pam_smbpass.so</TT
-> module is provided by
-Samba version 2.2.1 or later. It can be compiled only if the
-<TT
-CLASS="CONSTANT"
->--with-pam --with-pam_smbpass</TT
-> options are both
-provided to the Samba <B
-CLASS="COMMAND"
->configure</B
-> program.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->#%PAM-1.0
-# The PAM configuration file for the `login' service
-#
-auth required pam_smbpass.so nodelay
-account required pam_smbpass.so nodelay
-session required pam_smbpass.so nodelay
-password required pam_smbpass.so nodelay</PRE
-></P
-><P
->The following is the PAM configuration file for a particular
-Linux system. The default condition uses <TT
-CLASS="FILENAME"
->pam_pwdb.so</TT
->.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->#%PAM-1.0
-# The PAM configuration file for the `samba' service
-#
-auth required /lib/security/pam_pwdb.so nullok nodelay shadow audit
-account required /lib/security/pam_pwdb.so audit nodelay
-session required /lib/security/pam_pwdb.so nodelay
-password required /lib/security/pam_pwdb.so shadow md5</PRE
-></P
-><P
->In the following example the decision has been made to use the
-smbpasswd database even for basic samba authentication. Such a
-decision could also be made for the passwd program and would
-thus allow the smbpasswd passwords to be changed using the passwd
-program.</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->#%PAM-1.0
-# The PAM configuration file for the `samba' service
-#
-auth required /lib/security/pam_smbpass.so nodelay
-account required /lib/security/pam_pwdb.so audit nodelay
-session required /lib/security/pam_pwdb.so nodelay
-password required /lib/security/pam_smbpass.so nodelay smbconf=/etc/samba.d/smb.conf</PRE
-></P
-><P
->Note: PAM allows stacking of authentication mechanisms. It is
-also possible to pass information obtained within on PAM module through
-to the next module in the PAM stack. Please refer to the documentation for
-your particular system implementation for details regarding the specific
-capabilities of PAM in this environment. Some Linux implmentations also
-provide the <TT
-CLASS="FILENAME"
->pam_stack.so</TT
-> module that allows all
-authentication to be configured in a single central file. The
-<TT
-CLASS="FILENAME"
->pam_stack.so</TT
-> method has some very devoted followers
-on the basis that it allows for easier administration. As with all issues in
-life though, every decision makes trade-offs, so you may want examine the
-PAM documentation for further helpful information.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN45"
->Distributed Authentication</A
-></H1
-><P
->The astute administrator will realize from this that the
-combination of <TT
-CLASS="FILENAME"
->pam_smbpass.so</TT
->,
-<B
-CLASS="COMMAND"
->winbindd</B
->, and <B
-CLASS="COMMAND"
->rsync</B
-> (see
-<A
-HREF="http://rsync.samba.org/"
-TARGET="_top"
->http://rsync.samba.org/</A
->)
-will allow the establishment of a centrally managed, distributed
-user/password database that can also be used by all
-PAM (eg: Linux) aware programs and applications. This arrangement
-can have particularly potent advantages compared with the
-use of Microsoft Active Directory Service (ADS) in so far as
-reduction of wide area network authentication traffic.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN52"
->PAM Configuration in smb.conf</A
-></H1
-><P
->There is an option in smb.conf called <A
-HREF="smb.conf.5.html#OBEYPAMRESTRICTIONS"
-TARGET="_top"
->obey pam restrictions</A
->.
-The following is from the on-line help for this option in SWAT;</P
-><P
->When Samba 2.2 is configure to enable PAM support (i.e.
-<TT
-CLASS="CONSTANT"
->--with-pam</TT
->), 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 and to
-ignore any account or session management. Note that Samba always
-ignores PAM for authentication in the case of
-<A
-HREF="smb.conf.5.html#ENCRYPTPASSWORDS"
-TARGET="_top"
->encrypt passwords = yes</A
->.
-The reason is that PAM modules cannot support the challenge/response
-authentication mechanism needed in the presence of SMB
-password encryption. </P
-><P
->Default: <B
-CLASS="COMMAND"
->obey pam restrictions = no</B
-></P
-></DIV
-></DIV
-></BODY
-></HTML
-> \ No newline at end of file
diff --git a/docs/htmldocs/Samba-HOWTO-Collection.html b/docs/htmldocs/Samba-HOWTO-Collection.html
index 42570c2748b..346c2bc84d0 100644
--- a/docs/htmldocs/Samba-HOWTO-Collection.html
+++ b/docs/htmldocs/Samba-HOWTO-Collection.html
@@ -32,27 +32,6 @@ NAME="AEN4"
>SAMBA Team</A
></H3
><HR></DIV
-><HR><H1
-><A
-NAME="AEN9"
->Abstract</A
-></H1
-><P
->This book is a collection of HOWTOs added to Samba documentation over the years.
-I try to ensure that all are current, but sometimes the is a larger job
-than one person can maintain. The most recent version of this document
-can be found at <A
-HREF="http://www.samba.org/"
-TARGET="_top"
->http://www.samba.org/</A
->
-on the "Documentation" page. Please send updates to <A
-HREF="mailto:jerry@samba.org"
-TARGET="_top"
->jerry@samba.org</A
->.</P
-><P
->Cheers, jerry</P
><DIV
CLASS="TOC"
><DL
@@ -62,34 +41,34 @@ CLASS="TOC"
></DT
><DT
>1. <A
-HREF="#AEN15"
+HREF="#AEN10"
>How to Install and Test SAMBA</A
></DT
><DD
><DL
><DT
->1.1. <A
-HREF="#AEN17"
+><A
+HREF="#AEN12"
>Step 0: Read the man pages</A
></DT
><DT
->1.2. <A
-HREF="#AEN25"
+><A
+HREF="#AEN20"
>Step 1: Building the Binaries</A
></DT
><DT
->1.3. <A
-HREF="#AEN53"
+><A
+HREF="#AEN48"
>Step 2: The all important step</A
></DT
><DT
->1.4. <A
-HREF="#AEN57"
+><A
+HREF="#AEN52"
>Step 3: Create the smb configuration file.</A
></DT
><DT
->1.5. <A
-HREF="#AEN71"
+><A
+HREF="#AEN66"
>Step 4: Test your config file with
<B
CLASS="COMMAND"
@@ -97,81 +76,81 @@ CLASS="COMMAND"
></A
></DT
><DT
->1.6. <A
-HREF="#AEN77"
+><A
+HREF="#AEN72"
>Step 5: Starting the smbd and nmbd</A
></DT
><DD
><DL
><DT
->1.6.1. <A
-HREF="#AEN87"
+><A
+HREF="#AEN82"
>Step 5a: Starting from inetd.conf</A
></DT
><DT
->1.6.2. <A
-HREF="#AEN116"
+><A
+HREF="#AEN111"
>Step 5b. Alternative: starting it as a daemon</A
></DT
></DL
></DD
><DT
->1.7. <A
-HREF="#AEN132"
+><A
+HREF="#AEN127"
>Step 6: Try listing the shares available on your
server</A
></DT
><DT
->1.8. <A
-HREF="#AEN141"
+><A
+HREF="#AEN136"
>Step 7: Try connecting with the unix client</A
></DT
><DT
->1.9. <A
-HREF="#AEN157"
+><A
+HREF="#AEN152"
>Step 8: Try connecting from a DOS, WfWg, Win9x, WinNT,
Win2k, OS/2, etc... client</A
></DT
><DT
->1.10. <A
-HREF="#AEN171"
+><A
+HREF="#AEN166"
>What If Things Don't Work?</A
></DT
><DD
><DL
><DT
->1.10.1. <A
-HREF="#AEN176"
+><A
+HREF="#AEN171"
>Diagnosing Problems</A
></DT
><DT
->1.10.2. <A
-HREF="#AEN180"
+><A
+HREF="#AEN175"
>Scope IDs</A
></DT
><DT
->1.10.3. <A
-HREF="#AEN183"
+><A
+HREF="#AEN178"
>Choosing the Protocol Level</A
></DT
><DT
->1.10.4. <A
-HREF="#AEN192"
+><A
+HREF="#AEN187"
>Printing from UNIX to a Client PC</A
></DT
><DT
->1.10.5. <A
-HREF="#AEN196"
+><A
+HREF="#AEN191"
>Locking</A
></DT
><DT
->1.10.6. <A
-HREF="#AEN206"
+><A
+HREF="#AEN201"
>Mapping Usernames</A
></DT
><DT
->1.10.7. <A
-HREF="#AEN209"
+><A
+HREF="#AEN204"
>Other Character Sets</A
></DT
></DL
@@ -180,185 +159,77 @@ HREF="#AEN209"
></DD
><DT
>2. <A
-HREF="#AEN212"
->Integrating MS Windows networks with Samba</A
-></DT
-><DD
-><DL
-><DT
->2.1. <A
-HREF="#AEN223"
->Agenda</A
-></DT
-><DT
->2.2. <A
-HREF="#AEN245"
->Name Resolution in a pure Unix/Linux world</A
+HREF="#AEN207"
+>LanMan and NT Password Encryption in Samba 2.x</A
></DT
><DD
><DL
><DT
->2.2.1. <A
-HREF="#AEN261"
-><TT
-CLASS="FILENAME"
->/etc/hosts</TT
-></A
-></DT
-><DT
->2.2.2. <A
-HREF="#AEN277"
-><TT
-CLASS="FILENAME"
->/etc/resolv.conf</TT
-></A
-></DT
-><DT
->2.2.3. <A
-HREF="#AEN288"
-><TT
-CLASS="FILENAME"
->/etc/host.conf</TT
-></A
+><A
+HREF="#AEN218"
+>Introduction</A
></DT
><DT
->2.2.4. <A
-HREF="#AEN296"
-><TT
-CLASS="FILENAME"
->/etc/nsswitch.conf</TT
-></A
+><A
+HREF="#AEN222"
+>How does it work?</A
></DT
-></DL
-></DD
><DT
->2.3. <A
-HREF="#AEN308"
->Name resolution as used within MS Windows networking</A
+><A
+HREF="#AEN233"
+>Important Notes About Security</A
></DT
><DD
><DL
><DT
->2.3.1. <A
-HREF="#AEN320"
->The NetBIOS Name Cache</A
-></DT
-><DT
->2.3.2. <A
-HREF="#AEN325"
->The LMHOSTS file</A
-></DT
-><DT
->2.3.3. <A
-HREF="#AEN333"
->HOSTS file</A
-></DT
-><DT
->2.3.4. <A
-HREF="#AEN338"
->DNS Lookup</A
+><A
+HREF="#AEN252"
+>Advantages of SMB Encryption</A
></DT
><DT
->2.3.5. <A
-HREF="#AEN341"
->WINS Lookup</A
+><A
+HREF="#AEN259"
+>Advantages of non-encrypted passwords</A
></DT
></DL
></DD
><DT
->2.4. <A
-HREF="#AEN353"
->How browsing functions and how to deploy stable and
-dependable browsing using Samba</A
-></DT
-><DT
->2.5. <A
-HREF="#AEN363"
->MS Windows security options and how to configure
-Samba for seemless integration</A
-></DT
-><DD
-><DL
-><DT
->2.5.1. <A
-HREF="#AEN391"
->Use MS Windows NT as an authentication server</A
-></DT
-><DT
->2.5.2. <A
-HREF="#AEN399"
->Make Samba a member of an MS Windows NT security domain</A
-></DT
-><DT
->2.5.3. <A
-HREF="#AEN416"
->Configure Samba as an authentication server</A
-></DT
-><DD
-><DL
-><DT
->2.5.3.1. <A
-HREF="#AEN423"
->Users</A
+><A
+HREF="#AEN268"
+><A
+NAME="SMBPASSWDFILEFORMAT"
+></A
+>The smbpasswd file</A
></DT
><DT
->2.5.3.2. <A
-HREF="#AEN428"
->MS Windows NT Machine Accounts</A
+><A
+HREF="#AEN320"
+>The smbpasswd Command</A
></DT
-></DL
-></DD
-></DL
-></DD
><DT
->2.6. <A
-HREF="#AEN433"
->Conclusions</A
+><A
+HREF="#AEN359"
+>Setting up Samba to support LanManager Encryption</A
></DT
></DL
></DD
><DT
>3. <A
-HREF="#AEN443"
->Configuring PAM for distributed but centrally
-managed authentication</A
-></DT
-><DD
-><DL
-><DT
->3.1. <A
-HREF="#AEN454"
->Samba and PAM</A
-></DT
-><DT
->3.2. <A
-HREF="#AEN496"
->Distributed Authentication</A
-></DT
-><DT
->3.3. <A
-HREF="#AEN503"
->PAM Configuration in smb.conf</A
-></DT
-></DL
-></DD
-><DT
->4. <A
-HREF="#AEN512"
+HREF="#AEN374"
>Hosting a Microsoft Distributed File System tree on Samba</A
></DT
><DD
><DL
><DT
->4.1. <A
-HREF="#AEN523"
+><A
+HREF="#AEN385"
>Instructions</A
></DT
><DD
><DL
><DT
->4.1.1. <A
-HREF="#AEN558"
+><A
+HREF="#AEN420"
>Notes</A
></DT
></DL
@@ -366,449 +237,334 @@ HREF="#AEN558"
></DL
></DD
><DT
->5. <A
-HREF="#AEN567"
->UNIX Permission Bits and Windows NT Access Control Lists</A
-></DT
-><DD
-><DL
-><DT
->5.1. <A
-HREF="#AEN578"
->Viewing and changing UNIX permissions using the NT
- security dialogs</A
-></DT
-><DT
->5.2. <A
-HREF="#AEN587"
->How to view file security on a Samba share</A
-></DT
-><DT
->5.3. <A
-HREF="#AEN598"
->Viewing file ownership</A
-></DT
-><DT
->5.4. <A
-HREF="#AEN618"
->Viewing file or directory permissions</A
-></DT
-><DD
-><DL
-><DT
->5.4.1. <A
-HREF="#AEN633"
->File Permissions</A
-></DT
-><DT
->5.4.2. <A
-HREF="#AEN647"
->Directory Permissions</A
-></DT
-></DL
-></DD
-><DT
->5.5. <A
-HREF="#AEN654"
->Modifying file or directory permissions</A
-></DT
-><DT
->5.6. <A
-HREF="#AEN676"
->Interaction with the standard Samba create mask
- parameters</A
-></DT
-><DT
->5.7. <A
-HREF="#AEN740"
->Interaction with the standard Samba file attribute
- mapping</A
-></DT
-></DL
-></DD
-><DT
->6. <A
-HREF="#AEN750"
+>4. <A
+HREF="#AEN429"
>Printing Support in Samba 2.2.x</A
></DT
><DD
><DL
><DT
->6.1. <A
-HREF="#AEN761"
+><A
+HREF="#AEN440"
>Introduction</A
></DT
><DT
->6.2. <A
-HREF="#AEN783"
+><A
+HREF="#AEN457"
>Configuration</A
></DT
><DD
><DL
><DT
->6.2.1. <A
-HREF="#AEN794"
->Creating [print$]</A
-></DT
-><DT
->6.2.2. <A
-HREF="#AEN829"
->Setting Drivers for Existing Printers</A
-></DT
-><DT
->6.2.3. <A
-HREF="#AEN846"
+><A
+HREF="#AEN511"
>Support a large number of printers</A
></DT
-><DT
->6.2.4. <A
-HREF="#AEN857"
->Adding New Printers via the Windows NT APW</A
-></DT
-><DT
->6.2.5. <A
-HREF="#AEN882"
->Samba and Printer Ports</A
-></DT
></DL
></DD
><DT
->6.3. <A
-HREF="#AEN890"
+><A
+HREF="#AEN522"
>The Imprints Toolset</A
></DT
><DD
><DL
><DT
->6.3.1. <A
-HREF="#AEN894"
+><A
+HREF="#AEN526"
>What is Imprints?</A
></DT
><DT
->6.3.2. <A
-HREF="#AEN904"
+><A
+HREF="#AEN536"
>Creating Printer Driver Packages</A
></DT
><DT
->6.3.3. <A
-HREF="#AEN907"
+><A
+HREF="#AEN539"
>The Imprints server</A
></DT
><DT
->6.3.4. <A
-HREF="#AEN911"
+><A
+HREF="#AEN543"
>The Installation Client</A
></DT
></DL
></DD
><DT
->6.4. <A
-HREF="#AEN933"
+><A
+HREF="#AEN565"
><A
NAME="MIGRATION"
></A
->Migration to from Samba 2.0.x to 2.2.x</A
+>Migration to from Samba 2.0.x to
+ 2.2.x</A
></DT
></DL
></DD
><DT
->7. <A
-HREF="#AEN977"
+>5. <A
+HREF="#AEN594"
>security = domain in Samba 2.x</A
></DT
><DD
><DL
><DT
->7.1. <A
-HREF="#AEN995"
+><A
+HREF="#AEN612"
>Joining an NT Domain with Samba 2.2</A
></DT
><DT
->7.2. <A
-HREF="#AEN1059"
+><A
+HREF="#AEN676"
>Samba and Windows 2000 Domains</A
></DT
><DT
->7.3. <A
-HREF="#AEN1064"
+><A
+HREF="#AEN681"
>Why is this better than security = server?</A
></DT
></DL
></DD
><DT
->8. <A
-HREF="#AEN1080"
->How to Configure Samba 2.2 as a Primary Domain Controller</A
+>6. <A
+HREF="#AEN697"
+>How to Configure Samba 2.2.x as a Primary Domain Controller</A
></DT
><DD
><DL
><DT
->8.1. <A
-HREF="#AEN1097"
->Prerequisite Reading</A
-></DT
-><DT
->8.2. <A
-HREF="#AEN1103"
+><A
+HREF="#AEN708"
>Background</A
></DT
><DT
->8.3. <A
-HREF="#AEN1143"
+><A
+HREF="#AEN745"
>Configuring the Samba Domain Controller</A
></DT
><DT
->8.4. <A
-HREF="#AEN1186"
+><A
+HREF="#AEN788"
>Creating Machine Trust Accounts and Joining Clients
to the Domain</A
></DT
-><DD
-><DL
-><DT
->8.4.1. <A
-HREF="#AEN1200"
->Manually creating machine trust accounts</A
-></DT
><DT
->8.4.2. <A
-HREF="#AEN1228"
->Creating machine trust accounts "on the fly"</A
-></DT
-></DL
-></DD
-><DT
->8.5. <A
-HREF="#AEN1239"
+><A
+HREF="#AEN827"
>Common Problems and Errors</A
></DT
><DT
->8.6. <A
-HREF="#AEN1287"
+><A
+HREF="#AEN855"
>System Policies and Profiles</A
></DT
><DT
->8.7. <A
-HREF="#AEN1331"
+><A
+HREF="#AEN895"
>What other help can I get ?</A
></DT
-><DT
->8.8. <A
-HREF="#AEN1445"
->Domain Control for Windows 9x/ME</A
-></DT
-><DD
-><DL
-><DT
->8.8.1. <A
-HREF="#AEN1475"
->Configuration Instructions: Network Logons</A
-></DT
-><DT
->8.8.2. <A
-HREF="#AEN1509"
->Configuration Instructions: Setting up Roaming User Profiles</A
-></DT
><DD
><DL
><DT
->8.8.2.1. <A
-HREF="#AEN1517"
->Windows NT Configuration</A
-></DT
-><DT
->8.8.2.2. <A
-HREF="#AEN1525"
->Windows 9X Configuration</A
-></DT
-><DT
->8.8.2.3. <A
-HREF="#AEN1533"
->Win9X and WinNT Configuration</A
-></DT
-><DT
->8.8.2.4. <A
-HREF="#AEN1540"
->Windows 9X Profile Setup</A
-></DT
-><DT
->8.8.2.5. <A
-HREF="#AEN1576"
->Windows NT Workstation 4.0</A
-></DT
-><DT
->8.8.2.6. <A
-HREF="#AEN1589"
->Windows NT Server</A
+><A
+HREF="#AEN942"
+>URLs and similar</A
></DT
><DT
->8.8.2.7. <A
-HREF="#AEN1592"
->Sharing Profiles between W95 and NT Workstation 4.0</A
+><A
+HREF="#AEN966"
+>Mailing Lists</A
></DT
></DL
></DD
-></DL
-></DD
><DT
->8.9. <A
-HREF="#AEN1602"
+><A
+HREF="#AEN1005"
>DOMAIN_CONTROL.txt : Windows NT Domain Control &#38; Samba</A
></DT
></DL
></DD
><DT
->9. <A
-HREF="#AEN1627"
->Unified Logons between Windows NT and UNIX using Winbind</A
+>7. <A
+HREF="#AEN1029"
+>Unifed Logons between Windows NT and UNIX using Winbind</A
></DT
><DD
><DL
><DT
->9.1. <A
-HREF="#AEN1645"
+><A
+HREF="#AEN1047"
>Abstract</A
></DT
><DT
->9.2. <A
-HREF="#AEN1649"
+><A
+HREF="#AEN1051"
>Introduction</A
></DT
><DT
->9.3. <A
-HREF="#AEN1662"
+><A
+HREF="#AEN1064"
>What Winbind Provides</A
></DT
><DD
><DL
><DT
->9.3.1. <A
-HREF="#AEN1669"
+><A
+HREF="#AEN1071"
>Target Uses</A
></DT
></DL
></DD
><DT
->9.4. <A
-HREF="#AEN1673"
+><A
+HREF="#AEN1075"
>How Winbind Works</A
></DT
><DD
><DL
><DT
->9.4.1. <A
-HREF="#AEN1678"
+><A
+HREF="#AEN1080"
>Microsoft Remote Procedure Calls</A
></DT
><DT
->9.4.2. <A
-HREF="#AEN1682"
+><A
+HREF="#AEN1084"
>Name Service Switch</A
></DT
><DT
->9.4.3. <A
-HREF="#AEN1698"
+><A
+HREF="#AEN1100"
>Pluggable Authentication Modules</A
></DT
><DT
->9.4.4. <A
-HREF="#AEN1706"
+><A
+HREF="#AEN1108"
>User and Group ID Allocation</A
></DT
><DT
->9.4.5. <A
-HREF="#AEN1710"
+><A
+HREF="#AEN1112"
>Result Caching</A
></DT
></DL
></DD
><DT
->9.5. <A
-HREF="#AEN1713"
+><A
+HREF="#AEN1115"
>Installation and Configuration</A
></DT
><DT
->9.6. <A
-HREF="#AEN1719"
+><A
+HREF="#AEN1121"
>Limitations</A
></DT
><DT
->9.7. <A
-HREF="#AEN1731"
+><A
+HREF="#AEN1133"
>Conclusion</A
></DT
></DL
></DD
><DT
->10. <A
-HREF="#AEN1734"
->OS2 Client HOWTO</A
+>8. <A
+HREF="#AEN1136"
+>UNIX Permission Bits and WIndows NT Access Control Lists</A
></DT
><DD
><DL
><DT
->10.1. <A
-HREF="#AEN1745"
->FAQs</A
+><A
+HREF="#AEN1147"
+>Viewing and changing UNIX permissions using the NT
+ security dialogs</A
></DT
-><DD
-><DL
><DT
->10.1.1. <A
-HREF="#AEN1747"
->How can I configure OS/2 Warp Connect or
- OS/2 Warp 4 as a client for Samba?</A
+><A
+HREF="#AEN1156"
+>How to view file security on a Samba share</A
></DT
><DT
->10.1.2. <A
-HREF="#AEN1762"
->How can I configure OS/2 Warp 3 (not Connect),
- OS/2 1.2, 1.3 or 2.x for Samba?</A
+><A
+HREF="#AEN1167"
+>Viewing file ownership</A
></DT
><DT
->10.1.3. <A
-HREF="#AEN1771"
->Are there any other issues when OS/2 (any version)
- is used as a client?</A
+><A
+HREF="#AEN1187"
+>Viewing file or directory permissions</A
+></DT
+><DD
+><DL
+><DT
+><A
+HREF="#AEN1202"
+>File Permissions</A
></DT
><DT
->10.1.4. <A
-HREF="#AEN1775"
->How do I get printer driver download working
- for OS/2 clients?</A
+><A
+HREF="#AEN1216"
+>Directory Permissions</A
></DT
></DL
></DD
+><DT
+><A
+HREF="#AEN1223"
+>Modifying file or directory permissions</A
+></DT
+><DT
+><A
+HREF="#AEN1245"
+>Interaction with the standard Samba create mask
+ parameters</A
+></DT
+><DT
+><A
+HREF="#AEN1309"
+>Interaction with the standard Samba file attribute
+ mapping</A
+></DT
></DL
></DD
><DT
->11. <A
-HREF="#AEN1784"
->HOWTO Access Samba source code via CVS</A
+>9. <A
+HREF="#AEN1319"
+>OS2 Client HOWTO</A
></DT
><DD
><DL
><DT
->11.1. <A
-HREF="#AEN1791"
->Introduction</A
-></DT
-><DT
->11.2. <A
-HREF="#AEN1796"
->CVS Access to samba.org</A
+><A
+HREF="#AEN1330"
+>FAQs</A
></DT
><DD
><DL
><DT
->11.2.1. <A
-HREF="#AEN1799"
->Access via CVSweb</A
+><A
+HREF="#AEN1332"
+>How can I configure OS/2 Warp Connect or
+ OS/2 Warp 4 as a client for Samba?</A
+></DT
+><DT
+><A
+HREF="#AEN1347"
+>How can I configure OS/2 Warp 3 (not Connect),
+ OS/2 1.2, 1.3 or 2.x for Samba?</A
+></DT
+><DT
+><A
+HREF="#AEN1356"
+>Are there any other issues when OS/2 (any version)
+ is used as a client?</A
></DT
><DT
->11.2.2. <A
-HREF="#AEN1804"
->Access via cvs</A
+><A
+HREF="#AEN1360"
+>How do I get printer driver download working
+ for OS/2 clients?</A
></DT
></DL
></DD
@@ -820,7 +576,7 @@ HREF="#AEN1804"
CLASS="CHAPTER"
><HR><H1
><A
-NAME="AEN15"
+NAME="AEN10"
>Chapter 1. How to Install and Test SAMBA</A
></H1
><DIV
@@ -828,8 +584,8 @@ CLASS="SECT1"
><H1
CLASS="SECT1"
><A
-NAME="AEN17"
->1.1. Step 0: Read the man pages</A
+NAME="AEN12"
+>Step 0: Read the man pages</A
></H1
><P
>The man pages distributed with SAMBA contain
@@ -860,8 +616,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN25"
->1.2. Step 1: Building the Binaries</A
+NAME="AEN20"
+>Step 1: Building the Binaries</A
></H1
><P
>To do this, first run the program <B
@@ -884,7 +640,7 @@ CLASS="USERINPUT"
></P
><P
>first to see what special options you can enable.
- Then executing</P
+ Then exectuting</P
><P
><TT
CLASS="PROMPT"
@@ -959,8 +715,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN53"
->1.3. Step 2: The all important step</A
+NAME="AEN48"
+>Step 2: The all important step</A
></H1
><P
>At this stage you must fetch yourself a
@@ -976,8 +732,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN57"
->1.4. Step 3: Create the smb configuration file.</A
+NAME="AEN52"
+>Step 3: Create the smb configuration file.</A
></H1
><P
>There are sample configuration files in the examples
@@ -988,12 +744,6 @@ NAME="AEN57"
>The simplest useful configuration file would be
something like this:</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
> [global]
@@ -1003,15 +753,12 @@ CLASS="PROGRAMLISTING"
guest ok = no
read only = no
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>which would allow connections by anyone with an
account on the server, using either their login name or
"homes" as the service name. (Note that I also set the
- workgroup that Samba is part of. See BROWSING.txt for details)</P
+ workgroup that Samba is part of. See BROWSING.txt for defails)</P
><P
>Note that <B
CLASS="COMMAND"
@@ -1041,8 +788,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN71"
->1.5. Step 4: Test your config file with
+NAME="AEN66"
+>Step 4: Test your config file with
<B
CLASS="COMMAND"
>testparm</B
@@ -1058,15 +805,15 @@ CLASS="FILENAME"
not it will give an error message.</P
><P
>Make sure it runs OK and that the services look
- reasonable before proceeding. </P
+ resonable before proceeding. </P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN77"
->1.6. Step 5: Starting the smbd and nmbd</A
+NAME="AEN72"
+>Step 5: Starting the smbd and nmbd</A
></H1
><P
>You must choose to start smbd and nmbd either
@@ -1105,8 +852,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN87"
->1.6.1. Step 5a: Starting from inetd.conf</A
+NAME="AEN82"
+>Step 5a: Starting from inetd.conf</A
></H2
><P
>NOTE; The following will be different if
@@ -1141,20 +888,11 @@ CLASS="FILENAME"
>
and add two lines something like this:</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
> netbios-ssn stream tcp nowait root /usr/local/samba/bin/smbd smbd
netbios-ns dgram udp wait root /usr/local/samba/bin/nmbd nmbd
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>The exact syntax of <TT
@@ -1176,7 +914,7 @@ CLASS="FILENAME"
<TT
CLASS="FILENAME"
>/etc/inetd.conf</TT
-> to make them consistent.</P
+> to make them consistant.</P
><P
>NOTE: On many systems you may need to use the
"interfaces" option in smb.conf to specify the IP address
@@ -1189,7 +927,7 @@ CLASS="COMMAND"
CLASS="COMMAND"
>nmbd</B
> tries to determine it at run
- time, but fails on some unixes. See the section on "testing nmbd"
+ time, but fails on somunixes. See the section on "testing nmbd"
for a method of finding if you need to do this.</P
><P
>!!!WARNING!!! Many unixes only accept around 5
@@ -1218,8 +956,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN116"
->1.6.2. Step 5b. Alternative: starting it as a daemon</A
+NAME="AEN111"
+>Step 5b. Alternative: starting it as a daemon</A
></H2
><P
>To start the server as a daemon you should create
@@ -1229,21 +967,12 @@ CLASS="FILENAME"
>startsmb</TT
>.</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
> #!/bin/sh
/usr/local/samba/bin/smbd -D
/usr/local/samba/bin/nmbd -D
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>then make it executable with <B
@@ -1284,8 +1013,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN132"
->1.7. Step 6: Try listing the shares available on your
+NAME="AEN127"
+>Step 6: Try listing the shares available on your
server</A
></H1
><P
@@ -1325,8 +1054,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN141"
->1.8. Step 7: Try connecting with the unix client</A
+NAME="AEN136"
+>Step 7: Try connecting with the unix client</A
></H1
><P
><TT
@@ -1388,8 +1117,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN157"
->1.9. Step 8: Try connecting from a DOS, WfWg, Win9x, WinNT,
+NAME="AEN152"
+>Step 8: Try connecting from a DOS, WfWg, Win9x, WinNT,
Win2k, OS/2, etc... client</A
></H1
><P
@@ -1437,8 +1166,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN171"
->1.10. What If Things Don't Work?</A
+NAME="AEN166"
+>What If Things Don't Work?</A
></H1
><P
>If nothing works and you start to think "who wrote
@@ -1460,11 +1189,11 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN176"
->1.10.1. Diagnosing Problems</A
+NAME="AEN171"
+>Diagnosing Problems</A
></H2
><P
->If you have installation problems then go to
+>If you have instalation problems then go to
<TT
CLASS="FILENAME"
>DIAGNOSIS.txt</TT
@@ -1476,14 +1205,14 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN180"
->1.10.2. Scope IDs</A
+NAME="AEN175"
+>Scope IDs</A
></H2
><P
>By default Samba uses a blank scope ID. This means
all your windows boxes must also have a blank scope ID.
If you really want to use a non-blank scope ID then you will
- need to use the -i &#60;scope&#62; option to nmbd, smbd, and
+ need to use the -i &lt;scope&gt; option to nmbd, smbd, and
smbclient. All your PCs will need to have the same setting for
this to work. I do not recommend scope IDs.</P
></DIV
@@ -1492,8 +1221,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN183"
->1.10.3. Choosing the Protocol Level</A
+NAME="AEN178"
+>Choosing the Protocol Level</A
></H2
><P
>The SMB protocol has many dialects. Currently
@@ -1533,8 +1262,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN192"
->1.10.4. Printing from UNIX to a Client PC</A
+NAME="AEN187"
+>Printing from UNIX to a Client PC</A
></H2
><P
>To use a printer that is available via a smb-based
@@ -1551,8 +1280,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN196"
->1.10.5. Locking</A
+NAME="AEN191"
+>Locking</A
></H2
><P
>One area which sometimes causes trouble is locking.</P
@@ -1598,7 +1327,7 @@ NAME="AEN196"
are set by an application when it opens a file to determine
what types of access should be allowed simultaneously with
its open. A client may ask for DENY_NONE, DENY_READ, DENY_WRITE
- or DENY_ALL. There are also special compatibility modes called
+ or DENY_ALL. There are also special compatability modes called
DENY_FCB and DENY_DOS.</P
><P
>You can disable share modes using "share modes = no".
@@ -1612,8 +1341,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN206"
->1.10.6. Mapping Usernames</A
+NAME="AEN201"
+>Mapping Usernames</A
></H2
><P
>If you have different usernames on the PCs and
@@ -1625,13 +1354,13 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN209"
->1.10.7. Other Character Sets</A
+NAME="AEN204"
+>Other Character Sets</A
></H2
><P
>If you have problems using filenames with accented
characters in them (like the German, French or Scandinavian
- character sets) then I recommend you look at the "valid chars"
+ character sets) then I recommmend you look at the "valid chars"
option in smb.conf and also take a look at the validchars
package in the examples directory.</P
></DIV
@@ -1641,243 +1370,213 @@ NAME="AEN209"
CLASS="CHAPTER"
><HR><H1
><A
-NAME="AEN212"
->Chapter 2. Integrating MS Windows networks with Samba</A
+NAME="AEN207"
+>Chapter 2. LanMan and NT Password Encryption in Samba 2.x</A
></H1
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
-NAME="AEN223"
->2.1. Agenda</A
+NAME="AEN218"
+>Introduction</A
></H1
><P
->To identify the key functional mechanisms of MS Windows networking
-to enable the deployment of Samba as a means of extending and/or
-replacing MS Windows NT/2000 technology.</P
-><P
->We will examine:</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
->Name resolution in a pure Unix/Linux TCP/IP
- environment
- </P
-></LI
-><LI
-><P
->Name resolution as used within MS Windows
- networking
- </P
-></LI
-><LI
-><P
->How browsing functions and how to deploy stable
- and dependable browsing using Samba
- </P
-></LI
-><LI
-><P
->MS Windows security options and how to
- configure Samba for seemless integration
- </P
-></LI
-><LI
-><P
->Configuration of Samba as:</P
+>With the development of LanManager and Windows NT
+ compatible password encryption for Samba, it is now able
+ to validate user connections in exactly the same way as
+ a LanManager or Windows NT server.</P
><P
-></P
-><OL
-TYPE="a"
-><LI
+>This document describes how the SMB password encryption
+ algorithm works and what issues there are in choosing whether
+ you want to use it. You should read it carefully, especially
+ the part about security and the "PROS and CONS" section.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="AEN222"
+>How does it work?</A
+></H1
><P
->A stand-alone server</P
-></LI
-><LI
+>LanManager encryption is somewhat similar to UNIX
+ password encryption. The server uses a file containing a
+ hashed value of a user's password. This is created by taking
+ the user's plaintext password, capitalising it, and either
+ truncating to 14 bytes or padding to 14 bytes with null bytes.
+ This 14 byte value is used as two 56 bit DES keys to encrypt
+ a 'magic' eight byte value, forming a 16 byte value which is
+ stored by the server and client. Let this value be known as
+ the "hashed password".</P
+><P
+>Windows NT encryption is a higher quality mechanism,
+ consisting of doing an MD4 hash on a Unicode version of the user's
+ password. This also produces a 16 byte hash value that is
+ non-reversible.</P
+><P
+>When a client (LanManager, Windows for WorkGroups, Windows
+ 95 or Windows NT) wishes to mount a Samba drive (or use a Samba
+ resource), it first requests a connection and negotiates the
+ protocol that the client and server will use. In the reply to this
+ request the Samba server generates and appends an 8 byte, random
+ value - this is stored in the Samba server after the reply is sent
+ and is known as the "challenge". The challenge is different for
+ every client connection.</P
+><P
+>The client then uses the hashed password (16 byte values
+ described above), appended with 5 null bytes, as three 56 bit
+ DES keys, each of which is used to encrypt the challenge 8 byte
+ value, forming a 24 byte value known as the "response".</P
+><P
+>In the SMB call SMBsessionsetupX (when user level security
+ is selected) or the call SMBtconX (when share level security is
+ selected), the 24 byte response is returned by the client to the
+ Samba server. For Windows NT protocol levels the above calculation
+ is done on both hashes of the user's password and both responses are
+ returned in the SMB call, giving two 24 byte values.</P
+><P
+>The Samba server then reproduces the above calculation, using
+ its own stored value of the 16 byte hashed password (read from the
+ <TT
+CLASS="FILENAME"
+>smbpasswd</TT
+> file - described later) and the challenge
+ value that it kept from the negotiate protocol reply. It then checks
+ to see if the 24 byte value it calculates matches the 24 byte value
+ returned to it from the client.</P
><P
->An MS Windows NT 3.x/4.0 security domain member
- </P
-></LI
-><LI
+>If these values match exactly, then the client knew the
+ correct password (or the 16 byte hashed value - see security note
+ below) and is thus allowed access. If not, then the client did not
+ know the correct password and is denied access.</P
><P
->An alternative to an MS Windows NT 3.x/4.0 Domain Controller
- </P
-></LI
-></OL
-></LI
-></OL
+>Note that the Samba server never knows or stores the cleartext
+ of the user's password - just the 16 byte hashed values derived from
+ it. Also note that the cleartext password or 16 byte hashed values
+ are never transmitted over the network - thus increasing security.</P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN245"
->2.2. Name Resolution in a pure Unix/Linux world</A
+NAME="AEN233"
+>Important Notes About Security</A
></H1
><P
->The key configuration files covered in this section are:</P
+>The unix and SMB password encryption techniques seem similar
+ on the surface. This similarity is, however, only skin deep. The unix
+ scheme typically sends clear text passwords over the nextwork when
+ logging in. This is bad. The SMB encryption scheme never sends the
+ cleartext password over the network but it does store the 16 byte
+ hashed values on disk. This is also bad. Why? Because the 16 byte hashed
+ values are a "password equivalent". You cannot derive the user's
+ password from them, but they could potentially be used in a modified
+ client to gain access to a server. This would require considerable
+ technical knowledge on behalf of the attacker but is perfectly possible.
+ You should thus treat the smbpasswd file as though it contained the
+ cleartext passwords of all your users. Its contents must be kept
+ secret, and the file should be protected accordingly.</P
+><P
+>Ideally we would like a password scheme which neither requires
+ plain text passwords on the net or on disk. Unfortunately this
+ is not available as Samba is stuck with being compatible with
+ other SMB systems (WinNT, WfWg, Win95 etc). </P
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>Note that Windows NT 4.0 Service pack 3 changed the
+ default for permissible authentication so that plaintext
+ passwords are <I
+CLASS="EMPHASIS"
+>never</I
+> sent over the wire.
+ The solution to this is either to switch to encrypted passwords
+ with Samba or edit the Windows NT registry to re-enable plaintext
+ passwords. See the document WinNT.txt for details on how to do
+ this.</P
+><P
+>Other Microsoft operating systems which also exhibit
+ this behavior includes</P
><P
></P
><UL
><LI
><P
-><TT
-CLASS="FILENAME"
->/etc/hosts</TT
-></P
+>MS DOS Network client 3.0 with
+ the basic network redirector installed</P
></LI
><LI
><P
-><TT
-CLASS="FILENAME"
->/etc/resolv.conf</TT
-></P
+>Windows 95 with the network redirector
+ update installed</P
></LI
><LI
><P
-><TT
-CLASS="FILENAME"
->/etc/host.conf</TT
-></P
+>Windows 98 [se]</P
></LI
><LI
><P
-><TT
-CLASS="FILENAME"
->/etc/nsswitch.conf</TT
-></P
+>Windows 2000</P
></LI
></UL
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN261"
->2.2.1. <TT
-CLASS="FILENAME"
->/etc/hosts</TT
-></A
-></H2
-><P
->Contains a static list of IP Addresses and names.
-eg:</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> 127.0.0.1 localhost localhost.localdomain
- 192.168.1.1 bigbox.caldera.com bigbox alias4box</PRE
+><I
+CLASS="EMPHASIS"
+>Note :</I
+>All current release of
+ Microsoft SMB/CIFS clients support authentication via the
+ SMB Challenge/Response mechanism described here. Enabling
+ clear text authentication does not disable the ability
+ of the client to particpate in encrypted authentication.</P
></TD
></TR
></TABLE
-></P
-><P
->The purpose of <TT
-CLASS="FILENAME"
->/etc/hosts</TT
-> is to provide a
-name resolution mechanism so that uses do not need to remember
-IP addresses.</P
-><P
->Network packets that are sent over the physical network transport
-layer communicate not via IP addresses but rather using the Media
-Access Control address, or MAC address. IP Addresses are currently
-32 bits in length and are typically presented as four (4) decimal
-numbers that are separated by a dot (or period). eg: 168.192.1.1</P
-><P
->MAC Addresses use 48 bits (or 6 bytes) and are typically represented
-as two digit hexadecimal numbers separated by colons. eg:
-40:8e:0a:12:34:56</P
-><P
->Every network interfrace must have an MAC address. Associated with
-a MAC address there may be one or more IP addresses. There is NO
-relationship between an IP address and a MAC address, all such assignments
-are arbitary or discretionary in nature. At the most basic level all
-network communications takes place using MAC addressing. Since MAC
-addresses must be globally unique, and generally remains fixed for
-any particular interface, the assignment of an IP address makes sense
-from a network management perspective. More than one IP address can
-be assigned per MAC address. One address must be the primary IP address,
-this is the address that will be returned in the ARP reply.</P
-><P
->When a user or a process wants to communicate with another machine
-the protocol implementation ensures that the "machine name" or "host
-name" is resolved to an IP address in a manner that is controlled
-by the TCP/IP configuration control files. The file
-<TT
-CLASS="FILENAME"
->/etc/hosts</TT
-> is one such file.</P
-><P
->When the IP address of the destination interface has been
-determined a protocol called ARP/RARP isused to identify
-the MAC address of the target interface. ARP stands for Address
-Resolution Protocol, and is a broadcast oriented method that
-uses UDP (User Datagram Protocol) to send a request to all
-interfaces on the local network segment using the all 1's MAC
-address. Network interfaces are programmed to respond to two
-MAC addresses only; their own unique address and the address
-ff:ff:ff:ff:ff:ff. The reply packet from an ARP request will
-contain the MAC address and the primary IP address for each
-interface.</P
-><P
->The <TT
-CLASS="FILENAME"
->/etc/hosts</TT
-> file is foundational to all
-Unix/Linux TCP/IP installations and as a minumum will contain
-the localhost and local network interface IP addresses and the
-primary names by which they are known within the local machine.
-This file helps to prime the pump so that a basic level of name
-resolution can exist before any other method of name resolution
-becomes available.</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN277"
->2.2.2. <TT
-CLASS="FILENAME"
->/etc/resolv.conf</TT
-></A
+NAME="AEN252"
+>Advantages of SMB Encryption</A
></H2
><P
->This file tells the name resolution libraries:</P
-><P
></P
><UL
><LI
><P
->The name of the domain to which the machine
- belongs
- </P
+>plain text passwords are not passed across
+ the network. Someone using a network sniffer cannot just
+ record passwords going to the SMB server.</P
></LI
><LI
><P
->The name(s) of any domains that should be
- automatically searched when trying to resolve unqualified
- host names to their IP address
- </P
-></LI
-><LI
-><P
->The name or IP address of available Domain
- Name Servers that may be asked to perform name to address
- translation lookups
- </P
+>WinNT doesn't like talking to a server
+ that isn't using SMB encrypted passwords. It will refuse
+ to browse the server if the server is also in user level
+ security mode. It will insist on prompting the user for the
+ password on each connection, which is very annoying. The
+ only things you can do to stop this is to use SMB encryption.
+ </P
></LI
></UL
></DIV
@@ -1886,115 +1585,30 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN288"
->2.2.3. <TT
-CLASS="FILENAME"
->/etc/host.conf</TT
-></A
-></H2
-><P
-><TT
-CLASS="FILENAME"
->/etc/host.conf</TT
-> is the primary means by
-which the setting in /etc/resolv.conf may be affected. It is a
-critical configuration file. This file controls the order by
-which name resolution may procede. The typical structure is:</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> order hosts,bind
- multi on</PRE
-></TD
-></TR
-></TABLE
-></P
-><P
->then both addresses should be returned. Please refer to the
-man page for host.conf for further details.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN296"
->2.2.4. <TT
-CLASS="FILENAME"
->/etc/nsswitch.conf</TT
-></A
+NAME="AEN259"
+>Advantages of non-encrypted passwords</A
></H2
><P
->This file controls the actual name resolution targets. The
-file typically has resolver object specifications as follows:</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> # /etc/nsswitch.conf
- #
- # Name Service Switch configuration file.
- #
-
- passwd: compat
- # Alternative entries for password authentication are:
- # passwd: compat files nis ldap winbind
- shadow: compat
- group: compat
-
- hosts: files nis dns
- # Alternative entries for host name resolution are:
- # hosts: files dns nis nis+ hesoid db compat ldap wins
- networks: nis files dns
-
- ethers: nis files
- protocols: nis files
- rpc: nis files
- services: nis files</PRE
-></TD
-></TR
-></TABLE
></P
+><UL
+><LI
><P
->Of course, each of these mechanisms requires that the appropriate
-facilities and/or services are correctly configured.</P
+>plain text passwords are not kept
+ on disk. </P
+></LI
+><LI
><P
->It should be noted that unless a network request/message must be
-sent, TCP/IP networks are silent. All TCP/IP communications assumes a
-principal of speaking only when necessary.</P
+>uses same password file as other unix
+ services such as login and ftp</P
+></LI
+><LI
><P
->Samba version 2.2.0 will add Linux support for extensions to
-the name service switch infrastructure so that linux clients will
-be able to obtain resolution of MS Windows NetBIOS names to IP
-Addresses. To gain this functionality Samba needs to be compiled
-with appropriate arguments to the make command (ie: <B
-CLASS="COMMAND"
->make
-nsswitch/libnss_wins.so</B
->). The resulting library should
-then be installed in the <TT
-CLASS="FILENAME"
->/lib</TT
-> directory and
-the "wins" parameter needs to be added to the "hosts:" line in
-the <TT
-CLASS="FILENAME"
->/etc/nsswitch.conf</TT
-> file. At this point it
-will be possible to ping any MS Windows machine by it's NetBIOS
-machine name, so long as that machine is within the workgroup to
-which both the samba machine and the MS Windows machine belong.</P
+>you are probably already using other
+ services (such as telnet and ftp) which send plain text
+ passwords over the net, so sending them for SMB isn't
+ such a big deal.</P
+></LI
+></UL
></DIV
></DIV
><DIV
@@ -2002,1154 +1616,405 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN308"
->2.3. Name resolution as used within MS Windows networking</A
-></H1
-><P
->MS Windows networking is predicated about the name each machine
-is given. This name is known variously (and inconsistently) as
-the "computer name", "machine name", "networking name", "netbios name",
-"SMB name". All terms mean the same thing with the exception of
-"netbios name" which can apply also to the name of the workgroup or the
-domain name. The terms "workgroup" and "domain" are really just a
-simply name with which the machine is associated. All NetBIOS names
-are exactly 16 characters in length. The 16th character is reserved.
-It is used to store a one byte value that indicates service level
-information for the NetBIOS name that is registered. A NetBIOS machine
-name is therefore registered for each service type that is provided by
-the client/server.</P
-><P
->The following are typical NetBIOS name/service type registrations:</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> Unique NetBIOS Names:
- MACHINENAME&#60;00&#62; = Server Service is running on MACHINENAME
- MACHINENAME&#60;03&#62; = Generic Machine Name (NetBIOS name)
- MACHINENAME&#60;20&#62; = LanMan Server service is running on MACHINENAME
- WORKGROUP&#60;1b&#62; = Domain Master Browser
-
- Group Names:
- WORKGROUP&#60;03&#62; = Generic Name registered by all members of WORKGROUP
- WORKGROUP&#60;1c&#62; = Domain Controllers / Netlogon Servers
- WORKGROUP&#60;1d&#62; = Local Master Browsers
- WORKGROUP&#60;1e&#62; = Internet Name Resolvers</PRE
-></TD
-></TR
-></TABLE
-></P
-><P
->It should be noted that all NetBIOS machines register their own
-names as per the above. This is in vast contrast to TCP/IP
-installations where traditionally the system administrator will
-determine in the /etc/hosts or in the DNS database what names
-are associated with each IP address.</P
-><P
->One further point of clarification should be noted, the <TT
-CLASS="FILENAME"
->/etc/hosts</TT
->
-file and the DNS records do not provide the NetBIOS name type information
-that MS Windows clients depend on to locate the type of service that may
-be needed. An example of this is what happens when an MS Windows client
-wants to locate a domain logon server. It find this service and the IP
-address of a server that provides it by performing a lookup (via a
-NetBIOS broadcast) for enumeration of all machines that have
-registered the name type *&#60;1c&#62;. A logon request is then sent to each
-IP address that is returned in the enumerated list of IP addresses. Which
-ever machine first replies then ends up providing the logon services.</P
-><P
->The name "workgroup" or "domain" really can be confusing since these
-have the added significance of indicating what is the security
-architecture of the MS Windows network. The term "workgroup" indicates
-that the primary nature of the network environment is that of a
-peer-to-peer design. In a WORKGROUP all machines are responsible for
-their own security, and generally such security is limited to use of
-just a password (known as SHARE MORE security). In most situations
-with peer-to-peer networking the users who control their own machines
-will simply opt to have no security at all. It is possible to have
-USER MODE security in a WORKGROUP environment, thus requiring use
-of a user name and a matching password.</P
-><P
->MS Windows networking is thus predetermined to use machine names
-for all local and remote machine message passing. The protocol used is
-called Server Message Block (SMB) and this is implemented using
-the NetBIOS protocol (Network Basic Input Output System). NetBIOS can
-be encapsulated using LLC (Logical Link Control) protocol - in which case
-the resulting protocol is called NetBEUI (Network Basic Extended User
-Interface). NetBIOS can also be run over IPX (Internetworking Packet
-Exchange) protocol as used by Novell NetWare, and it can be run
-over TCP/IP protocols - in which case the resulting protocol is called
-NBT or NetBT, the NetBIOS over TCP/IP.</P
-><P
->MS Windows machines use a complex array of name resolution mechanisms.
-Since we are primarily concerned with TCP/IP this demonstration is
-limited to this area.</P
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN320"
->2.3.1. The NetBIOS Name Cache</A
-></H2
-><P
->All MS Windows machines employ an in memory buffer in which is
-stored the NetBIOS names and their IP addresses for all external
-machines that that the local machine has communicated with over the
-past 10-15 minutes. It is more efficient to obtain an IP address
-for a machine from the local cache than it is to go through all the
-configured name resolution mechanisms.</P
-><P
->If a machine whose name is in the local name cache has been shut
-down before the name had been expired and flushed from the cache, then
-an attempt to exchange a message with that machine will be subject
-to time-out delays. ie: It's name is in the cache, so a name resolution
-lookup will succeed, but the machine can not respond. This can be
-frustrating for users - but it is a characteristic of the protocol.</P
-><P
->The MS Windows utility that allows examination of the NetBIOS
-name cache is called "nbtstat". The Samba equivalent of this
-is called "nmblookup".</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
+NAME="AEN268"
><A
-NAME="AEN325"
->2.3.2. The LMHOSTS file</A
-></H2
+NAME="SMBPASSWDFILEFORMAT"
+></A
+>The smbpasswd file</A
+></H1
><P
->This file is usually located in MS Windows NT 4.0 or
-2000 in <TT
-CLASS="FILENAME"
->C:\WINNT\SYSTEM32\DRIVERS\ETC</TT
-> and contains
-the IP Address and the machine name in matched pairs. The
-<TT
+>In order for Samba to participate in the above protocol
+ it must be able to look up the 16 byte hashed values given a user name.
+ Unfortunately, as the UNIX password value is also a one way hash
+ function (ie. it is impossible to retrieve the cleartext of the user's
+ password given the UNIX hash of it), a separate password file
+ containing this 16 byte value must be kept. To minimise problems with
+ these two password files, getting out of sync, the UNIX <TT
CLASS="FILENAME"
->LMHOSTS</TT
-> file performs NetBIOS name
-to IP address mapping oriented.</P
-><P
->It typically looks like:</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> # Copyright (c) 1998 Microsoft Corp.
- #
- # This is a sample LMHOSTS file used by the Microsoft Wins Client (NetBIOS
- # over TCP/IP) stack for Windows98
- #
- # This file contains the mappings of IP addresses to NT computernames
- # (NetBIOS) names. Each entry should be kept on an individual line.
- # The IP address should be placed in the first column followed by the
- # corresponding computername. The address and the comptername
- # should be separated by at least one space or tab. The "#" character
- # is generally used to denote the start of a comment (see the exceptions
- # below).
- #
- # This file is compatible with Microsoft LAN Manager 2.x TCP/IP lmhosts
- # files and offers the following extensions:
- #
- # #PRE
- # #DOM:&#60;domain&#62;
- # #INCLUDE &#60;filename&#62;
- # #BEGIN_ALTERNATE
- # #END_ALTERNATE
- # \0xnn (non-printing character support)
- #
- # Following any entry in the file with the characters "#PRE" will cause
- # the entry to be preloaded into the name cache. By default, entries are
- # not preloaded, but are parsed only after dynamic name resolution fails.
- #
- # Following an entry with the "#DOM:&#60;domain&#62;" tag will associate the
- # entry with the domain specified by &#60;domain&#62;. This affects how the
- # browser and logon services behave in TCP/IP environments. To preload
- # the host name associated with #DOM entry, it is necessary to also add a
- # #PRE to the line. The &#60;domain&#62; is always preloaded although it will not
- # be shown when the name cache is viewed.
- #
- # Specifying "#INCLUDE &#60;filename&#62;" will force the RFC NetBIOS (NBT)
- # software to seek the specified &#60;filename&#62; and parse it as if it were
- # local. &#60;filename&#62; is generally a UNC-based name, allowing a
- # centralized lmhosts file to be maintained on a server.
- # It is ALWAYS necessary to provide a mapping for the IP address of the
- # server prior to the #INCLUDE. This mapping must use the #PRE directive.
- # In addtion the share "public" in the example below must be in the
- # LanManServer list of "NullSessionShares" in order for client machines to
- # be able to read the lmhosts file successfully. This key is under
- # \machine\system\currentcontrolset\services\lanmanserver\parameters\nullsessionshares
- # in the registry. Simply add "public" to the list found there.
- #
- # The #BEGIN_ and #END_ALTERNATE keywords allow multiple #INCLUDE
- # statements to be grouped together. Any single successful include
- # will cause the group to succeed.
- #
- # Finally, non-printing characters can be embedded in mappings by
- # first surrounding the NetBIOS name in quotations, then using the
- # \0xnn notation to specify a hex value for a non-printing character.
- #
- # The following example illustrates all of these extensions:
- #
- # 102.54.94.97 rhino #PRE #DOM:networking #net group's DC
- # 102.54.94.102 "appname \0x14" #special app server
- # 102.54.94.123 popular #PRE #source server
- # 102.54.94.117 localsrv #PRE #needed for the include
- #
- # #BEGIN_ALTERNATE
- # #INCLUDE \\localsrv\public\lmhosts
- # #INCLUDE \\rhino\public\lmhosts
- # #END_ALTERNATE
- #
- # In the above example, the "appname" server contains a special
- # character in its name, the "popular" and "localsrv" server names are
- # preloaded, and the "rhino" server name is specified so it can be used
- # to later #INCLUDE a centrally maintained lmhosts file if the "localsrv"
- # system is unavailable.
- #
- # Note that the whole file is parsed including comments on each lookup,
- # so keeping the number of comments to a minimum will improve performance.
- # Therefore it is not advisable to simply add lmhosts file entries onto the
- # end of this file.</PRE
-></TD
-></TR
-></TABLE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN333"
->2.3.3. HOSTS file</A
-></H2
-><P
->This file is usually located in MS Windows NT 4.0 or 2000 in
-<TT
+> /etc/passwd</TT
+> and the <TT
CLASS="FILENAME"
->C:\WINNT\SYSTEM32\DRIVERS\ETC</TT
-> and contains
-the IP Address and the IP hostname in matched pairs. It can be
-used by the name resolution infrastructure in MS Windows, depending
-on how the TCP/IP environment is configured. This file is in
-every way the equivalent of the Unix/Linux <TT
+>smbpasswd</TT
+> file,
+ a utility, <B
+CLASS="COMMAND"
+>mksmbpasswd.sh</B
+>, is provided to generate
+ a smbpasswd file from a UNIX <TT
CLASS="FILENAME"
->/etc/hosts</TT
-> file.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN338"
->2.3.4. DNS Lookup</A
-></H2
-><P
->This capability is configured in the TCP/IP setup area in the network
-configuration facility. If enabled an elaborate name resolution sequence
-is followed the precise nature of which isdependant on what the NetBIOS
-Node Type parameter is configured to. A Node Type of 0 means use
-NetBIOS broadcast (over UDP broadcast) is first used if the name
-that is the subject of a name lookup is not found in the NetBIOS name
-cache. If that fails then DNS, HOSTS and LMHOSTS are checked. If set to
-Node Type 8, then a NetBIOS Unicast (over UDP Unicast) is sent to the
-WINS Server to obtain a lookup before DNS, HOSTS, LMHOSTS, or broadcast
-lookup is used.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN341"
->2.3.5. WINS Lookup</A
-></H2
-><P
->A WINS (Windows Internet Name Server) service is the equivaent of the
-rfc1001/1002 specified NBNS (NetBIOS Name Server). A WINS server stores
-the names and IP addresses that are registered by a Windows client
-if the TCP/IP setup has been given at least one WINS Server IP Address.</P
+>/etc/passwd</TT
+> file.
+ </P
><P
->To configure Samba to be a WINS server the following parameter needs
-to be added to the <TT
+>To generate the smbpasswd file from your <TT
CLASS="FILENAME"
->smb.conf</TT
-> file:</P
+>/etc/passwd
+ </TT
+> file use the following command :</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> wins support = Yes</PRE
-></TD
-></TR
-></TABLE
+><TT
+CLASS="PROMPT"
+>$ </TT
+><TT
+CLASS="USERINPUT"
+><B
+>cat /etc/passwd | mksmbpasswd.sh
+ &gt; /usr/local/samba/private/smbpasswd</B
+></TT
></P
><P
->To configure Samba to use a WINS server the following parameters are
-needed in the smb.conf file:</P
+>If you are running on a system that uses NIS, use</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> wins support = No
- wins server = xxx.xxx.xxx.xxx</PRE
-></TD
-></TR
-></TABLE
+><TT
+CLASS="PROMPT"
+>$ </TT
+><TT
+CLASS="USERINPUT"
+><B
+>ypcat passwd | mksmbpasswd.sh
+ &gt; /usr/local/samba/private/smbpasswd</B
+></TT
></P
><P
->where <TT
-CLASS="REPLACEABLE"
-><I
->xxx.xxx.xxx.xxx</I
-></TT
-> is the IP address
-of the WINS server.</P
-></DIV
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN353"
->2.4. How browsing functions and how to deploy stable and
-dependable browsing using Samba</A
-></H1
+>The <B
+CLASS="COMMAND"
+>mksmbpasswd.sh</B
+> program is found in
+ the Samba source directory. By default, the smbpasswd file is
+ stored in :</P
><P
->As stated above, MS Windows machines register their NetBIOS names
-(ie: the machine name for each service type in operation) on start
-up. Also, as stated above, the exact method by which this name registration
-takes place is determined by whether or not the MS Windows client/server
-has been given a WINS server address, whether or not LMHOSTS lookup
-is enabled, or if DNS for NetBIOS name resolution is enabled, etc.</P
-><P
->In the case where there is no WINS server all name registrations as
-well as name lookups are done by UDP broadcast. This isolates name
-resolution to the local subnet, unless LMHOSTS is used to list all
-names and IP addresses. In such situations Samba provides a means by
-which the samba server name may be forcibly injected into the browse
-list of a remote MS Windows network (using the "remote announce" parameter).</P
-><P
->Where a WINS server is used, the MS Windows client will use UDP
-unicast to register with the WINS server. Such packets can be routed
-and thus WINS allows name resolution to function across routed networks.</P
-><P
->During the startup process an election will take place to create a
-local master browser if one does not already exist. On each NetBIOS network
-one machine will be elected to function as the domain master browser. This
-domain browsing has nothing to do with MS security domain control.
-Instead, the domain master browser serves the role of contacting each local
-master browser (found by asking WINS or from LMHOSTS) and exchanging browse
-list contents. This way every master browser will eventually obtain a complete
-list of all machines that are on the network. Every 11-15 minutes an election
-is held to determine which machine will be the master browser. By nature of
-the election criteria used, the machine with the highest uptime, or the
-most senior protocol version, or other criteria, will win the election
-as domain master browser.</P
-><P
->Clients wishing to browse the network make use of this list, but also depend
-on the availability of correct name resolution to the respective IP
-address/addresses. </P
-><P
->Any configuration that breaks name resolution and/or browsing intrinsics
-will annoy users because they will have to put up with protracted
-inability to use the network services.</P
-><P
->Samba supports a feature that allows forced synchonisation
-of browse lists across routed networks using the "remote
-browse sync" parameter in the smb.conf file. This causes Samba
-to contact the local master browser on a remote network and
-to request browse list synchronisation. This effectively bridges
-two networks that are separated by routers. The two remote
-networks may use either broadcast based name resolution or WINS
-based name resolution, but it should be noted that the "remote
-browse sync" parameter provides browse list synchronisation - and
-that is distinct from name to address resolution, in other
-words, for cross subnet browsing to function correctly it is
-essential that a name to address resolution mechanism be provided.
-This mechanism could be via DNS, <TT
+><TT
CLASS="FILENAME"
->/etc/hosts</TT
->,
-and so on.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN363"
->2.5. MS Windows security options and how to configure
-Samba for seemless integration</A
-></H1
-><P
->MS Windows clients may use encrypted passwords as part of a
-challenege/response authentication model (a.k.a. NTLMv1) or
-alone, or clear text strings for simple password based
-authentication. It should be realized that with the SMB
-protocol the password is passed over the network either
-in plain text or encrypted, but not both in the same
-authentication requets.</P
-><P
->When encrypted passwords are used a password that has been
-entered by the user is encrypted in two ways:</P
-><P
+>/usr/local/samba/private/smbpasswd</TT
></P
-><UL
-><LI
><P
->An MD4 hash of the UNICODE of the password
- string. This is known as the NT hash.
+>The owner of the <TT
+CLASS="FILENAME"
+>/usr/local/samba/private/</TT
+>
+ directory should be set to root, and the permissions on it should
+ be set to 0500 (<B
+CLASS="COMMAND"
+>chmod 500 /usr/local/samba/private</B
+>).
</P
-></LI
-><LI
><P
->The password is converted to upper case,
- and then padded or trucated to 14 bytes. This string is
- then appended with 5 bytes of NULL characters and split to
- form two 56 bit DES keys to encrypt a "magic" 8 byte value.
- The resulting 16 bytes for the LanMan hash.
- </P
-></LI
-></UL
+>Likewise, the smbpasswd file inside the private directory should
+ be owned by root and the permissions on is should be set to 0600
+ (<B
+CLASS="COMMAND"
+>chmod 600 smbpasswd</B
+>).</P
><P
->You should refer to the <A
-HREF="ENCRYPTION.html"
-TARGET="_top"
->Password Encryption</A
-> chapter in this HOWTO collection
-for more details on the inner workings</P
-><P
->MS Windows 95 pre-service pack 1, MS Windows NT versions 3.x
-and version 4.0 pre-service pack 3 will use either mode of
-password authentication. All versions of MS Windows that follow
-these versions no longer support plain text passwords by default.</P
-><P
->MS Windows clients have a habit of dropping network mappings that
-have been idle for 10 minutes or longer. When the user attempts to
-use the mapped drive connection that has been dropped the SMB protocol
-has a mechanism by which the connection can be re-established using
-a cached copy of the password.</P
-><P
->When Microsoft changed the default password mode, they dropped support for
-caching of the plain text password. This means that when the registry
-parameter is changed to re-enable use of plain text passwords it appears to
-work, but when a dropped mapping attempts to revalidate it will fail if
-the remote authentication server does not support encrypted passwords.
-This means that it is definitely not a good idea to re-enable plain text
-password support in such clients.</P
-><P
->The following parameters can be used to work around the
-issue of Windows 9x client upper casing usernames and
-password before transmitting them to the SMB server
-when using clear text authentication.</P
+>The format of the smbpasswd file is (The line has been
+ wrapped here. It should appear as one entry per line in
+ your smbpasswd file.)</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
-> <A
-HREF="smb.conf.5.html#PASSWORDLEVEL"
-TARGET="_top"
->passsword level</A
-> = <TT
+>username:uid:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:
+ [Account type]:LCT-&lt;last-change-time&gt;:Long name
+ </PRE
+></P
+><P
+>Although only the <TT
CLASS="REPLACEABLE"
><I
->integer</I
+>username</I
></TT
->
- <A
-HREF="smb.conf.5.html#USERNAMELEVEL"
-TARGET="_top"
->username level</A
-> = <TT
+>,
+ <TT
CLASS="REPLACEABLE"
><I
->integer</I
+>uid</I
></TT
-></PRE
-></TD
-></TR
-></TABLE
-></P
-><P
->By default Samba will lower case the username before attempting
-to lookup the user in the database of local system accounts.
-Because UNIX usernames conventionally only contain lower case
-character, the <TT
-CLASS="PARAMETER"
+>, <TT
+CLASS="REPLACEABLE"
><I
->username level</I
+> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</I
></TT
-> parameter
-is rarely even needed.</P
-><P
->However, password on UNIX systems often make use of mixed case
-characters. This means that in order for a user on a Windows 9x
-client to connect to a Samba server using clear text authentication,
-the <TT
-CLASS="PARAMETER"
+>,
+ [<TT
+CLASS="REPLACEABLE"
><I
->password level</I
+>Account type</I
></TT
-> must be set to the maximum
-number of upper case letter which <EM
->could</EM
-> appear
-is a password. Note that is the server OS uses the traditional
-DES version of crypt(), then a <TT
-CLASS="PARAMETER"
+>] and <TT
+CLASS="REPLACEABLE"
><I
->password level</I
+> last-change-time</I
></TT
->
-of 8 will result in case insensitive passwords as seen from Windows
-users. This will also result in longer login times as Samba
-hash to compute the permutations of the password string and
-try them one by one until a match is located (or all combinations fail).</P
-><P
->The best option to adopt is to enable support for encrypted passwords
-where ever Samba is used. There are three configuration possibilities
-for support of encrypted passwords:</P
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN391"
->2.5.1. Use MS Windows NT as an authentication server</A
-></H2
+> sections are significant
+ and are looked at in the Samba code.</P
+><P
+>It is <I
+CLASS="EMPHASIS"
+>VITALLY</I
+> important that there by 32
+ 'X' characters between the two ':' characters in the XXX sections -
+ the smbpasswd and Samba code will fail to validate any entries that
+ do not have 32 characters between ':' characters. The first XXX
+ section is for the Lanman password hash, the second is for the
+ Windows NT version.</P
+><P
+>When the password file is created all users have password entries
+ consisting of 32 'X' characters. By default this disallows any access
+ as this user. When a user has a password set, the 'X' characters change
+ to 32 ascii hexadecimal digits (0-9, A-F). These are an ascii
+ representation of the 16 byte hashed value of a user's password.</P
+><P
+>To set a user to have no password (not recommended), edit the file
+ using vi, and replace the first 11 characters with the ascii text
+ <TT
+CLASS="CONSTANT"
+>"NO PASSWORD"</TT
+> (minus the quotes).</P
><P
->This method involves the additions of the following parameters
-in the smb.conf file:</P
+>For example, to clear the password for user bob, his smbpasswd file
+ entry would look like :</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
-> encrypt passwords = Yes
- security = server
- password server = "NetBIOS_name_of_PDC"</PRE
-></TD
-></TR
-></TABLE
-></P
-><P
->There are two ways of identifying whether or not a username and
-password pair was valid or not. One uses the reply information provided
-as part of the authentication messaging process, the other uses
-just and error code.</P
-><P
->The down-side of this mode of configuration is the fact that
-for security reasons Samba will send the password server a bogus
-username and a bogus password and if the remote server fails to
-reject the username and password pair then an alternative mode
-of identification of validation is used. Where a site uses password
-lock out after a certain number of failed authentication attempts
-this will result in user lockouts.</P
-><P
->Use of this mode of authentication does require there to be
-a standard Unix account for the user, this account can be blocked
-to prevent logons by other than MS Windows clients.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN399"
->2.5.2. Make Samba a member of an MS Windows NT security domain</A
-></H2
-><P
->This method involves additon of the following paramters in the smb.conf file:</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> encrypt passwords = Yes
- security = domain
- workgroup = "name of NT domain"
- password server = *</PRE
-></TD
-></TR
-></TABLE
-></P
-><P
->The use of the "*" argument to "password server" will cause samba
-to locate the domain controller in a way analogous to the way
-this is done within MS Windows NT.</P
-><P
->In order for this method to work the Samba server needs to join the
-MS Windows NT security domain. This is done as follows:</P
-><P
+> bob:100:NO PASSWORDXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:Bob's full name:/bobhome:/bobshell
+ </PRE
></P
-><UL
-><LI
><P
->On the MS Windows NT domain controller using
- the Server Manager add a machine account for the Samba server.
- </P
-></LI
-><LI
-><P
->Next, on the Linux system execute:
+>If you are allowing users to use the smbpasswd command to set
+ their own passwords, you may want to give users NO PASSWORD initially
+ so they do not have to enter a previous password when changing to their
+ new password (not recommended). In order for you to allow this the
<B
CLASS="COMMAND"
->smbpasswd -r PDC_NAME -j DOMAIN_NAME</B
->
- </P
-></LI
-></UL
-><P
->Use of this mode of authentication does require there to be
-a standard Unix account for the user in order to assign
-a uid once the account has been authenticated by the remote
-Windows DC. This account can be blocked to prevent logons by
-other than MS Windows clients by things such as setting an invalid
-shell in the <TT
-CLASS="FILENAME"
->/etc/passwd</TT
-> entry.</P
-><P
->An alternative to assigning UIDs to Windows users on a
-Samba member server is presented in the <A
-HREF="winbind.html"
-TARGET="_top"
->Winbind Overview</A
-> chapter in
-this HOWTO collection.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN416"
->2.5.3. Configure Samba as an authentication server</A
-></H2
-><P
->This mode of authentication demands that there be on the
-Unix/Linux system both a Unix style account as well as and
-smbpasswd entry for the user. The Unix system account can be
-locked if required as only the encrypted password will be
-used for SMB client authentication.</P
-><P
->This method involves addition of the following parameters to
-the smb.conf file:</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->## please refer to the Samba PDC HOWTO chapter later in
-## this collection for more details
-[global]
- encrypt passwords = Yes
- security = user
- domain logons = Yes
- ; an OS level of 33 or more is recommended
- os level = 33
-
-[NETLOGON]
- path = /somewhare/in/file/system
- read only = yes</PRE
-></TD
-></TR
-></TABLE
-></P
-><P
->in order for this method to work a Unix system account needs
-to be created for each user, as well as for each MS Windows NT/2000
-machine. The following structure is required.</P
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN423"
->2.5.3.1. Users</A
-></H3
-><P
->A user account that may provide a home directory should be
-created. The following Linux system commands are typical of
-the procedure for creating an account.</P
+>smbpasswd</B
+> program must be able to connect to the
+ <B
+CLASS="COMMAND"
+>smbd</B
+> daemon as that user with no password. Enable this
+ by adding the line :</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> # useradd -s /bin/bash -d /home/"userid" -m
- # passwd "userid"
- Enter Password: &#60;pw&#62;
-
- # smbpasswd -a "userid"
- Enter Password: &#60;pw&#62;</PRE
-></TD
-></TR
-></TABLE
+><B
+CLASS="COMMAND"
+>null passwords = yes</B
></P
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN428"
->2.5.3.2. MS Windows NT Machine Accounts</A
-></H3
><P
->These are required only when Samba is used as a domain
-controller. Refer to the Samba-PDC-HOWTO for more details.</P
+>to the [global] section of the smb.conf file (this is why
+ the above scenario is not recommended). Preferably, allocate your
+ users a default password to begin with, so you do not have
+ to enable this on your server.</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> # useradd -a /bin/false -d /dev/null "machine_name"\$
- # passwd -l "machine_name"\$
- # smbpasswd -a -m "machine_name"</PRE
-></TD
-></TR
-></TABLE
-></P
-></DIV
-></DIV
+><I
+CLASS="EMPHASIS"
+>Note : </I
+>This file should be protected very
+ carefully. Anyone with access to this file can (with enough knowledge of
+ the protocols) gain access to your SMB server. The file is thus more
+ sensitive than a normal unix <TT
+CLASS="FILENAME"
+>/etc/passwd</TT
+> file.</P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN433"
->2.6. Conclusions</A
+NAME="AEN320"
+>The smbpasswd Command</A
></H1
><P
->Samba provides a flexible means to operate as...</P
+>The smbpasswd command maintains the two 32 byte password fields
+ in the smbpasswd file. If you wish to make it similar to the unix
+ <B
+CLASS="COMMAND"
+>passwd</B
+> or <B
+CLASS="COMMAND"
+>yppasswd</B
+> programs,
+ install it in <TT
+CLASS="FILENAME"
+>/usr/local/samba/bin/</TT
+> (or your
+ main Samba binary directory).</P
+><P
+>Note that as of Samba 1.9.18p4 this program <I
+CLASS="EMPHASIS"
+>MUST NOT
+ BE INSTALLED</I
+> setuid root (the new <B
+CLASS="COMMAND"
+>smbpasswd</B
+>
+ code enforces this restriction so it cannot be run this way by
+ accident).</P
+><P
+><B
+CLASS="COMMAND"
+>smbpasswd</B
+> now works in a client-server mode
+ where it contacts the local smbd to change the user's password on its
+ behalf. This has enormous benefits - as follows.</P
><P
></P
><UL
><LI
><P
->A Stand-alone server - No special action is needed
- other than to create user accounts. Stand-alone servers do NOT
- provide network logon services, meaning that machines that use this
- server do NOT perform a domain logon but instead make use only of
- the MS Windows logon which is local to the MS Windows
- workstation/server.
- </P
-></LI
-><LI
-><P
->An MS Windows NT 3.x/4.0 security domain member.
- </P
+>smbpasswd no longer has to be setuid root -
+ an enormous range of potential security problems is
+ eliminated.</P
></LI
><LI
><P
->An alternative to an MS Windows NT 3.x/4.0
- Domain Controller.
- </P
+><B
+CLASS="COMMAND"
+>smbpasswd</B
+> now has the capability
+ to change passwords on Windows NT servers (this only works when
+ the request is sent to the NT Primary Domain Controller if you
+ are changing an NT Domain user's password).</P
></LI
></UL
-></DIV
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="AEN443"
->Chapter 3. Configuring PAM for distributed but centrally
-managed authentication</A
-></H1
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN454"
->3.1. Samba and PAM</A
-></H1
-><P
->A number of Unix systems (eg: Sun Solaris), as well as the
-xxxxBSD family and Linux, now utilize the Pluggable Authentication
-Modules (PAM) facility to provide all authentication,
-authorization and resource control services. Prior to the
-introduction of PAM, a decision to use an alternative to
-the system password database (<TT
-CLASS="FILENAME"
->/etc/passwd</TT
->)
-would require the provision of alternatives for all programs that provide
-security services. Such a choice would involve provision of
-alternatives to such programs as: <B
-CLASS="COMMAND"
->login</B
->,
-<B
-CLASS="COMMAND"
->passwd</B
->, <B
-CLASS="COMMAND"
->chown</B
->, etc.</P
><P
->PAM provides a mechanism that disconnects these security programs
-from the underlying authentication/authorization infrastructure.
-PAM is configured either through one file <TT
-CLASS="FILENAME"
->/etc/pam.conf</TT
-> (Solaris),
-or by editing individual files that are located in <TT
-CLASS="FILENAME"
->/etc/pam.d</TT
->.</P
-><P
->The following is an example <TT
-CLASS="FILENAME"
->/etc/pam.d/login</TT
-> configuration file.
-This example had all options been uncommented is probably not usable
-as it stacks many conditions before allowing successful completion
-of the login process. Essentially all conditions can be disabled
-by commenting them out except the calls to <TT
-CLASS="FILENAME"
->pam_pwdb.so</TT
->.</P
+>To run smbpasswd as a normal user just type :</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#%PAM-1.0
-# The PAM configuration file for the `login' service
-#
-auth required pam_securetty.so
-auth required pam_nologin.so
-# auth required pam_dialup.so
-# auth optional pam_mail.so
-auth required pam_pwdb.so shadow md5
-# account requisite pam_time.so
-account required pam_pwdb.so
-session required pam_pwdb.so
-# session optional pam_lastlog.so
-# password required pam_cracklib.so retry=3
-password required pam_pwdb.so shadow md5</PRE
-></TD
-></TR
-></TABLE
+><TT
+CLASS="PROMPT"
+>$ </TT
+><TT
+CLASS="USERINPUT"
+><B
+>smbpasswd</B
+></TT
></P
><P
->PAM allows use of replacable modules. Those available on a
-sample system include:</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->$ /bin/ls /lib/security
-pam_access.so pam_ftp.so pam_limits.so
-pam_ncp_auth.so pam_rhosts_auth.so pam_stress.so
-pam_cracklib.so pam_group.so pam_listfile.so
-pam_nologin.so pam_rootok.so pam_tally.so
-pam_deny.so pam_issue.so pam_mail.so
-pam_permit.so pam_securetty.so pam_time.so
-pam_dialup.so pam_lastlog.so pam_mkhomedir.so
-pam_pwdb.so pam_shells.so pam_unix.so
-pam_env.so pam_ldap.so pam_motd.so
-pam_radius.so pam_smbpass.so pam_unix_acct.so
-pam_wheel.so pam_unix_auth.so pam_unix_passwd.so
-pam_userdb.so pam_warn.so pam_unix_session.so</PRE
-></TD
-></TR
-></TABLE
+><TT
+CLASS="PROMPT"
+>Old SMB password: </TT
+><TT
+CLASS="USERINPUT"
+><B
+>&lt;type old value here -
+ or hit return if there was no old password&gt;</B
+></TT
></P
><P
->The following example for the login program replaces the use of
-the <TT
-CLASS="FILENAME"
->pam_pwdb.so</TT
-> module which uses the system
-password database (<TT
-CLASS="FILENAME"
->/etc/passwd</TT
->,
-<TT
-CLASS="FILENAME"
->/etc/shadow</TT
->, <TT
-CLASS="FILENAME"
->/etc/group</TT
->) with
-the module <TT
-CLASS="FILENAME"
->pam_smbpass.so</TT
-> which uses the Samba
-database which contains the Microsoft MD4 encrypted password
-hashes. This database is stored in either
-<TT
-CLASS="FILENAME"
->/usr/local/samba/private/smbpasswd</TT
->,
-<TT
-CLASS="FILENAME"
->/etc/samba/smbpasswd</TT
->, or in
-<TT
-CLASS="FILENAME"
->/etc/samba.d/smbpasswd</TT
->, depending on the
-Samba implementation for your Unix/Linux system. The
-<TT
-CLASS="FILENAME"
->pam_smbpass.so</TT
-> module is provided by
-Samba version 2.2.1 or later. It can be compiled only if the
-<TT
-CLASS="CONSTANT"
->--with-pam --with-pam_smbpass</TT
-> options are both
-provided to the Samba <B
-CLASS="COMMAND"
->configure</B
-> program.</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#%PAM-1.0
-# The PAM configuration file for the `login' service
-#
-auth required pam_smbpass.so nodelay
-account required pam_smbpass.so nodelay
-session required pam_smbpass.so nodelay
-password required pam_smbpass.so nodelay</PRE
-></TD
-></TR
-></TABLE
+><TT
+CLASS="PROMPT"
+>New SMB Password: </TT
+><TT
+CLASS="USERINPUT"
+><B
+>&lt;type new value&gt;
+ </B
+></TT
></P
><P
->The following is the PAM configuration file for a particular
-Linux system. The default condition uses <TT
-CLASS="FILENAME"
->pam_pwdb.so</TT
->.</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#%PAM-1.0
-# The PAM configuration file for the `samba' service
-#
-auth required /lib/security/pam_pwdb.so nullok nodelay shadow audit
-account required /lib/security/pam_pwdb.so audit nodelay
-session required /lib/security/pam_pwdb.so nodelay
-password required /lib/security/pam_pwdb.so shadow md5</PRE
-></TD
-></TR
-></TABLE
+><TT
+CLASS="PROMPT"
+>Repeat New SMB Password: </TT
+><TT
+CLASS="USERINPUT"
+><B
+>&lt;re-type new value
+ </B
+></TT
></P
><P
->In the following example the decision has been made to use the
-smbpasswd database even for basic samba authentication. Such a
-decision could also be made for the passwd program and would
-thus allow the smbpasswd passwords to be changed using the passwd
-program.</P
+>If the old value does not match the current value stored for
+ that user, or the two new values do not match each other, then the
+ password will not be changed.</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#%PAM-1.0
-# The PAM configuration file for the `samba' service
-#
-auth required /lib/security/pam_smbpass.so nodelay
-account required /lib/security/pam_pwdb.so audit nodelay
-session required /lib/security/pam_pwdb.so nodelay
-password required /lib/security/pam_smbpass.so nodelay smbconf=/etc/samba.d/smb.conf</PRE
-></TD
-></TR
-></TABLE
-></P
+>If invoked by an ordinary user it will only allow the user
+ to change his or her own Samba password.</P
><P
->Note: PAM allows stacking of authentication mechanisms. It is
-also possible to pass information obtained within on PAM module through
-to the next module in the PAM stack. Please refer to the documentation for
-your particular system implementation for details regarding the specific
-capabilities of PAM in this environment. Some Linux implmentations also
-provide the <TT
-CLASS="FILENAME"
->pam_stack.so</TT
-> module that allows all
-authentication to be configured in a single central file. The
-<TT
-CLASS="FILENAME"
->pam_stack.so</TT
-> method has some very devoted followers
-on the basis that it allows for easier administration. As with all issues in
-life though, every decision makes trade-offs, so you may want examine the
-PAM documentation for further helpful information.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN496"
->3.2. Distributed Authentication</A
-></H1
+>If run by the root user smbpasswd may take an optional
+ argument, specifying the user name whose SMB password you wish to
+ change. Note that when run as root smbpasswd does not prompt for
+ or check the old password value, thus allowing root to set passwords
+ for users who have forgotten their passwords.</P
><P
->The astute administrator will realize from this that the
-combination of <TT
-CLASS="FILENAME"
->pam_smbpass.so</TT
->,
-<B
+><B
CLASS="COMMAND"
->winbindd</B
->, and <B
+>smbpasswd</B
+> is designed to work in the same way
+ and be familiar to UNIX users who use the <B
CLASS="COMMAND"
->rsync</B
-> (see
-<A
-HREF="http://rsync.samba.org/"
-TARGET="_top"
->http://rsync.samba.org/</A
->)
-will allow the establishment of a centrally managed, distributed
-user/password database that can also be used by all
-PAM (eg: Linux) aware programs and applications. This arrangement
-can have particularly potent advantages compared with the
-use of Microsoft Active Directory Service (ADS) in so far as
-reduction of wide area network authentication traffic.</P
+>passwd</B
+> or
+ <B
+CLASS="COMMAND"
+>yppasswd</B
+> commands.</P
+><P
+>For more details on using <B
+CLASS="COMMAND"
+>smbpasswd</B
+> refer
+ to the man page which will always be the definitive reference.</P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN503"
->3.3. PAM Configuration in smb.conf</A
+NAME="AEN359"
+>Setting up Samba to support LanManager Encryption</A
></H1
><P
->There is an option in smb.conf called <A
-HREF="smb.conf.5.html#OBEYPAMRESTRICTIONS"
-TARGET="_top"
->obey pam restrictions</A
->.
-The following is from the on-line help for this option in SWAT;</P
+>This is a very brief description on how to setup samba to
+ support password encryption. </P
><P
->When Samba 2.2 is configure to enable PAM support (i.e.
-<TT
-CLASS="CONSTANT"
->--with-pam</TT
->), 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 and to
-ignore any account or session management. Note that Samba always
-ignores PAM for authentication in the case of
-<A
-HREF="smb.conf.5.html#ENCRYPTPASSWORDS"
-TARGET="_top"
->encrypt passwords = yes</A
->.
-The reason is that PAM modules cannot support the challenge/response
-authentication mechanism needed in the presence of SMB
-password encryption. </P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>compile and install samba as usual</P
+></LI
+><LI
><P
->Default: <B
+>enable encrypted passwords in <TT
+CLASS="FILENAME"
+> smb.conf</TT
+> by adding the line <B
CLASS="COMMAND"
->obey pam restrictions = no</B
-></P
+>encrypt
+ passwords = yes</B
+> in the [global] section</P
+></LI
+><LI
+><P
+>create the initial <TT
+CLASS="FILENAME"
+>smbpasswd</TT
+>
+ password file in the place you specified in the Makefile
+ (--prefix=&lt;dir&gt;). See the notes under the <A
+HREF="#SMBPASSWDFILEFORMAT"
+>The smbpasswd File</A
+>
+ section earlier in the document for details.</P
+></LI
+></OL
+><P
+>Note that you can test things using smbclient.</P
></DIV
></DIV
><DIV
CLASS="CHAPTER"
><HR><H1
><A
-NAME="AEN512"
->Chapter 4. Hosting a Microsoft Distributed File System tree on Samba</A
+NAME="AEN374"
+>Chapter 3. Hosting a Microsoft Distributed File System tree on Samba</A
></H1
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
-NAME="AEN523"
->4.1. Instructions</A
+NAME="AEN385"
+>Instructions</A
></H1
><P
>The Distributed File System (or Dfs) provides a means of
@@ -3201,7 +2066,7 @@ CLASS="PARAMETER"
to other servers. For example, a symbolic link
<TT
CLASS="FILENAME"
->junction-&#62;msdfs:storage1\share1</TT
+>junction-&gt;msdfs:storage1\share1</TT
> in
the share directory acts as the Dfs junction. When Dfs-aware
clients attempt to access the junction link, they are redirected
@@ -3213,12 +2078,6 @@ CLASS="FILENAME"
>Here's an example of setting up a Dfs tree on a Samba
server.</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
># The smb.conf file:
@@ -3230,9 +2089,6 @@ CLASS="PROGRAMLISTING"
path = /export/dfsroot
msdfs root = yes
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>In the /export/dfsroot directory we set up our dfs links to
@@ -3305,8 +2161,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN558"
->4.1.1. Notes</A
+NAME="AEN420"
+>Notes</A
></H2
><P
></P
@@ -3338,854 +2194,84 @@ NAME="AEN558"
CLASS="CHAPTER"
><HR><H1
><A
-NAME="AEN567"
->Chapter 5. UNIX Permission Bits and Windows NT Access Control Lists</A
-></H1
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN578"
->5.1. Viewing and changing UNIX permissions using the NT
- security dialogs</A
-></H1
-><P
->New in the Samba 2.0.4 release is the ability for Windows
- NT clients to use their native security settings dialog box to
- view and modify the underlying UNIX permissions.</P
-><P
->Note that this ability is careful not to compromise
- the security of the UNIX host Samba is running on, and
- still obeys all the file permission rules that a Samba
- administrator can set.</P
-><P
->In Samba 2.0.4 and above the default value of the
- parameter <A
-HREF="smb.conf.5.html#NTACLSUPPORT"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
-> nt acl support</I
-></TT
-></A
-> has been changed from
- <TT
-CLASS="CONSTANT"
->false</TT
-> to <TT
-CLASS="CONSTANT"
->true</TT
->, so
- manipulation of permissions is turned on by default.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN587"
->5.2. How to view file security on a Samba share</A
-></H1
-><P
->From an NT 4.0 client, single-click with the right
- mouse button on any file or directory in a Samba mounted
- drive letter or UNC path. When the menu pops-up, click
- on the <EM
->Properties</EM
-> entry at the bottom of
- the menu. This brings up the normal file properties dialog
- box, but with Samba 2.0.4 this will have a new tab along the top
- marked <EM
->Security</EM
->. Click on this tab and you
- will see three buttons, <EM
->Permissions</EM
->,
- <EM
->Auditing</EM
->, and <EM
->Ownership</EM
->.
- The <EM
->Auditing</EM
-> button will cause either
- an error message <SPAN
-CLASS="ERRORNAME"
->A requested privilege is not held
- by the client</SPAN
-> to appear if the user is not the
- NT Administrator, or a dialog which is intended to allow an
- Administrator to add auditing requirements to a file if the
- user is logged on as the NT Administrator. This dialog is
- non-functional with a Samba share at this time, as the only
- useful button, the <B
-CLASS="COMMAND"
->Add</B
-> button will not currently
- allow a list of users to be seen.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN598"
->5.3. Viewing file ownership</A
-></H1
-><P
->Clicking on the <B
-CLASS="COMMAND"
->"Ownership"</B
-> button
- brings up a dialog box telling you who owns the given file. The
- owner name will be of the form :</P
-><P
-><B
-CLASS="COMMAND"
->"SERVER\user (Long name)"</B
-></P
-><P
->Where <TT
-CLASS="REPLACEABLE"
-><I
->SERVER</I
-></TT
-> is the NetBIOS name of
- the Samba server, <TT
-CLASS="REPLACEABLE"
-><I
->user</I
-></TT
-> is the user name of
- the UNIX user who owns the file, and <TT
-CLASS="REPLACEABLE"
-><I
->(Long name)</I
-></TT
->
- is the descriptive string identifying the user (normally found in the
- GECOS field of the UNIX password database). Click on the <B
-CLASS="COMMAND"
->Close
- </B
-> button to remove this dialog.</P
-><P
->If the parameter <TT
-CLASS="PARAMETER"
-><I
->nt acl support</I
-></TT
->
- is set to <TT
-CLASS="CONSTANT"
->false</TT
-> then the file owner will
- be shown as the NT user <B
-CLASS="COMMAND"
->"Everyone"</B
->.</P
-><P
->The <B
-CLASS="COMMAND"
->Take Ownership</B
-> button will not allow
- you to change the ownership of this file to yourself (clicking on
- it will display a dialog box complaining that the user you are
- currently logged onto the NT client cannot be found). The reason
- for this is that changing the ownership of a file is a privileged
- operation in UNIX, available only to the <EM
->root</EM
->
- user. As clicking on this button causes NT to attempt to change
- the ownership of a file to the current user logged into the NT
- client this will not work with Samba at this time.</P
-><P
->There is an NT chown command that will work with Samba
- and allow a user with Administrator privilege connected
- to a Samba 2.0.4 server as root to change the ownership of
- files on both a local NTFS filesystem or remote mounted NTFS
- or Samba drive. This is available as part of the <EM
->Seclib
- </EM
-> NT security library written by Jeremy Allison of
- the Samba Team, available from the main Samba ftp site.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN618"
->5.4. Viewing file or directory permissions</A
-></H1
-><P
->The third button is the <B
-CLASS="COMMAND"
->"Permissions"</B
->
- button. Clicking on this brings up a dialog box that shows both
- the permissions and the UNIX owner of the file or directory.
- The owner is displayed in the form :</P
-><P
-><B
-CLASS="COMMAND"
->"SERVER\user (Long name)"</B
-></P
-><P
->Where <TT
-CLASS="REPLACEABLE"
-><I
->SERVER</I
-></TT
-> is the NetBIOS name of
- the Samba server, <TT
-CLASS="REPLACEABLE"
-><I
->user</I
-></TT
-> is the user name of
- the UNIX user who owns the file, and <TT
-CLASS="REPLACEABLE"
-><I
->(Long name)</I
-></TT
->
- is the descriptive string identifying the user (normally found in the
- GECOS field of the UNIX password database).</P
-><P
->If the parameter <TT
-CLASS="PARAMETER"
-><I
->nt acl support</I
-></TT
->
- is set to <TT
-CLASS="CONSTANT"
->false</TT
-> then the file owner will
- be shown as the NT user <B
-CLASS="COMMAND"
->"Everyone"</B
-> and the
- permissions will be shown as NT "Full Control".</P
-><P
->The permissions field is displayed differently for files
- and directories, so I'll describe the way file permissions
- are displayed first.</P
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN633"
->5.4.1. File Permissions</A
-></H2
-><P
->The standard UNIX user/group/world triple and
- the corresponding "read", "write", "execute" permissions
- triples are mapped by Samba into a three element NT ACL
- with the 'r', 'w', and 'x' bits mapped into the corresponding
- NT permissions. The UNIX world permissions are mapped into
- the global NT group <B
-CLASS="COMMAND"
->Everyone</B
->, followed
- by the list of permissions allowed for UNIX world. The UNIX
- owner and group permissions are displayed as an NT
- <B
-CLASS="COMMAND"
->user</B
-> icon and an NT <B
-CLASS="COMMAND"
->local
- group</B
-> icon respectively followed by the list
- of permissions allowed for the UNIX user and group.</P
-><P
->As many UNIX permission sets don't map into common
- NT names such as <B
-CLASS="COMMAND"
->"read"</B
->, <B
-CLASS="COMMAND"
-> "change"</B
-> or <B
-CLASS="COMMAND"
->"full control"</B
-> then
- usually the permissions will be prefixed by the words <B
-CLASS="COMMAND"
-> "Special Access"</B
-> in the NT display list.</P
-><P
->But what happens if the file has no permissions allowed
- for a particular UNIX user group or world component ? In order
- to allow "no permissions" to be seen and modified then Samba
- overloads the NT <B
-CLASS="COMMAND"
->"Take Ownership"</B
-> ACL attribute
- (which has no meaning in UNIX) and reports a component with
- no permissions as having the NT <B
-CLASS="COMMAND"
->"O"</B
-> bit set.
- This was chosen of course to make it look like a zero, meaning
- zero permissions. More details on the decision behind this will
- be given below.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN647"
->5.4.2. Directory Permissions</A
-></H2
-><P
->Directories on an NT NTFS file system have two
- different sets of permissions. The first set of permissions
- is the ACL set on the directory itself, this is usually displayed
- in the first set of parentheses in the normal <B
-CLASS="COMMAND"
->"RW"</B
->
- NT style. This first set of permissions is created by Samba in
- exactly the same way as normal file permissions are, described
- above, and is displayed in the same way.</P
-><P
->The second set of directory permissions has no real meaning
- in the UNIX permissions world and represents the <B
-CLASS="COMMAND"
-> "inherited"</B
-> permissions that any file created within
- this directory would inherit.</P
-><P
->Samba synthesises these inherited permissions for NT by
- returning as an NT ACL the UNIX permission mode that a new file
- created by Samba on this share would receive.</P
-></DIV
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN654"
->5.5. Modifying file or directory permissions</A
-></H1
-><P
->Modifying file and directory permissions is as simple
- as changing the displayed permissions in the dialog box, and
- clicking the <B
-CLASS="COMMAND"
->OK</B
-> button. However, there are
- limitations that a user needs to be aware of, and also interactions
- with the standard Samba permission masks and mapping of DOS
- attributes that need to also be taken into account.</P
-><P
->If the parameter <TT
-CLASS="PARAMETER"
-><I
->nt acl support</I
-></TT
->
- is set to <TT
-CLASS="CONSTANT"
->false</TT
-> then any attempt to set
- security permissions will fail with an <B
-CLASS="COMMAND"
->"Access Denied"
- </B
-> message.</P
-><P
->The first thing to note is that the <B
-CLASS="COMMAND"
->"Add"</B
->
- button will not return a list of users in Samba 2.0.4 (it will give
- an error message of <B
-CLASS="COMMAND"
->"The remote procedure call failed
- and did not execute"</B
->). This means that you can only
- manipulate the current user/group/world permissions listed in
- the dialog box. This actually works quite well as these are the
- only permissions that UNIX actually has.</P
-><P
->If a permission triple (either user, group, or world)
- is removed from the list of permissions in the NT dialog box,
- then when the <B
-CLASS="COMMAND"
->"OK"</B
-> button is pressed it will
- be applied as "no permissions" on the UNIX side. If you then
- view the permissions again the "no permissions" entry will appear
- as the NT <B
-CLASS="COMMAND"
->"O"</B
-> flag, as described above. This
- allows you to add permissions back to a file or directory once
- you have removed them from a triple component.</P
-><P
->As UNIX supports only the "r", "w" and "x" bits of
- an NT ACL then if other NT security attributes such as "Delete
- access" are selected then they will be ignored when applied on
- the Samba server.</P
-><P
->When setting permissions on a directory the second
- set of permissions (in the second set of parentheses) is
- by default applied to all files within that directory. If this
- is not what you want you must uncheck the <B
-CLASS="COMMAND"
->"Replace
- permissions on existing files"</B
-> checkbox in the NT
- dialog before clicking <B
-CLASS="COMMAND"
->"OK"</B
->.</P
-><P
->If you wish to remove all permissions from a
- user/group/world component then you may either highlight the
- component and click the <B
-CLASS="COMMAND"
->"Remove"</B
-> button,
- or set the component to only have the special <B
-CLASS="COMMAND"
->"Take
- Ownership"</B
-> permission (displayed as <B
-CLASS="COMMAND"
->"O"
- </B
->) highlighted.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN676"
->5.6. Interaction with the standard Samba create mask
- parameters</A
-></H1
-><P
->Note that with Samba 2.0.5 there are four new parameters
- to control this interaction. These are :</P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->security mask</I
-></TT
-></P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->force security mode</I
-></TT
-></P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->directory security mask</I
-></TT
-></P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->force directory security mode</I
-></TT
-></P
-><P
->Once a user clicks <B
-CLASS="COMMAND"
->"OK"</B
-> to apply the
- permissions Samba maps the given permissions into a user/group/world
- r/w/x triple set, and then will check the changed permissions for a
- file against the bits set in the <A
-HREF="smb.conf.5.html#SECURITYMASK"
-TARGET="_top"
->
- <TT
-CLASS="PARAMETER"
-><I
->security mask</I
-></TT
-></A
-> parameter. Any bits that
- were changed that are not set to '1' in this parameter are left alone
- in the file permissions.</P
-><P
->Essentially, zero bits in the <TT
-CLASS="PARAMETER"
-><I
->security mask</I
-></TT
->
- mask may be treated as a set of bits the user is <EM
->not</EM
->
- allowed to change, and one bits are those the user is allowed to change.
- </P
-><P
->If not set explicitly this parameter is set to the same value as
- the <A
-HREF="smb.conf.5.html#CREATEMASK"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
->create mask
- </I
-></TT
-></A
-> parameter to provide compatibility with Samba 2.0.4
- where this permission change facility was introduced. To allow a user to
- modify all the user/group/world permissions on a file, set this parameter
- to 0777.</P
-><P
->Next Samba checks the changed permissions for a file against
- the bits set in the <A
-HREF="smb.conf.5.html#FORCESECURITYMODE"
-TARGET="_top"
-> <TT
-CLASS="PARAMETER"
-><I
->force security mode</I
-></TT
-></A
-> parameter. Any bits
- that were changed that correspond to bits set to '1' in this parameter
- are forced to be set.</P
-><P
->Essentially, bits set in the <TT
-CLASS="PARAMETER"
-><I
->force security mode
- </I
-></TT
-> parameter may be treated as a set of bits that, when
- modifying security on a file, the user has always set to be 'on'.</P
-><P
->If not set explicitly this parameter is set to the same value
- as the <A
-HREF="smb.conf.5.html#FORCECREATEMODE"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
->force
- create mode</I
-></TT
-></A
-> parameter to provide compatibility
- with Samba 2.0.4 where the permission change facility was introduced.
- To allow a user to modify all the user/group/world permissions on a file
- with no restrictions set this parameter to 000.</P
-><P
->The <TT
-CLASS="PARAMETER"
-><I
->security mask</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->force
- security mode</I
-></TT
-> parameters are applied to the change
- request in that order.</P
-><P
->For a directory Samba will perform the same operations as
- described above for a file except using the parameter <TT
-CLASS="PARAMETER"
-><I
-> directory security mask</I
-></TT
-> instead of <TT
-CLASS="PARAMETER"
-><I
->security
- mask</I
-></TT
->, and <TT
-CLASS="PARAMETER"
-><I
->force directory security mode
- </I
-></TT
-> parameter instead of <TT
-CLASS="PARAMETER"
-><I
->force security mode
- </I
-></TT
->.</P
-><P
->The <TT
-CLASS="PARAMETER"
-><I
->directory security mask</I
-></TT
-> parameter
- by default is set to the same value as the <TT
-CLASS="PARAMETER"
-><I
->directory mask
- </I
-></TT
-> parameter and the <TT
-CLASS="PARAMETER"
-><I
->force directory security
- mode</I
-></TT
-> parameter by default is set to the same value as
- the <TT
-CLASS="PARAMETER"
-><I
->force directory mode</I
-></TT
-> parameter to provide
- compatibility with Samba 2.0.4 where the permission change facility
- was introduced.</P
-><P
->In this way Samba enforces the permission restrictions that
- an administrator can set on a Samba share, whilst still allowing users
- to modify the permission bits within that restriction.</P
-><P
->If you want to set up a share that allows users full control
- in modifying the permission bits on their files and directories and
- doesn't force any particular bits to be set 'on', then set the following
- parameters in the <A
-HREF="smb.conf.5.html"
-TARGET="_top"
-><TT
-CLASS="FILENAME"
->smb.conf(5)
- </TT
-></A
-> file in that share specific section :</P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->security mask = 0777</I
-></TT
-></P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->force security mode = 0</I
-></TT
-></P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->directory security mask = 0777</I
-></TT
-></P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->force directory security mode = 0</I
-></TT
-></P
-><P
->As described, in Samba 2.0.4 the parameters :</P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->create mask</I
-></TT
-></P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->force create mode</I
-></TT
-></P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->directory mask</I
-></TT
-></P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->force directory mode</I
-></TT
-></P
-><P
->were used instead of the parameters discussed here.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN740"
->5.7. Interaction with the standard Samba file attribute
- mapping</A
-></H1
-><P
->Samba maps some of the DOS attribute bits (such as "read
- only") into the UNIX permissions of a file. This means there can
- be a conflict between the permission bits set via the security
- dialog and the permission bits set by the file attribute mapping.
- </P
-><P
->One way this can show up is if a file has no UNIX read access
- for the owner it will show up as "read only" in the standard
- file attributes tabbed dialog. Unfortunately this dialog is
- the same one that contains the security info in another tab.</P
-><P
->What this can mean is that if the owner changes the permissions
- to allow themselves read access using the security dialog, clicks
- <B
-CLASS="COMMAND"
->"OK"</B
-> to get back to the standard attributes tab
- dialog, and then clicks <B
-CLASS="COMMAND"
->"OK"</B
-> on that dialog, then
- NT will set the file permissions back to read-only (as that is what
- the attributes still say in the dialog). This means that after setting
- permissions and clicking <B
-CLASS="COMMAND"
->"OK"</B
-> to get back to the
- attributes dialog you should always hit <B
-CLASS="COMMAND"
->"Cancel"</B
->
- rather than <B
-CLASS="COMMAND"
->"OK"</B
-> to ensure that your changes
- are not overridden.</P
-></DIV
-></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="AEN750"
->Chapter 6. Printing Support in Samba 2.2.x</A
+NAME="AEN429"
+>Chapter 4. Printing Support in Samba 2.2.x</A
></H1
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
-NAME="AEN761"
->6.1. Introduction</A
+NAME="AEN440"
+>Introduction</A
></H1
><P
>Beginning with the 2.2.0 release, Samba supports
-the native Windows NT printing mechanisms implemented via
-MS-RPC (i.e. the SPOOLSS named pipe). Previous versions of
-Samba only supported LanMan printing calls.</P
+ the native Windows NT printing mechanisms implemented via
+ MS-RPC (i.e. the SPOOLSS named pipe). Previous versions of
+ Samba only supported LanMan printing calls.</P
><P
>The additional functionality provided by the new
-SPOOLSS support includes:</P
+ SPOOLSS support includes:</P
><P
></P
><UL
><LI
><P
>Support for downloading printer driver
- files to Windows 95/98/NT/2000 clients upon demand.
- </P
+ files to Windows 95/98/NT/2000 clients upon demand.
+ </P
></LI
><LI
><P
>Uploading of printer drivers via the
- Windows NT Add Printer Wizard (APW) or the
- Imprints tool set (refer to <A
+ Windows NT Add Printer Wizard (APW) or the <A
HREF="http://imprints.sourceforge.net"
TARGET="_top"
->http://imprints.sourceforge.net</A
->).
- </P
+>Imprints tool set
+ </A
+></P
></LI
><LI
><P
>Support for the native MS-RPC printing
- calls such as StartDocPrinter, EnumJobs(), etc... (See
- the MSDN documentation at <A
+ calls such as StartDocPrinter, EnumJobs(), etc... (See
+ the <A
HREF="http://msdn.microsoft.com/"
TARGET="_top"
->http://msdn.microsoft.com/</A
->
- for more information on the Win32 printing API)
- </P
+>MSDN documentation
+ </A
+> for more information on the Win32 printing API)
+ </P
></LI
><LI
><P
>Support for NT Access Control Lists (ACL)
- on printer objects</P
+ on printer objects</P
></LI
><LI
><P
>Improved support for printer queue manipulation
- through the use of an internal databases for spooled job
- information</P
+ through the use of an internal databases for spooled job
+ information</P
></LI
></UL
-><P
->There has been some initial confusion about what all this means
-and whether or not it is a requirement for printer drivers to be
-installed on a Samba host in order to support printing from Windows
-clients. A bug existed in Samba 2.2.0 which made Windows NT/2000 clients
-require that the Samba server possess a valid driver for the printer.
-This is fixed in Samba 2.2.1 and once again, Windows NT/2000 clients
-can use the local APW for installing drivers to be used with a Samba
-served printer. This is the same behavior exhibited by Windows 9x clients.
-As a side note, Samba does not use these drivers in any way to process
-spooled files. They are utilized entirely by the clients.</P
-><P
->The following MS KB article, may be of some help if you are dealing with
-Windows 2000 clients: <EM
->How to Add Printers with No User
-Interaction in Windows 2000</EM
-></P
-><P
-><A
-HREF="http://support.microsoft.com/support/kb/articles/Q189/1/05.ASP"
-TARGET="_top"
->http://support.microsoft.com/support/kb/articles/Q189/1/05.ASP</A
-></P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN783"
->6.2. Configuration</A
+NAME="AEN457"
+>Configuration</A
></H1
+><P
+>In order to support the uploading of printer driver
+ files, you must first configure a file share named [print$].
+ The name of this share is hard coded in Samba's internals so
+ the name is very important (print$ is the service used by
+ Windows NT print servers to provide support for printer driver
+ download).</P
><DIV
CLASS="WARNING"
><P
@@ -4198,104 +2284,70 @@ WIDTH="100%"
><TD
ALIGN="CENTER"
><B
->[print$] vs. [printer$]</B
+>Warning</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
->Previous versions of Samba recommended using a share named [printer$].
-This name was taken from the printer$ service created by Windows 9x
-clients when a printer was shared. Windows 9x printer servers always have
-a printer$ service which provides read-only access via no
-password in order to support printer driver downloads.</P
+>Previous versions of Samba recommended using
+ a share named [printer$]. This name was taken from the
+ printer$ service created by Windows 9x clients when a
+ printer was shared. Windows 9x printer servers always have
+ a printer$ service which provides read-only access via no
+ password in order to support printer driver downloads.</P
><P
>However, the initial implementation allowed for a
-parameter named <TT
+ parameter named <TT
CLASS="PARAMETER"
><I
>printer driver location</I
></TT
>
-to be used on a per share basis to specify the location of
-the driver files associated with that printer. Another
-parameter named <TT
+ to be used on a per share basis to specify the location of
+ the driver files associated with that printer. Another
+ parameter named <TT
CLASS="PARAMETER"
><I
>printer driver</I
></TT
> provided
-a means of defining the printer driver name to be sent to
-the client.</P
+ a means of defining the printer driver name to be sent to
+ the client.</P
><P
>These parameters, including <TT
CLASS="PARAMETER"
><I
->printer driver
-file</I
+>printer driver
+ file</I
></TT
> parameter, are being depreciated and should not
-be used in new installations. For more information on this change,
-you should refer to the <A
+ be used in new installations. For more information on this change,
+ you should refer to the <A
HREF="#MIGRATION"
->Migration section</A
->
-of this document.</P
+>Migration section
+ </A
+>of this document.</P
></TD
></TR
></TABLE
></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN794"
->6.2.1. Creating [print$]</A
-></H2
><P
->In order to support the uploading of printer driver
-files, you must first configure a file share named [print$].
-The name of this share is hard coded in Samba's internals so
-the name is very important (print$ is the service used by
-Windows NT print servers to provide support for printer driver
-download).</P
-><P
->You should modify the server's smb.conf file to add the global
-parameters and to create the
-following file share (of course, some of the parameter values,
-such as 'path' are arbitrary and should be replaced with
-appropriate values for your site):</P
+>You should modify the server's smb.conf file to create the
+ following file share (of course, some of the parameter values,
+ such as 'path' are arbitrary and should be replaced with
+ appropriate values for your site):</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
->[global]
- ; members of the ntadmin group should be able
- ; to add drivers and set printer properties
- ; root is implicitly a 'printer admin'
- printer admin = @ntadmin
-
-[print$]
- path = /usr/local/samba/printers
- guest ok = yes
- browseable = yes
- read only = yes
- ; since this share is configured as read only, then we need
- ; a 'write list'. Check the file system permissions to make
- ; sure this account can copy files to the share. If this
- ; is setup to a non-root account, then it should also exist
- ; as a 'printer admin'
- write list = @ntadmin,root</PRE
-></TD
-></TR
-></TABLE
+>[print$]
+ path = /usr/local/samba/printers
+ guest ok = yes
+ browseable = yes
+ read only = yes
+ write list = ntadmin
+ </PRE
></P
><P
>The <A
@@ -4304,82 +2356,70 @@ TARGET="_top"
><TT
CLASS="PARAMETER"
><I
->write list</I
+> write list</I
></TT
></A
> is used to allow administrative
-level user accounts to have write access in order to update files
-on the share. See the <A
+ level user accounts to have write access in order to update files
+ on the share. See the <A
HREF="smb./conf.5.html"
TARGET="_top"
->smb.conf(5)
-man page</A
-> for more information on configuring file shares.</P
+> smb.conf(5) man page</A
+> for more information on
+ configuring file shares.</P
><P
>The requirement for <A
HREF="smb.conf.5.html#GUESTOK"
TARGET="_top"
><B
CLASS="COMMAND"
->guest
-ok = yes</B
+> guest ok = yes</B
></A
> depends upon how your
-site is configured. If users will be guaranteed to have
-an account on the Samba host, then this is a non-issue.</P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
+ site is configured. If users will be guaranteed to have
+ an account on the Samba host, then this is a non-issue.</P
><P
-><B
->Author's Note: </B
->The non-issue is that if all your Windows NT users are guaranteed to be
-authenticated by the Samba server (such as a domain member server and the NT
-user has already been validated by the Domain Controller in
-order to logon to the Windows NT console), then guest access
-is not necessary. Of course, in a workgroup environment where
-you just want to be able to print without worrying about
-silly accounts and security, then configure the share for
-guest access. You'll probably want to add <A
+><I
+CLASS="EMPHASIS"
+>author's note: </I
+>The non-issue is that
+ if all your Windows NT users are guarenteed to be authenticated
+ by the Samba server (such as a domain member server and the NT
+ user has already been validated by the Domain Controller in
+ order to logon to the Windows NT console), then guest access
+ is not necessary. Of course, in a workgroup environment where
+ you just want to be able to print without worrying about
+ silly accounts and security, then configure the share for
+ guest access. You'll probably want to add <A
HREF="smb.conf.5.html#MAPTOGUEST"
TARGET="_top"
><B
CLASS="COMMAND"
->map to guest = Bad User</B
+>map to guest = Bad User
+ </B
></A
> in the [global] section as well. Make sure
-you understand what this parameter does before using it
-though. --jerry</P
-></BLOCKQUOTE
-></DIV
+ you understand what this parameter does before using it
+ though. --jerry]</P
><P
>In order for a Windows NT print server to support
-the downloading of driver files by multiple client architectures,
-it must create subdirectories within the [print$] service
-which correspond to each of the supported client architectures.
-Samba follows this model as well.</P
+ the downloading of driver files by multiple client architectures,
+ it must create subdirectories within the [print$] service
+ which correspond to each of the supported client architectures.
+ Samba follows this model as well.</P
><P
>Next create the directory tree below the [print$] share
-for each architecture you wish to support.</P
+ for each architecture you wish to support.</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
->[print$]-----
- |-W32X86 ; "Windows NT x86"
- |-WIN40 ; "Windows 95/98"
- |-W32ALPHA ; "Windows NT Alpha_AXP"
- |-W32MIPS ; "Windows NT R4000"
- |-W32PPC ; "Windows NT PowerPC"</PRE
-></TD
-></TR
-></TABLE
+> [print$]-----
+ |-W32X86 ; "Windows NT x86"
+ |-WIN40 ; "Windows 95/98"
+ |-W32ALPHA ; "Windows NT Alpha_AXP"
+ |-W32MIPS ; "Windows NT R4000"
+ |-W32PPC ; "Windows NT PowerPC"
+ </PRE
></P
><DIV
CLASS="WARNING"
@@ -4393,34 +2433,38 @@ WIDTH="100%"
><TD
ALIGN="CENTER"
><B
->ATTENTION! REQUIRED PERMISSIONS</B
+>Warning</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
+><I
+CLASS="EMPHASIS"
+>ATTENTION! REQUIRED PERMISSIONS</I
+></P
+><P
>In order to currently add a new driver to you Samba host,
-one of two conditions must hold true:</P
+ one of two conditions must hold true:</P
><P
></P
><UL
><LI
><P
>The account used to connect to the Samba host
- must have a uid of 0 (i.e. a root account)</P
+ must have a uid of 0 (i.e. a root account)</P
></LI
><LI
><P
>The account used to connect to the Samba host
- must be a member of the <A
-HREF="smb.conf.5.html#PRINTERADMIN"
+ must be a member of the <A
+HREF="smb.conf.5.html"
TARGET="_top"
><TT
CLASS="PARAMETER"
><I
->printer
- admin</I
+> printer admin</I
></TT
></A
> list.</P
@@ -4428,132 +2472,97 @@ CLASS="PARAMETER"
></UL
><P
>Of course, the connected account must still possess access
-to add files to the subdirectories beneath [print$]. Remember
-that all file shares are set to 'read only' by default.</P
+ to add files to the subdirectories beneath [print$].</P
></TD
></TR
></TABLE
></DIV
><P
>Once you have created the required [print$] service and
-associated subdirectories, simply log onto the Samba server using
-a root (or <TT
+ associated subdirectories, simply log onto the Samba server using
+ a root (or <TT
CLASS="PARAMETER"
><I
>printer admin</I
></TT
>) account
-from a Windows NT 4.0 client. Navigate to the "Printers" folder
-on the Samba server. You should see an initial listing of printers
-that matches the printer shares defined on your Samba host.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN829"
->6.2.2. Setting Drivers for Existing Printers</A
-></H2
+ from a Windows NT 4.0 client. Navigate to the "Printers" folder
+ on the Samba server. You should see an initial listing of printers
+ that matches the printer shares defined on your Samba host.</P
><P
>The initial listing of printers in the Samba host's
-Printers folder will have no real printer driver assigned
-to them. By default, in Samba 2.2.0 this driver name was set to
-<EM
->NO PRINTER DRIVER AVAILABLE FOR THIS PRINTER</EM
->.
-Later versions changed this to a NULL string to allow the use
-tof the local Add Printer Wizard on NT/2000 clients.
-Attempting to view the printer properties for a printer
-which has this default driver assigned will result in
-the error message:</P
-><P
-><EM
->Device settings cannot be displayed. The driver
-for the specified printer is not installed, only spooler
-properties will be displayed. Do you want to install the
-driver now?</EM
-></P
-><P
->Click "No" in the error dialog and you will be presented with
-the printer properties window. The way assign a driver to a
-printer is to either</P
+ Printers folder will have no printer driver assigned to them.
+ The way assign a driver to a printer is to view the Properties
+ of the printer and either</P
><P
></P
><UL
><LI
><P
>Use the "New Driver..." button to install
- a new printer driver, or</P
+ a new printer driver, or</P
></LI
><LI
><P
>Select a driver from the popup list of
- installed drivers. Initially this list will be empty.</P
+ installed drivers. Initially this list will be empty.</P
></LI
></UL
><P
>If you wish to install printer drivers for client
-operating systems other than "Windows NT x86", you will need
-to use the "Sharing" tab of the printer properties dialog.</P
+ operating systems other than "Windows NT x86", you will need
+ to use the "Sharing" tab of the printer properties dialog.</P
><P
>Assuming you have connected with a root account, you
-will also be able modify other printer properties such as
-ACLs and device settings using this dialog box.</P
+ will also be able modify other printer properties such as
+ ACLs and device settings using this dialog box.</P
><P
>A few closing comments for this section, it is possible
-on a Windows NT print server to have printers
-listed in the Printers folder which are not shared. Samba does
-not make this distinction. By definition, the only printers of
-which Samba is aware are those which are specified as shares in
-<TT
+ on a Windows NT print server to have printers
+ listed in the Printers folder which are not shared. Samba does
+ not make this distinction. By definition, the only printers of
+ which Samba is aware are those which are specified as shares in
+ <TT
CLASS="FILENAME"
>smb.conf</TT
>.</P
><P
>Another interesting side note is that Windows NT clients do
-not use the SMB printer share, but rather can print directly
-to any printer on another Windows NT host using MS-RPC. This
-of course assumes that the printing client has the necessary
-privileges on the remote host serving the printer. The default
-permissions assigned by Windows NT to a printer gives the "Print"
-permissions to the "Everyone" well-known group.</P
-></DIV
+ not use the SMB printer share, but rather can print directly
+ to any printer on another Windows NT host using MS-RPC. This
+ of course assumes that the printing client has the necessary
+ privileges on the remote host serving the printer. The default
+ permissions assigned by Windows NT to a printer gives the "Print"
+ permissions to the "Everyone" well-known group.</P
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN846"
->6.2.3. Support a large number of printers</A
+NAME="AEN511"
+>Support a large number of printers</A
></H2
><P
>One issue that has arisen during the development
-phase of Samba 2.2 is the need to support driver downloads for
-100's of printers. Using the Windows NT APW is somewhat
-awkward to say the list. If more than one printer are using the
-same driver, the <A
+ phase of Samba 2.2 is the need to support driver downloads for
+ 100's of printers. Using the Windows NT APW is somewhat
+ awkward to say the list. If more than one printer are using the
+ same driver, the <A
HREF="rpcclient.1.html"
TARGET="_top"
><B
CLASS="COMMAND"
>rpcclient's
-setdriver command</B
+ setdriver command</B
></A
> can be used to set the driver
-associated with an installed driver. The following is example
-of how this could be accomplished:</P
+ associated with an installed driver. The following is example
+ of how this could be accomplished:</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>
-<TT
+ <TT
CLASS="PROMPT"
>$ </TT
>rpcclient pogo -U root%secret -c "enumdrivers"
@@ -4561,180 +2570,36 @@ Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
[Windows NT x86]
Printer Driver Info 1:
- Driver Name: [HP LaserJet 4000 Series PS]
+ Driver Name: [HP LaserJet 4000 Series PS]
Printer Driver Info 1:
- Driver Name: [HP LaserJet 2100 Series PS]
+ Driver Name: [HP LaserJet 2100 Series PS]
Printer Driver Info 1:
- Driver Name: [HP LaserJet 4Si/4SiMX PS]
+ Driver Name: [HP LaserJet 4Si/4SiMX PS]
-<TT
+ <TT
CLASS="PROMPT"
>$ </TT
>rpcclient pogo -U root%secret -c "enumprinters"
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
- flags:[0x800000]
- name:[\\POGO\hp-print]
- description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
- comment:[]
+ flags:[0x800000]
+ name:[\\POGO\hp-print]
+ description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
+ comment:[]
-<TT
+ <TT
CLASS="PROMPT"
>$ </TT
->rpcclient pogo -U root%secret \
-<TT
+>rpcclient pogo -U root%bleaK.er \
+ <TT
CLASS="PROMPT"
->&#62; </TT
+>&gt; </TT
> -c "setdriver hp-print \"HP LaserJet 4000 Series PS\""
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
-Successfully set hp-print to driver HP LaserJet 4000 Series PS.</PRE
-></TD
-></TR
-></TABLE
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN857"
->6.2.4. Adding New Printers via the Windows NT APW</A
-></H2
-><P
->By default, Samba offers all printer shares defined in <TT
-CLASS="FILENAME"
->smb.conf</TT
->
-in the "Printers..." folder. Also existing in this folder is the Windows NT
-Add Printer Wizard icon. The APW will be show only if</P
-><P
+Succesfully set hp-print to driver HP LaserJet 4000 Series PS.
+ </PRE
></P
-><UL
-><LI
-><P
->The connected user is able to successfully
- execute an OpenPrinterEx(\\server) with administrative
- privileges (i.e. root or <TT
-CLASS="PARAMETER"
-><I
->printer admin</I
-></TT
->).
- </P
-></LI
-><LI
-><P
-><A
-HREF="smb.conf.5.html#SHOWADDPRINTERWIZARD"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
->show
- add printer wizard = yes</I
-></TT
-></A
-> (the default).
- </P
-></LI
-></UL
-><P
->In order to be able to use the APW to successfully add a printer to a Samba
-server, the <A
-HREF="smb.conf.5.html#ADDPRINTERCOMMAND"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
->add
-printer command</I
-></TT
-></A
-> must have a defined value. The program
-hook must successfully add the printer to the system (i.e.
-<TT
-CLASS="FILENAME"
->/etc/printcap</TT
-> or appropriate files) and
-<TT
-CLASS="FILENAME"
->smb.conf</TT
-> if necessary.</P
-><P
->When using the APW from a client, if the named printer share does
-not exist, <B
-CLASS="COMMAND"
->smbd</B
-> will execute the <TT
-CLASS="PARAMETER"
-><I
->add printer
-command</I
-></TT
-> and reparse to the <TT
-CLASS="FILENAME"
->smb.conf</TT
->
-to attempt to locate the new printer share. If the share is still not defined,
-an error of "Access Denied" is returned to the client. Note that the
-<TT
-CLASS="PARAMETER"
-><I
->add printer program</I
-></TT
-> is executed under the context
-of the connected user, not necessarily a root account.</P
-><P
->There is a complementing <A
-HREF="smb.conf.5.html#DELETEPRINTERCOMMAND"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
->delete
-printer command</I
-></TT
-></A
-> for removing entries from the "Printers..."
-folder.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN882"
->6.2.5. Samba and Printer Ports</A
-></H2
-><P
->Windows NT/2000 print servers associate a port with each printer. These normally
-take the form of LPT1:, COM1:, FILE:, etc... Samba must also support the
-concept of ports associated with a printer. By default, only one printer port,
-named "Samba Printer Port", exists on a system. Samba does not really a port in
-order to print, rather it is a requirement of Windows clients. </P
-><P
->Note that Samba does not support the concept of "Printer Pooling" internally
-either. This is when a logical printer is assigned to multiple ports as
-a form of load balancing or fail over.</P
-><P
->If you require that multiple ports be defined for some reason,
-<TT
-CLASS="FILENAME"
->smb.conf</TT
-> possesses a <A
-HREF="smb.conf.5.html#ENUMPORTSCOMMAND"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
->enumports
-command</I
-></TT
-></A
-> which can be used to define an external program
-that generates a listing of ports on a system.</P
></DIV
></DIV
><DIV
@@ -4742,8 +2607,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN890"
->6.3. The Imprints Toolset</A
+NAME="AEN522"
+>The Imprints Toolset</A
></H1
><P
>The Imprints tool set provides a UNIX equivalent of the
@@ -4760,8 +2625,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN894"
->6.3.1. What is Imprints?</A
+NAME="AEN526"
+>What is Imprints?</A
></H2
><P
>Imprints is a collection of tools for supporting the goals
@@ -4792,8 +2657,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN904"
->6.3.2. Creating Printer Driver Packages</A
+NAME="AEN536"
+>Creating Printer Driver Packages</A
></H2
><P
>The process of creating printer driver packages is beyond
@@ -4808,8 +2673,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN907"
->6.3.3. The Imprints server</A
+NAME="AEN539"
+>The Imprints server</A
></H2
><P
>The Imprints server is really a database server that
@@ -4818,8 +2683,9 @@ NAME="AEN907"
downloading of the package. Each package is digitally signed
via GnuPG which can be used to verify that package downloaded
is actually the one referred in the Imprints database. It is
- <EM
->not</EM
+ <I
+CLASS="EMPHASIS"
+>not</I
> recommended that this security check
be disabled.</P
></DIV
@@ -4828,8 +2694,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN911"
->6.3.4. The Installation Client</A
+NAME="AEN543"
+>The Installation Client</A
></H2
><P
>More information regarding the Imprints installation client
@@ -4870,35 +2736,27 @@ CLASS="COMMAND"
>rpcclient</B
>.</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>
-foreach (supported architecture for a given driver)
-{
- 1. rpcclient: Get the appropriate upload directory
- on the remote server
- 2. smbclient: Upload the driver files
- 3. rpcclient: Issues an AddPrinterDriver() MS-RPC
-}
+ foreach (supported architecture for a given driver)
+ {
+ 1. rpcclient: Get the appropriate upload directory
+ on the remote server
+ 2. smbclient: Upload the driver files
+ 3. rpcclient: Issues an AddPrinterDriver() MS-RPC
+ }
-4. rpcclient: Issue an AddPrinterEx() MS-RPC to actually
- create the printer</PRE
-></TD
-></TR
-></TABLE
+ 4. rpcclient: Issue an AddPrinterEx() MS-RPC to actually
+ create the printer
+ </PRE
></P
><P
>One of the problems encountered when implementing
the Imprints tool set was the name space issues between
various supported client architectures. For example, Windows
NT includes a driver named "Apple LaserWriter II NTX v51.8"
- and Windows 95 calls its version of this driver "Apple
+ and Windows 95 callsits version of this driver "Apple
LaserWriter II NTX"</P
><P
>The problem is how to know what client drivers have
@@ -4914,7 +2772,7 @@ CLASS="FILENAME"
></P
><P
>will reveal that Windows NT always uses the NT driver
- name. This is ok as Windows NT always requires that at least
+ name. The is ok as Windows NT always requires that at least
the Windows NT version of the printer driver is present.
However, Samba does not have the requirement internally.
Therefore, how can you use the NT driver name if is has not
@@ -4931,60 +2789,18 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN933"
->6.4. <A
+NAME="AEN565"
+><A
NAME="MIGRATION"
></A
->Migration to from Samba 2.0.x to 2.2.x</A
+>Migration to from Samba 2.0.x to
+ 2.2.x</A
></H1
><P
->Given that printer driver management has changed (we hope improved) in
-2.2 over prior releases, migration from an existing setup to 2.2 can
-follow several paths.</P
-><P
->Windows clients have a tendency to remember things for quite a while.
-For example, if a Windows NT client has attached to a Samba 2.0 server,
-it will remember the server as a LanMan printer server. Upgrading
-the Samba host to 2.2 makes support for MSRPC printing possible, but
-the NT client will still remember the previous setting.</P
-><P
->In order to give an NT client printing "amnesia" (only necessary if you
-want to use the newer MSRPC printing functionality in Samba), delete
-the registry keys associated with the print server contained in
-<TT
-CLASS="CONSTANT"
->[HKLM\SYSTEM\CurrentControlSet\Control\Print]</TT
->. The
-spooler service on the client should be stopped prior to doing this:</P
-><P
-><TT
-CLASS="PROMPT"
->C:\WINNT\ &#62;</TT
-> <TT
-CLASS="USERINPUT"
-><B
->net stop spooler</B
-></TT
-></P
-><P
-><EM
->All the normal disclaimers about editing the registry go
-here.</EM
-> Be careful, and know what you are doing.</P
-><P
->The spooler service should be restarted after you have finished
-removing the appropriate registry entries by replacing the
-<B
-CLASS="COMMAND"
->stop</B
-> command above with <B
-CLASS="COMMAND"
->start</B
->.</P
-><P
->Windows 9x clients will continue to use LanMan printing calls
-with a 2.2 Samba server so there is no need to perform any of these
-modifications on non-NT clients.</P
+>Given that printer driver management has changed
+ (we hope improved :) ) in 2.2.0 over prior releases,
+ migration from an existing setup to 2.2.0 can follow
+ several paths.</P
><DIV
CLASS="WARNING"
><P
@@ -4997,15 +2813,16 @@ WIDTH="100%"
><TD
ALIGN="CENTER"
><B
->Achtung!</B
+>Warning</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
->The following smb.conf parameters are considered to be depreciated and will
-be removed soon. Do not use them in new installations</P
+>The following smb.conf parameters are considered to be
+ depreciated and will be removed soon. Do not use them
+ in new installations</P
><P
></P
><UL
@@ -5017,7 +2834,7 @@ CLASS="PARAMETER"
>printer driver file (G)</I
></TT
>
- </P
+ </P
></LI
><LI
><P
@@ -5027,7 +2844,7 @@ CLASS="PARAMETER"
>printer driver (S)</I
></TT
>
- </P
+ </P
></LI
><LI
><P
@@ -5037,7 +2854,7 @@ CLASS="PARAMETER"
>printer driver location (S)</I
></TT
>
- </P
+ </P
></LI
></UL
></TD
@@ -5052,54 +2869,46 @@ CLASS="PARAMETER"
><LI
><P
>If you do not desire the new Windows NT
- print driver support, nothing needs to be done.
- All existing parameters work the same.</P
+ print driver support, nothing needs to be done.
+ All existing parameters work the same.</P
></LI
><LI
><P
>If you want to take advantage of NT printer
- driver support but do not want to migrate the
- 9x drivers to the new setup, the leave the existing
- printers.def file. When smbd attempts to locate a
- 9x driver for the printer in the TDB and fails it
- will drop down to using the printers.def (and all
- associated parameters). The <B
+ driver support but do not want to migrate the
+ 9x drivers to the new setup, the leave the existing
+ printers.def file. When smbd attempts to locate a
+ 9x driver for the printer in the TDB and fails it
+ will drop down to using the printers.def (and all
+ associated parameters). The <B
CLASS="COMMAND"
>make_printerdef</B
>
- tool will also remain for backwards compatibility but will
- be moved to the "this tool is the old way of doing it"
- pile.</P
+ tool will also remain for backwards compatibility but will
+ be moved to the "this tool is the old way of doing it"
+ pile.</P
></LI
><LI
><P
>If you install a Windows 9x driver for a printer
- on your Samba host (in the printing TDB), this information will
- take precedence and the three old printing parameters
- will be ignored (including print driver location).</P
+ on your Samba host (in the printing TDB), this information will
+ take precedence and the three old printing parameters
+ will be ignored (including print driver location).</P
></LI
><LI
><P
>If you want to migrate an existing <TT
CLASS="FILENAME"
->printers.def</TT
->
- file into the new setup, the current only solution is to use the Windows
- NT APW to install the NT drivers and the 9x drivers. This can be scripted
- using <B
-CLASS="COMMAND"
->smbclient</B
-> and <B
-CLASS="COMMAND"
->rpcclient</B
->. See the
- Imprints installation client at <A
+> printers.def</TT
+> file into the new setup, the current only
+ solution is to use the Windows NT APW to install the NT drivers
+ and the 9x drivers. This can be scripted using smbclient and
+ rpcclient. See the <A
HREF="http://imprints.sourceforge.net/"
TARGET="_top"
->http://imprints.sourceforge.net/</A
->
- for an example.
- </P
+> Imprints insrallation client</A
+> for an example.
+ </P
></LI
></UL
></DIV
@@ -5108,16 +2917,16 @@ TARGET="_top"
CLASS="CHAPTER"
><HR><H1
><A
-NAME="AEN977"
->Chapter 7. security = domain in Samba 2.x</A
+NAME="AEN594"
+>Chapter 5. security = domain in Samba 2.x</A
></H1
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
-NAME="AEN995"
->7.1. Joining an NT Domain with Samba 2.2</A
+NAME="AEN612"
+>Joining an NT Domain with Samba 2.2</A
></H1
><P
>In order for a Samba-2 server to join an NT domain,
@@ -5125,8 +2934,9 @@ NAME="AEN995"
NT domain on the PDC using Server Manager for Domains. This creates
the machine account in the domain (PDC) SAM. Note that you should
add the Samba server as a "Windows NT Workstation or Server",
- <EM
->NOT</EM
+ <I
+CLASS="EMPHASIS"
+>NOT</I
> as a Primary or backup domain controller.</P
><P
>Assume you have a Samba-2 server with a NetBIOS name of
@@ -5203,13 +3013,13 @@ CLASS="FILENAME"
><TT
CLASS="REPLACEABLE"
><I
->&#60;NT DOMAIN NAME&#62;</I
+>&lt;NT DOMAIN NAME&gt;</I
></TT
>.<TT
CLASS="REPLACEABLE"
><I
->&#60;Samba
- Server Name&#62;</I
+>&lt;Samba
+ Server Name&gt;</I
></TT
>.mac</TT
></P
@@ -5343,8 +3153,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1059"
->7.2. Samba and Windows 2000 Domains</A
+NAME="AEN676"
+>Samba and Windows 2000 Domains</A
></H1
><P
>Many people have asked regarding the state of Samba's ability to participate in
@@ -5368,8 +3178,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1064"
->7.3. Why is this better than security = server?</A
+NAME="AEN681"
+>Why is this better than security = server?</A
></H1
><P
>Currently, domain security in Samba doesn't free you from
@@ -5434,8 +3244,9 @@ CLASS="COMMAND"
user is authenticated, making a Samba server truly plug and play
in an NT domain environment. Watch for this code soon.</P
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> Much of the text of this document
was first published in the Web magazine <A
HREF="http://www.linuxworld.com"
@@ -5454,135 +3265,53 @@ TARGET="_top"
CLASS="CHAPTER"
><HR><H1
><A
-NAME="AEN1080"
->Chapter 8. How to Configure Samba 2.2 as a Primary Domain Controller</A
+NAME="AEN697"
+>Chapter 6. How to Configure Samba 2.2.x as a Primary Domain Controller</A
></H1
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
-NAME="AEN1097"
->8.1. Prerequisite Reading</A
-></H1
-><P
->Before you continue reading in this chapter, please make sure
-that you are comfortable with configuring basic files services
-in smb.conf and how to enable and administer password
-encryption in Samba. Theses two topics are covered in the
-<A
-HREF="smb.conf.5.html"
-TARGET="_top"
-><TT
-CLASS="FILENAME"
->smb.conf(5)</TT
-></A
->
-manpage and the <A
-HREF="ENCRYPTION.html"
-TARGET="_top"
->Encryption chapter</A
->
-of this HOWTO Collection.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN1103"
->8.2. Background</A
+NAME="AEN708"
+>Background</A
></H1
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
><P
-><B
->Note: </B
-><EM
->Author's Note :</EM
-> This document is a combination
-of David Bannon's Samba 2.2 PDC HOWTO and the Samba NT Domain FAQ.
-Both documents are superseded by this one.</P
-></BLOCKQUOTE
-></DIV
+><I
+CLASS="EMPHASIS"
+>Author's Note :</I
+> This document
+is a combination of David Bannon's Samba 2.2 PDC HOWTO
+and the Samba NT Domain FAQ. Both documents are superceeded by this one.</P
><P
>Version of Samba prior to release 2.2 had marginal capabilities to
-act as a Windows NT 4.0 Primary Domain Controller (PDC). Beginning with
-Samba 2.2.0, we are proud to announce official support for Windows NT 4.0
-style domain logons from Windows NT 4.0 (through SP6) and Windows 2000 (through
-SP1) clients. This article outlines the steps necessary for configuring Samba
-as a PDC. It is necessary to have a working Samba server prior to implementing the
-PDC functionality. If you have not followed the steps outlined in
-<A
-HREF="UNIX_INSTALL.html"
-TARGET="_top"
-> UNIX_INSTALL.html</A
->, please make sure
-that your server is configured correctly before proceeding. Another good
-resource in the <A
-HREF="smb.conf.5.html"
-TARGET="_top"
->smb.conf(5) man
-page</A
->. The following functionality should work in 2.2:</P
+act as a Windows NT 4.0 Primary Domain Controller (PDC). The following
+functionality should work in 2.2.0:</P
><P
></P
><UL
><LI
><P
-> domain logons for Windows NT 4.0/2000 clients.
- </P
+>domain logons for Windows NT 4.0/2000 clients</P
></LI
><LI
><P
-> placing a Windows 9x client in user level security
- </P
+>placing a Windows 9x client in user level security</P
></LI
><LI
><P
-> retrieving a list of users and groups from a Samba PDC to
- Windows 9x/NT/2000 clients
- </P
+>retrieving a list of users and groups from a Samba PDC to
+ Windows 9x/NT/2000 clients </P
></LI
><LI
><P
-> roving (roaming) user profiles
- </P
+>roving user profiles</P
></LI
><LI
><P
-> Windows NT 4.0 style system policies
- </P
+>Windows NT 4.0 style system policies</P
></LI
></UL
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Windows 2000 Service Pack 2 Clients</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
-> Samba 2.2.1 is required for PDC functionality when using Windows 2000
- SP2 clients.
- </P
-></TD
-></TR
-></TABLE
-></DIV
><P
>The following pieces of functionality are not included in the 2.2 release:</P
><P
@@ -5590,25 +3319,21 @@ ALIGN="LEFT"
><UL
><LI
><P
-> Windows NT 4 domain trusts
- </P
+>Windows NT 4 domain trusts</P
></LI
><LI
><P
-> SAM replication with Windows NT 4.0 Domain Controllers
- (i.e. a Samba PDC and a Windows NT BDC or vice versa)
- </P
+>Sam replication with Windows NT 4.0 Domain Controllers
+ (i.e. a Samba PDC and a Windows NT BDC or vice versa) </P
></LI
><LI
><P
-> Adding users via the User Manager for Domains
- </P
+>Adding users via the User Manager for Domains</P
></LI
><LI
><P
-> Acting as a Windows 2000 Domain Controller (i.e. Kerberos and
- Active Directory)
- </P
+>Acting as a Windows 2000 Domain Controller (i.e. Kerberos
+ and Active Directory)</P
></LI
></UL
><P
@@ -5618,6 +3343,25 @@ support Windows 9x style domain logons is completely different
from NT4 domain logons and has been officially supported for some
time.</P
><P
+>Beginning with Samba 2.2.0, we are proud to announce official
+support for Windows NT 4.0 style domain logons from Windows NT
+4.0 and Windows 2000 (including SP1) clients. This article
+outlines the steps necessary for configuring Samba as a PDC.
+Note that it is necessary to have a working Samba server
+prior to implementing the PDC functionality. If you have not
+followed the steps outlined in <A
+HREF="UNIX_INSTALL.html"
+TARGET="_top"
+>UNIX_INSTALL.html</A
+>, please make sure that your server
+is configured correctly before proceeding. Another good
+resource in the <A
+HREF="smb.conf.5.html"
+TARGET="_top"
+>smb.conf(5) man
+page</A
+>.</P
+><P
>Implementing a Samba PDC can basically be divided into 2 broad
steps.</P
><P
@@ -5626,14 +3370,13 @@ steps.</P
TYPE="1"
><LI
><P
-> Configuring the Samba PDC
+>Configuring the Samba Domain Controller
</P
></LI
><LI
><P
-> Creating machine trust accounts and joining clients
- to the domain
- </P
+>Creating machine trust accounts
+ and joining clients to the domain</P
></LI
></OL
><P
@@ -5647,8 +3390,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1143"
->8.3. Configuring the Samba Domain Controller</A
+NAME="AEN745"
+>Configuring the Samba Domain Controller</A
></H1
><P
>The first step in creating a working Samba PDC is to
@@ -5664,12 +3407,6 @@ linked with the actual smb.conf description.</P
><P
>Here is an example smb.conf for acting as a PDC:</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>[global]
@@ -5759,7 +3496,7 @@ TARGET="_top"
> = \\homeserver\%u
; specify a generic logon script for all users
- ; this is a relative **DOS** path to the [netlogon] share
+ ; this is a relative path to the [netlogon] share
<A
HREF="smb.conf.5.html#LOGONSCRIPT"
TARGET="_top"
@@ -5811,19 +3548,18 @@ HREF="smb.conf.5.html#DIRECTORYMASK"
TARGET="_top"
>directory mask</A
> = 0700</PRE
-></TD
-></TR
-></TABLE
></P
><P
->There are a couple of points to emphasize in the above configuration.</P
+>There are a couple of points to emphasize in the above
+configuration.</P
><P
></P
><UL
><LI
><P
-> Encrypted passwords must be enabled. For more details on how
- to do this, refer to <A
+>encrypted passwords must be enabled.
+ For more details on how to do this, refer to
+ <A
HREF="ENCRYPTION.html"
TARGET="_top"
>ENCRYPTION.html</A
@@ -5832,27 +3568,23 @@ TARGET="_top"
></LI
><LI
><P
-> The server must support domain logons and a
- <TT
+>The server must support domain logons
+ and a <TT
CLASS="FILENAME"
>[netlogon]</TT
-> share
- </P
+> share</P
></LI
><LI
><P
-> The server must be the domain master browser in order for Windows
- client to locate the server as a DC. Please refer to the various
- Network Browsing documentation included with this distribution for
- details.
- </P
+>The server must be the domain master browser
+ in order for Windows client to locate the server as a DC.</P
></LI
></UL
><P
>As Samba 2.2 does not offer a complete implementation of group mapping between
Windows NT groups and UNIX groups (this is really quite complicated to explain
in a short space), you should refer to the <A
-HREF="smb.conf.5.html#DOMAINADMINUSERS"
+HREF="smb.conf.5.html#DOMAINADMONUSERS"
TARGET="_top"
>domain
admin users</A
@@ -5869,38 +3601,28 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1186"
->8.4. Creating Machine Trust Accounts and Joining Clients
+NAME="AEN788"
+>Creating Machine Trust Accounts and Joining Clients
to the Domain</A
></H1
><P
->A machine trust account is a samba user account owned by a computer.
+>First you must understand what a machine trust account is and what
+it is used for.</P
+><P
+>A machine trust account is a user account owned by a computer.
The account password acts as the shared secret for secure
-communication with the Domain Controller. This is a security feature
-to prevent an unauthorized machine with the same NetBIOS name from
-joining the domain and gaining access to domain user/group accounts.
-Hence a Windows 9x host is never a true member of a domain because it does
-not posses a machine trust account, and thus has no shared secret with the DC.</P
+communication with the Domain Controller. Hence the reason that
+a Windows 9x host is never a true member of a domain because
+it does not posses a machine trust account and thus has no shared
+secret with the DC.</P
><P
>On a Windows NT PDC, these machine trust account passwords are stored
-in the registry. A Samba PDC stores these accounts in the same location
+in the registry. A Samba PDC stores these accounts in he same location
as user LanMan and NT password hashes (currently <TT
CLASS="FILENAME"
>smbpasswd</TT
>).
-However, machine trust accounts only possess and use the NT password hash.</P
-><P
->Because Samba requires machine accounts to possess a UNIX uid from
-which an Windows NT SID can be generated, all of these accounts
-must have an entry in <TT
-CLASS="FILENAME"
->/etc/passwd</TT
-> and smbpasswd.
-Future releases will alleviate the need to create
-<TT
-CLASS="FILENAME"
->/etc/passwd</TT
-> entries. </P
+However, machine trust accounts only possess the NT password hash.</P
><P
>There are two means of creating machine trust accounts.</P
><P
@@ -5908,52 +3630,30 @@ CLASS="FILENAME"
><UL
><LI
><P
-> Manual creation before joining the client to the domain. In this case,
- the password is set to a known value -- the lower case of the
- machine's NetBIOS name.
- </P
+>Manual creation before joining the client
+ to the domain. In this case, the password is set to a known
+ value -- the lower case of the machine's netbios name.</P
></LI
><LI
><P
-> Creation of the account at the time of joining the domain. In
- this case, the session key of the administrative account used to join
- the client to the domain acts as an encryption key for setting the
- password to a random value (This is the recommended method).
- </P
+>Creation of the account at the time of
+ joining the domain. In this case, the session key of the
+ administrative account used to join the client to the domain acts
+ as an encryption key for setting the password to a random value.</P
></LI
></UL
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN1200"
->8.4.1. Manually creating machine trust accounts</A
-></H2
-><P
->The first step in creating a machine trust account by hand is to
-create an entry for the machine in /etc/passwd. This can be done
-using <B
-CLASS="COMMAND"
->vipw</B
-> or any 'add userr' command which is normally
-used to create new UNIX accounts. The following is an example for a Linux
-based Samba server:</P
><P
-><TT
-CLASS="PROMPT"
->root# </TT
->/usr/sbin/useradd -g 100 -d /dev/null -c <TT
-CLASS="REPLACEABLE"
-><I
->machine_nickname</I
-></TT
-> -m -s /bin/false <TT
-CLASS="REPLACEABLE"
-><I
->machine_name</I
-></TT
->$</P
+>Because Samba requires machine accounts to possess a UNIX uid from
+which an Windows NT SID can be generated, all of these accounts
+will have an entry in <TT
+CLASS="FILENAME"
+>/etc/passwd</TT
+> and smbpasswd.
+Future releases will alleviate the need to create
+<TT
+CLASS="FILENAME"
+>/etc/passwd</TT
+> entries.</P
><P
>The <TT
CLASS="FILENAME"
@@ -5966,51 +3666,22 @@ CLASS="FILENAME"
>/etc/passwd</TT
> entry like this :</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
->doppy$:x:505:501:<TT
-CLASS="REPLACEABLE"
-><I
->machine_nickname</I
-></TT
->:/dev/null:/bin/false</PRE
-></TD
-></TR
-></TABLE
+>doppy$:x:505:501:NTMachine:/dev/null:/bin/false</PRE
></P
><P
->Above, <TT
-CLASS="REPLACEABLE"
-><I
->machine_nickname</I
-></TT
-> can be any descriptive name for the
-pc i.e. BasementComputer. The <TT
-CLASS="REPLACEABLE"
-><I
->machine_name</I
-></TT
-> absolutely must be
-the NetBIOS name of the pc to be added to the domain. The "$" must append the NetBIOS
-name of the pc or samba will not recognize this as a machine account</P
-><P
->Now that the UNIX account has been created, the next step is to create
-the smbpasswd entry for the machine containing the well known initial
-trust account password. This can be done using the <A
-HREF="smbpasswd.6.html"
-TARGET="_top"
-><B
-CLASS="COMMAND"
->smbpasswd(8)</B
-></A
-> command
-as shown here:</P
+>If you are manually creating the machine accounts, it is necessary
+to add the <TT
+CLASS="FILENAME"
+>/etc/passwd</TT
+> (or NIS passwd
+map) entry prior to adding the <TT
+CLASS="FILENAME"
+>smbpasswd</TT
+>
+entry. The following command will create a new machine account
+ready for use.</P
><P
><TT
CLASS="PROMPT"
@@ -6027,295 +3698,169 @@ CLASS="REPLACEABLE"
><I
>machine_name</I
></TT
-> is the machine's NetBIOS
-name. </P
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Join the client to the domain immediately</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
+> is the machine's netbios
+name.</P
><P
-> Manually creating a machine trust account using this method is the
- equivalent of creating a machine account on a Windows NT PDC using
- the "Server Manager". From the time at which the account is created
- to the time which th client joins the domain and changes the password,
- your domain is vulnerable to an intruder joining your domain using a
- a machine with the same NetBIOS name. A PDC inherently trusts
- members of the domain and will serve out a large degree of user
- information to such clients. You have been warned!
- </P
-></TD
-></TR
-></TABLE
-></DIV
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN1228"
->8.4.2. Creating machine trust accounts "on the fly"</A
-></H2
-><P
->The second, and most recommended way of creating machine trust accounts
-is to create them as needed at the time the client is joined to
-the domain. You will need to include a value for the <A
+><I
+CLASS="EMPHASIS"
+>If you manually create a machine account, immediately join
+the client to the domain.</I
+> An open account like this
+can allow intruders to gain access to user account information
+in your domain.</P
+><P
+>The second way of creating machine trust accounts is to add
+them on the fly at the time the client is joined to the domain.
+You will need to include a value for the
+<A
HREF="smb.conf.5.html#ADDUSERSCRIPT"
TARGET="_top"
>add user script</A
>
-parameter. Below is an example from a RedHat 6.2 Linux system.</P
+parameter. Below is an example I use on a RedHat 6.2 Linux system.</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u </PRE
-></TD
-></TR
-></TABLE
></P
><P
->In Samba 2.2.1, <EM
->only the root account</EM
+>In Samba 2.2.0, <I
+CLASS="EMPHASIS"
+>only the root account</I
> can be used to create
-machine accounts like this. Therefore, it is required to create
-an entry in smbpasswd for <EM
->root</EM
->. The password
-<EM
->SHOULD</EM
-> be set to s different password that the
-associated <TT
+machine accounts on the fly like this. Therefore, it is required
+to create an entry in smbpasswd for <I
+CLASS="EMPHASIS"
+>root</I
+>.
+The password <I
+CLASS="EMPHASIS"
+>SHOULD</I
+> be set to s different
+password that the associated <TT
CLASS="FILENAME"
>/etc/passwd</TT
-> entry for security reasons.</P
-></DIV
+>
+entry for security reasons.</P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1239"
->8.5. Common Problems and Errors</A
+NAME="AEN827"
+>Common Problems and Errors</A
></H1
><P
></P
><P
+><I
+CLASS="EMPHASIS"
+>I cannot include a '$' in a machine name.</I
></P
-><UL
-><LI
-><P
-> <EM
->I cannot include a '$' in a machine name.</EM
->
- </P
><P
-> A 'machine name' in (typically) <TT
+>A 'machine name' in (typically) <TT
CLASS="FILENAME"
>/etc/passwd</TT
>
- of the machine name with a '$' appended. FreeBSD (and other BSD
- systems ?) won't create a user with a '$' in their name.
- </P
+of the machine name with a '$' appended. FreeBSD (and other BSD
+systems ?) won't create a user with a '$' in their name.</P
><P
-> The problem is only in the program used to make the entry, once
- made, it works perfectly. So create a user without the '$' and
- use <B
+>The problem is only in the program used to make the entry, once
+made, it works perfectly. So create a user without the '$' and
+use <B
CLASS="COMMAND"
>vipw</B
> to edit the entry, adding the '$'. Or create
- the whole entry with vipw if you like, make sure you use a
- unique uid !
- </P
-></LI
-><LI
+the whole entry with vipw if you like, make sure you use a
+unique uid !</P
><P
-> <EM
+><I
+CLASS="EMPHASIS"
>I get told "You already have a connection to the Domain...."
- or "Cannot join domain, the credentials supplied conflict with an
- existing set.." when creating a machine account.</EM
->
- </P
+when creating a machine account.</I
+></P
><P
-> This happens if you try to create a machine account from the
- machine itself and already have a connection (e.g. mapped drive)
- to a share (or IPC$) on the Samba PDC. The following command
- will remove all network drive connections:
- </P
+>This happens if you try to create a machine account from the
+machine itself and use a user name that does not work (for whatever
+reason) and then try another (possibly valid) user name.
+Exit out of the network applet to close the initial connection
+and try again.</P
><P
-> <TT
-CLASS="PROMPT"
->C:\WINNT\&#62;</TT
-> <B
-CLASS="COMMAND"
->net use * /d</B
->
- </P
+>Further, if the machine is a already a 'member of a workgroup' that
+is the same name as the domain you are joining (bad idea) you will
+get this message. Change the workgroup name to something else, it
+does not matter what, reboot, and try again.</P
><P
-> Further, if the machine is a already a 'member of a workgroup' that
- is the same name as the domain you are joining (bad idea) you will
- get this message. Change the workgroup name to something else, it
- does not matter what, reboot, and try again.
- </P
-></LI
-><LI
+><I
+CLASS="EMPHASIS"
+>I get told "Cannot join domain, the credentials supplied
+conflict with an existing set.."</I
+></P
><P
-> <EM
->The system can not log you on (C000019B)....</EM
->
- </P
+>This is the same basic problem as mentioned above, "You already
+have a connection..."</P
+><P
+><I
+CLASS="EMPHASIS"
+>"The system can not log you on (C000019B)...."</I
+></P
><P
>I joined the domain successfully but after upgrading
- to a newer version of the Samba code I get the message, "The system
- can not log you on (C000019B), Please try a gain or consult your
- system administrator" when attempting to logon.
- </P
+to a newer version of the Samba code I get the message, "The system
+can not log you on (C000019B), Please try a gain or consult your
+system administrator" when attempting to logon.</P
><P
-> This occurs when the domain SID stored in
- <TT
+>This occurs when the domain SID stored in
+<TT
CLASS="FILENAME"
>private/WORKGROUP.SID</TT
> is
- changed. For example, you remove the file and <B
+changed. For example, you remove the file and <B
CLASS="COMMAND"
>smbd</B
> automatically
- creates a new one. Or you are swapping back and forth between
- versions 2.0.7, TNG and the HEAD branch code (not recommended). The
- only way to correct the problem is to restore the original domain
- SID or remove the domain client from the domain and rejoin.
- </P
-></LI
-><LI
+creates a new one. Or you are swapping back and forth between
+versions 2.0.7, TNG and the HEAD branch code (not recommended). The
+only way to correct the problem is to restore the original domain
+SID or remove the domain client from the domain and rejoin.</P
><P
-> <EM
->The machine account for this computer either does not
- exist or is not accessible.</EM
->
- </P
-><P
-> When I try to join the domain I get the message "The machine account
- for this computer either does not exist or is not accessible". Whats
- wrong?
- </P
-><P
-> This problem is caused by the PDC not having a suitable machine account.
- If you are using the <TT
-CLASS="PARAMETER"
><I
->add user script</I
-></TT
-> method to create
- accounts then this would indicate that it has not worked. Ensure the domain
- admin user system is working.
- </P
-><P
-> Alternatively if you are creating account entries manually then they
- have not been created correctly. Make sure that you have the entry
- correct for the machine account in smbpasswd file on the Samba PDC.
- If you added the account using an editor rather than using the smbpasswd
- utility, make sure that the account name is the machine NetBIOS name
- with a '$' appended to it ( i.e. computer_name$ ). There must be an entry
- in both /etc/passwd and the smbpasswd file. Some people have reported
- that inconsistent subnet masks between the Samba server and the NT
- client have caused this problem. Make sure that these are consistent
- for both client and server.
- </P
-></LI
-><LI
-><P
-> <EM
->When I attempt to login to a Samba Domain from a NT4/W2K workstation,
- I get a message about my account being disabled.</EM
->
- </P
+CLASS="EMPHASIS"
+>"The machine account for this computer either does not
+exist or is not accessible."</I
+></P
><P
-> This problem is caused by a PAM related bug in Samba 2.2.0. This bug is
- fixed in 2.2.1. Other symptoms could be unaccessible shares on
- NT/W2K member servers in the domain or the following error in your smbd.log:
- passdb/pampass.c:pam_account(268) PAM: UNKNOWN ERROR for User: %user%
- </P
+>When I try to join the domain I get the message "The machine account
+for this computer either does not exist or is not accessible". Whats
+wrong ?</P
><P
-> At first be ensure to enable the useraccounts with <B
+>This problem is caused by the PDC not having a suitable machine account.
+If you are using the <B
CLASS="COMMAND"
->smbpasswd -e
- %user%</B
->, this is normally done, when you create an account.
- </P
-><P
-> In order to work around this problem in 2.2.0, configure the
- <TT
-CLASS="PARAMETER"
-><I
->account</I
-></TT
-> control flag in
- <TT
-CLASS="FILENAME"
->/etc/pam.d/samba</TT
-> file as follows:
- </P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-> account required pam_permit.so
- </PRE
-></TD
-></TR
-></TABLE
-></P
+>add user script =</B
+> method to create
+accounts then this would indicate that it has not worked. Ensure the domain
+admin user system is working.</P
><P
-> If you want to remain backward compatibility to samba 2.0.x use
- <TT
-CLASS="FILENAME"
->pam_permit.so</TT
->, it's also possible to use
- <TT
-CLASS="FILENAME"
->pam_pwdb.so</TT
->. There are some bugs if you try to
- use <TT
-CLASS="FILENAME"
->pam_unix.so</TT
->, if you need this, be ensure to use
- the most recent version of this file.
- </P
-></LI
-></UL
+>Alternatively if you are creating account entries manually then they
+have not been created correctly. Make sure that you have the entry
+correct for the machine account in smbpasswd file on the Samba PDC.
+If you added the account using an editor rather than using the smbpasswd
+utility, make sure that the account name is the machine netbios name
+with a '$' appended to it ( ie. computer_name$ ). There must be an entry
+in both /etc/passwd and the smbpasswd file. Some people have reported
+that inconsistent subnet masks between the Samba server and the NT
+client have caused this problem. Make sure that these are consistent
+for both client and server.</P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1287"
->8.6. System Policies and Profiles</A
+NAME="AEN855"
+>System Policies and Profiles</A
></H1
><P
>Much of the information necessary to implement System Policies and
@@ -6330,107 +3875,97 @@ Profiles and Policies in Windows NT 4.0</A
><P
>Here are some additional details:</P
><P
+><I
+CLASS="EMPHASIS"
+>What about Windows NT Policy Editor ?</I
></P
-><UL
-><LI
><P
-> <EM
->What about Windows NT Policy Editor ?</EM
->
- </P
-><P
-> To create or edit <TT
+>To create or edit <TT
CLASS="FILENAME"
>ntconfig.pol</TT
> you must use
- the NT Server Policy Editor, <B
+the NT Server Policy Editor, <B
CLASS="COMMAND"
>poledit.exe</B
> which
- is included with NT Server but <EM
->not NT Workstation</EM
+is included with NT Server but <I
+CLASS="EMPHASIS"
+>not NT Workstation</I
>.
- There is a Policy Editor on a NTws
- but it is not suitable for creating <EM
->Domain Policies</EM
+There is a Policy Editor on a NTws
+but it is not suitable for creating <I
+CLASS="EMPHASIS"
+>Domain Policies</I
>.
- Further, although the Windows 95
- Policy Editor can be installed on an NT Workstation/Server, it will not
- work with NT policies because the registry key that are set by the policy templates.
- However, the files from the NT Server will run happily enough on an NTws.
- You need <TT
+Further, although the Windows 95
+Policy Editor can be installed on an NT Workstation/Server, it will not
+work with NT policies because the registry key that are set by the policy templates.
+However, the files from the NT Server will run happily enough on an NTws.
+You need <TT
CLASS="FILENAME"
>poledit.exe, common.adm</TT
> and <TT
CLASS="FILENAME"
>winnt.adm</TT
>. It is convenient
- to put the two *.adm files in <TT
+to put the two *.adm files in <TT
CLASS="FILENAME"
>c:\winnt\inf</TT
> which is where
- the binary will look for them unless told otherwise. Note also that that
- directory is 'hidden'.
- </P
+the binary will look for them unless told otherwise. Note also that that
+directory is 'hidden'.</P
><P
-> The Windows NT policy editor is also included with the Service Pack 3 (and
- later) for Windows NT 4.0. Extract the files using <B
+>The Windows NT policy editor is also included with the
+Service Pack 3 (and later) for Windows NT 4.0. Extract the files using
+<B
CLASS="COMMAND"
>servicepackname /x</B
->,
- i.e. that's <B
+>, ie thats <B
CLASS="COMMAND"
->Nt4sp6ai.exe /x</B
-> for service pack 6a. The policy editor,
- <B
+>Nt4sp6ai.exe
+/x</B
+> for service pack 6a. The policy editor, <B
CLASS="COMMAND"
>poledit.exe</B
-> and the associated template files (*.adm) should
- be extracted as well. It is also possible to downloaded the policy template
- files for Office97 and get a copy of the policy editor. Another possible
- location is with the Zero Administration Kit available for download from Microsoft.
- </P
-></LI
-><LI
+> and the
+associated template files (*.adm) should
+be extracted as well. It is also possible to downloaded the policy template
+files for Office97 and get a copy of the policy editor. Another possible
+location is with the Zero Administration Kit available for download from Microsoft.</P
><P
-> <EM
->Can Win95 do Policies ?</EM
->
- </P
+><I
+CLASS="EMPHASIS"
+>Can Win95 do Policies ?</I
+></P
><P
-> Install the group policy handler for Win9x to pick up group
- policies. Look on the Win98 CD in <TT
+>Install the group policy handler for Win9x to pick up group
+policies. Look on the Win98 CD in <TT
CLASS="FILENAME"
>\tools\reskit\netadmin\poledit</TT
>.
- Install group policies on a Win9x client by double-clicking
- <TT
+Install group policies on a Win9x client by double-clicking
+<TT
CLASS="FILENAME"
>grouppol.inf</TT
>. Log off and on again a couple of
- times and see if Win98 picks up group policies. Unfortunately this needs
- to be done on every Win9x machine that uses group policies....
- </P
+times and see if Win98 picks up group policies. Unfortunately this needs
+to be done on every Win9x machine that uses group policies....</P
><P
-> If group policies don't work one reports suggests getting the updated
- (read: working) grouppol.dll for Windows 9x. The group list is grabbed
- from /etc/group.
- </P
-></LI
-><LI
+>If group policies don't work one reports suggests getting the updated
+(read: working) grouppol.dll for Windows 9x. The group list is grabbed
+from /etc/group.</P
><P
-> <EM
->How do I get 'User Manager' and 'Server Manager'</EM
->
- </P
+><I
+CLASS="EMPHASIS"
+>How do I get 'User Manager' and 'Server Manager'</I
+></P
><P
-> Since I don't need to buy an NT Server CD now, how do I get
- the 'User Manager for Domains', the 'Server Manager' ?
- </P
+>Since I don't need to buy an NT Server CD now, how do I get
+the 'User Manager for Domains', the 'Server Manager' ?</P
><P
-> Microsoft distributes a version of these tools called nexus for
- installation on Windows 95 systems. The tools set includes
- </P
+>Microsoft distributes a version of
+these tools called nexus for installation on Windows 95 systems. The
+tools set includes</P
><P
></P
><UL
@@ -6448,31 +3983,27 @@ CLASS="FILENAME"
></LI
></UL
><P
-> Click here to download the archived file <A
+>Click here to download the archived file <A
HREF="ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE"
TARGET="_top"
>ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE</A
->
- </P
+></P
><P
-> The Windows NT 4.0 version of the 'User Manager for
- Domains' and 'Server Manager' are available from Microsoft via ftp
- from <A
+>The Windows NT 4.0 version of the 'User Manager for
+Domains' and 'Server Manager' are available from Microsoft via ftp
+from <A
HREF="ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE"
TARGET="_top"
>ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE</A
->
- </P
-></LI
-></UL
+></P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1331"
->8.7. What other help can I get ?</A
+NAME="AEN895"
+>What other help can I get ?</A
></H1
><P
>There are many sources of information available in the form
@@ -6480,18 +4011,14 @@ of mailing lists, RFC's and documentation. The docs that come
with the samba distribution contain very good explanations of
general SMB topics such as browsing.</P
><P
-></P
-><UL
-><LI
-><P
-> <EM
+><I
+CLASS="EMPHASIS"
>What are some diagnostics tools I can use to debug the domain logon
- process and where can I find them?</EM
->
- </P
+process and where can I find them?</I
+></P
><P
> One of the best diagnostic tools for debugging problems is Samba itself.
- You can use the -d option for both smbd and nmbd to specify what
+ You can use the -d option for both smbd and nmbd to specifiy what
'debug level' at which to run. See the man pages on smbd, nmbd and
smb.conf for more information on debugging options. The debug
level can range from 1 (the default) to 10 (100 for debugging passwords).
@@ -6530,7 +4057,7 @@ CLASS="COMMAND"
></UL
><P
> An SMB enabled version of tcpdump is available from
- <A
+ <A
HREF="http://www.tcpdump.org/"
TARGET="_top"
>http://www.tcpdup.org/</A
@@ -6547,20 +4074,18 @@ TARGET="_top"
(aka. netmon) is available on the Microsoft Developer Network CD's,
the Windows NT Server install CD and the SMS CD's. The version of
netmon that ships with SMS allows for dumping packets between any two
- computers (i.e. placing the network interface in promiscuous mode).
+ computers (ie. placing the network interface in promiscuous mode).
The version on the NT Server install CD will only allow monitoring
of network traffic directed to the local NT box and broadcasts on the
local subnet. Be aware that Ethereal can read and write netmon
formatted files.
</P
-></LI
-><LI
><P
-> <EM
+><I
+CLASS="EMPHASIS"
>How do I install 'Network Monitor' on an NT Workstation
- or a Windows 9x box?</EM
->
- </P
+or a Windows 9x box?</I
+></P
><P
> Installing netmon on an NT workstation requires a couple
of steps. The following are for installing Netmon V4.00.349, which comes
@@ -6655,11 +4180,14 @@ CLASS="FILENAME"
information on how to do this. Copy the files from a working
Netmon installation.
</P
-></LI
-><LI
-><P
-> The following is a list if helpful URLs and other links:
- </P
+><DIV
+CLASS="SECT2"
+><HR><H2
+CLASS="SECT2"
+><A
+NAME="AEN942"
+>URLs and similar</A
+></H2
><P
></P
><UL
@@ -6673,8 +4201,9 @@ TARGET="_top"
></LI
><LI
><P
-> The <EM
->Development</EM
+> The <I
+CLASS="EMPHASIS"
+>Development</I
> document
on the Samba mirrors might mention your problem. If so,
it might mean that the developers are working on it.</P
@@ -6724,43 +4253,44 @@ TARGET="_top"
></P
></LI
></UL
-></LI
-></UL
+></DIV
+><DIV
+CLASS="SECT2"
+><HR><H2
+CLASS="SECT2"
+><A
+NAME="AEN966"
+>Mailing Lists</A
+></H2
><P
+><I
+CLASS="EMPHASIS"
+>How do I get help from the mailing lists ?</I
></P
-><UL
-><LI
><P
-> <EM
->How do I get help from the mailing lists ?</EM
->
- </P
-><P
-> There are a number of Samba related mailing lists. Go to <A
+>There are a number of Samba related mailing lists. Go to <A
HREF="http://samba.org"
TARGET="_top"
>http://samba.org</A
>, click on your nearest mirror
- and then click on <B
+and then click on <B
CLASS="COMMAND"
>Support</B
> and then click on <B
CLASS="COMMAND"
-> Samba related mailing lists</B
->.
- </P
+>Samba related mailing lists</B
+>.</P
><P
-> For questions relating to Samba TNG go to
- <A
+>For questions relating to Samba TNG go to
+<A
HREF="http://www.samba-tng.org/"
TARGET="_top"
>http://www.samba-tng.org/</A
>
- It has been requested that you don't post questions about Samba-TNG to the
- main stream Samba lists.</P
+It has been requested that you don't post questions about Samba-TNG to the
+main stream Samba lists.</P
><P
-> If you post a message to one of the lists please observe the following guide lines :
- </P
+>If you post a message to one of the lists please observe the following guide lines :</P
><P
></P
><UL
@@ -6799,7 +4329,7 @@ TARGET="_top"
><LI
><P
> Don't cross post. Work out which is the best list to post to
- and see what happens, i.e. don't post to both samba-ntdom and samba-technical.
+ and see what happens, ie don't post to both samba-ntdom and samba-technical.
Many people active on the lists subscribe to more
than one list and get annoyed to see the same message two or more times.
Often someone will see a message and thinking it would be better dealt
@@ -6807,8 +4337,9 @@ TARGET="_top"
></LI
><LI
><P
->You might include <EM
->partial</EM
+>You might include <I
+CLASS="EMPHASIS"
+>partial</I
>
log files written at a debug level set to as much as 20.
Please don't send the entire log but enough to give the context of the
@@ -6827,850 +4358,35 @@ TARGET="_top"
smb.conf in their attach directory ?</P
></LI
></UL
-></LI
-><LI
><P
-> <EM
->How do I get off the mailing lists ?</EM
->
- </P
+><I
+CLASS="EMPHASIS"
+>How do I get off the mailing lists ?</I
+></P
><P
>To have your name removed from a samba mailing list, go to the
- same place you went to to get on it. Go to <A
+ same place you went to to get on it. Go to <A
HREF="http://lists.samba.org/"
TARGET="_top"
>http://lists.samba.org</A
->,
- click on your nearest mirror and then click on <B
+>, click
+ on your nearest mirror and then click on <B
CLASS="COMMAND"
>Support</B
> and
- then click on <B
+ then click on <B
CLASS="COMMAND"
> Samba related mailing lists</B
>. Or perhaps see
- <A
+ <A
HREF="http://lists.samba.org/mailman/roster/samba-ntdom"
TARGET="_top"
>here</A
->
- </P
-><P
-> Please don't post messages to the list asking to be removed, you will just
- be referred to the above address (unless that process failed in some way...)
- </P
-></LI
-></UL
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN1445"
->8.8. Domain Control for Windows 9x/ME</A
-></H1
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->The following section contains much of the original
-DOMAIN.txt file previously included with Samba. Much of
-the material is based on what went into the book Special
-Edition, Using Samba. (Richard Sharpe)</P
-></BLOCKQUOTE
-></DIV
-><P
->A domain and a workgroup are exactly the same thing in terms of network
-browsing. The difference is that a distributable authentication
-database is associated with a domain, for secure login access to a
-network. Also, different access rights can be granted to users if they
-successfully authenticate against a domain logon server (NT server and
-other systems based on NT server support this, as does at least Samba TNG now).</P
-><P
->The SMB client logging on to a domain has an expectation that every other
-server in the domain should accept the same authentication information.
-Network browsing functionality of domains and workgroups is
-identical and is explained in BROWSING.txt. It should be noted, that browsing
-is total orthogonal to logon support.</P
-><P
->Issues related to the single-logon network model are discussed in this
-document. Samba supports domain logons, network logon scripts, and user
-profiles for MS Windows for workgroups and MS Windows 9X clients.</P
-><P
->When an SMB client in a domain wishes to logon it broadcast requests for a
-logon server. The first one to reply gets the job, and validates its
-password using whatever mechanism the Samba administrator has installed.
-It is possible (but very stupid) to create a domain where the user
-database is not shared between servers, i.e. they are effectively workgroup
-servers advertising themselves as participating in a domain. This
-demonstrates how authentication is quite different from but closely
-involved with domains.</P
-><P
->Another thing commonly associated with single-logon domains is remote
-administration over the SMB protocol. Again, there is no reason why this
-cannot be implemented with an underlying username database which is
-different from the Windows NT SAM. Support for the Remote Administration
-Protocol is planned for a future release of Samba.</P
-><P
->Network logon support as discussed in this section is aimed at Window for
-Workgroups, and Windows 9X clients. </P
-><P
->Support for profiles is confirmed as working for Win95, NT 4.0 and NT 3.51.
-It is possible to specify: the profile location; script file to be loaded
-on login; the user's home directory; and for NT a kick-off time could also
-now easily be supported. However, there are some differences between Win9X
-profile support and WinNT profile support. These are discussed below.</P
-><P
->With NT Workstations, all this does not require the use or intervention of
-an NT 4.0 or NT 3.51 server: Samba can now replace the logon services
-provided by an NT server, to a limited and experimental degree (for example,
-running "User Manager for Domains" will not provide you with access to
-a domain created by a Samba Server).</P
-><P
->With Win95, the help of an NT server can be enlisted, both for profile storage
-and for user authentication. For details on user authentication, see
-security_level.txt. For details on profile storage, see below.</P
-><P
->Using these features you can make your clients verify their logon via
-the Samba server; make clients run a batch file when they logon to
-the network and download their preferences, desktop and start menu.</P
-><P
->Before launching into the configuration instructions, it is worthwhile looking
-at how a Win9X client performs a logon:</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
-> The client broadcasts (to the IP broadcast address of the subnet it is in)
- a NetLogon request. This is sent to the NetBIOS address DOMAIN&#60;00&#62; at the
- NetBIOS layer. The client chooses the first response it receives, which
- contains the NetBIOS name of the logon server to use in the format of
- \\SERVER.
- </P
-></LI
-><LI
-><P
-> The client then connects to that server, logs on (does an SMBsessetupX) and
- then connects to the IPC$ share (using an SMBtconX).
- </P
-></LI
-><LI
-><P
-> The client then does a NetWkstaUserLogon request, which retrieves the name
- of the user's logon script.
- </P
-></LI
-><LI
-><P
-> The client then connects to the NetLogon share and searches for this
- and if it is found and can be read, is retrieved and executed by the client.
- After this, the client disconnects from the NetLogon share.
- </P
-></LI
-><LI
-><P
-> The client then sends a NetUserGetInfo request to the server, to retrieve
- the user's home share, which is used to search for profiles. Since the
- response to the NetUserGetInfo request does not contain much more
- the user's home share, profiles for Win9X clients MUST reside in the user
- home directory.
- </P
-></LI
-><LI
-><P
-> The client then connects to the user's home share and searches for the
- user's profile. As it turns out, you can specify the user's home share as
- a sharename and path. For example, \\server\fred\.profile.
- If the profiles are found, they are implemented.
- </P
-></LI
-><LI
-><P
-> The client then disconnects from the user's home share, and reconnects to
- the NetLogon share and looks for CONFIG.POL, the policies file. If this is
- found, it is read and implemented.
- </P
-></LI
-></OL
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN1475"
->8.8.1. Configuration Instructions: Network Logons</A
-></H2
-><P
->To use domain logons and profiles you need to do the following:</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
-> Create a share called [netlogon] in your smb.conf. This share should
- be readable by all users, and probably should not be writeable. This
- share will hold your network logon scripts, and the CONFIG.POL file
- (Note: for details on the CONFIG.POL file, how to use it, what it is,
- refer to the Microsoft Windows NT Administration documentation.
- The format of these files is not known, so you will need to use
- Microsoft tools).
- </P
-><P
-> For example I have used:
- </P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->[netlogon]
- path = /data/dos/netlogon
- writeable = no
- guest ok = no</PRE
-></TD
-></TR
-></TABLE
-></P
-><P
-> Note that it is important that this share is not writeable by ordinary
- users, in a secure environment: ordinary users should not be allowed
- to modify or add files that another user's computer would then download
- when they log in.
- </P
-></LI
-><LI
-><P
-> in the [global] section of smb.conf set the following:
- </P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->domain logons = yes
-logon script = %U.bat
- </PRE
-></TD
-></TR
-></TABLE
-></P
-><P
-> The choice of batch file is, of course, up to you. The above would
- give each user a separate batch file as the %U will be changed to
- their username automatically. The other standard % macros may also be
- used. You can make the batch files come from a subdirectory by using
- something like:
- </P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->logon script = scripts\%U.bat
- </PRE
-></TD
-></TR
-></TABLE
-></P
-></LI
-><LI
-><P
-> create the batch files to be run when the user logs in. If the batch
- file doesn't exist then no batch file will be run.
- </P
-><P
-> In the batch files you need to be careful to use DOS style cr/lf line
- endings. If you don't then DOS may get confused. I suggest you use a
- DOS editor to remotely edit the files if you don't know how to produce
- DOS style files under unix.
- </P
-></LI
-><LI
-><P
-> Use smbclient with the -U option for some users to make sure that
- the \\server\NETLOGON share is available, the batch files are
- visible and they are readable by the users.
- </P
-></LI
-><LI
-><P
-> you will probably find that your clients automatically mount the
- \\SERVER\NETLOGON share as drive z: while logging in. You can put
- some useful programs there to execute from the batch files.
- </P
-></LI
-></OL
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->security mode and master browsers</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
->There are a few comments to make in order to tie up some
-loose ends. There has been much debate over the issue of whether
-or not it is ok to configure Samba as a Domain Controller in security
-modes other than <TT
-CLASS="CONSTANT"
->USER</TT
->. The only security mode
-which will not work due to technical reasons is <TT
-CLASS="CONSTANT"
->SHARE</TT
->
-mode security. <TT
-CLASS="CONSTANT"
->DOMAIN</TT
-> and <TT
-CLASS="CONSTANT"
->SERVER</TT
->
-mode security is really just a variation on SMB user level security.</P
-><P
->Actually, this issue is also closer tied to the debate on whether
-or not Samba must be the domain master browser for its workgroup
-when operating as a DC. While it may technically be possible
-to configure a server as such (after all, browsing and domain logons
-are two distinctly different functions), it is not a good idea to
-so. You should remember that the DC must register the DOMAIN#1b NetBIOS
-name. This is the name used by Windows clients to locate the DC.
-Windows clients do not distinguish between the DC and the DMB.
-For this reason, it is very wise to configure the Samba DC as the DMB.</P
-><P
->Now back to the issue of configuring a Samba DC to use a mode other
-than "security = user". If a Samba host is configured to use
-another SMB server or DC in order to validate user connection
-requests, then it is a fact that some other machine on the network
-(the "password server") knows more about user than the Samba host.
-99% of the time, this other host is a domain controller. Now
-in order to operate in domain mode security, the "workgroup" parameter
-must be set to the name of the Windows NT domain (which already
-has a domain controller, right?)</P
-><P
->Therefore configuring a Samba box as a DC for a domain that
-already by definition has a PDC is asking for trouble.
-Therefore, you should always configure the Samba DC to be the DMB
-for its domain.</P
-></TD
-></TR
-></TABLE
-></DIV
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN1509"
->8.8.2. Configuration Instructions: Setting up Roaming User Profiles</A
-></H2
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Warning</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
-><EM
->NOTE!</EM
-> Roaming profiles support is different
-for Win9X and WinNT.</P
-></TD
-></TR
-></TABLE
-></DIV
-><P
->Before discussing how to configure roaming profiles, it is useful to see how
-Win9X and WinNT clients implement these features.</P
-><P
->Win9X clients send a NetUserGetInfo request to the server to get the user's
-profiles location. However, the response does not have room for a separate
-profiles location field, only the user's home share. This means that Win9X
-profiles are restricted to being in the user's home directory.</P
-><P
->WinNT clients send a NetSAMLogon RPC request, which contains many fields,
-including a separate field for the location of the user's profiles.
-This means that support for profiles is different for Win9X and WinNT.</P
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN1517"
->8.8.2.1. Windows NT Configuration</A
-></H3
-><P
->To support WinNT clients, inn the [global] section of smb.conf set the
-following (for example):</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->logon path = \\profileserver\profileshare\profilepath\%U\moreprofilepath</PRE
-></TD
-></TR
-></TABLE
-></P
-><P
->The default for this option is \\%N\%U\profile, namely
-\\sambaserver\username\profile. The \\N%\%U service is created
-automatically by the [homes] service.
-If you are using a samba server for the profiles, you _must_ make the
-share specified in the logon path browseable. </P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->[lkcl 26aug96 - we have discovered a problem where Windows clients can
-maintain a connection to the [homes] share in between logins. The
-[homes] share must NOT therefore be used in a profile path.]</P
-></BLOCKQUOTE
-></DIV
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN1525"
->8.8.2.2. Windows 9X Configuration</A
-></H3
-><P
->To support Win9X clients, you must use the "logon home" parameter. Samba has
-now been fixed so that "net use/home" now works as well, and it, too, relies
-on the "logon home" parameter.</P
-><P
->By using the logon home parameter, you are restricted to putting Win9X
-profiles in the user's home directory. But wait! There is a trick you
-can use. If you set the following in the [global] section of your
-smb.conf file:</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->logon home = \\%L\%U\.profiles</PRE
-></TD
-></TR
-></TABLE
-></P
-><P
->then your Win9X clients will dutifully put their clients in a subdirectory
-of your home directory called .profiles (thus making them hidden).</P
-><P
->Not only that, but 'net use/home' will also work, because of a feature in
-Win9X. It removes any directory stuff off the end of the home directory area
-and only uses the server and share portion. That is, it looks like you
-specified \\%L\%U for "logon home".</P
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN1533"
->8.8.2.3. Win9X and WinNT Configuration</A
-></H3
-><P
->You can support profiles for both Win9X and WinNT clients by setting both the
-"logon home" and "logon path" parameters. For example:</P
-><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->logon home = \\%L\%U\.profiles
-logon path = \\%L\profiles\%U</PRE
-></TD
-></TR
-></TABLE
-></P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->I have not checked what 'net use /home' does on NT when "logon home" is
-set as above.</P
-></BLOCKQUOTE
-></DIV
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN1540"
->8.8.2.4. Windows 9X Profile Setup</A
-></H3
-><P
->When a user first logs in on Windows 9X, the file user.DAT is created,
-as are folders "Start Menu", "Desktop", "Programs" and "Nethood".
-These directories and their contents will be merged with the local
-versions stored in c:\windows\profiles\username on subsequent logins,
-taking the most recent from each. You will need to use the [global]
-options "preserve case = yes", "short case preserve = yes" and
-"case sensitive = no" in order to maintain capital letters in shortcuts
-in any of the profile folders.</P
-><P
->The user.DAT file contains all the user's preferences. If you wish to
-enforce a set of preferences, rename their user.DAT file to user.MAN,
-and deny them write access to this file.</P
-><P
></P
-><OL
-TYPE="1"
-><LI
-><P
-> On the Windows 95 machine, go to Control Panel | Passwords and
- select the User Profiles tab. Select the required level of
- roaming preferences. Press OK, but do _not_ allow the computer
- to reboot.
- </P
-></LI
-><LI
-><P
-> On the Windows 95 machine, go to Control Panel | Network |
- Client for Microsoft Networks | Preferences. Select 'Log on to
- NT Domain'. Then, ensure that the Primary Logon is 'Client for
- Microsoft Networks'. Press OK, and this time allow the computer
- to reboot.
- </P
-></LI
-></OL
-><P
->Under Windows 95, Profiles are downloaded from the Primary Logon.
-If you have the Primary Logon as 'Client for Novell Networks', then
-the profiles and logon script will be downloaded from your Novell
-Server. If you have the Primary Logon as 'Windows Logon', then the
-profiles will be loaded from the local machine - a bit against the
-concept of roaming profiles, if you ask me.</P
-><P
->You will now find that the Microsoft Networks Login box contains
-[user, password, domain] instead of just [user, password]. Type in
-the samba server's domain name (or any other domain known to exist,
-but bear in mind that the user will be authenticated against this
-domain and profiles downloaded from it, if that domain logon server
-supports it), user name and user's password.</P
-><P
->Once the user has been successfully validated, the Windows 95 machine
-will inform you that 'The user has not logged on before' and asks you
-if you wish to save the user's preferences? Select 'yes'.</P
-><P
->Once the Windows 95 client comes up with the desktop, you should be able
-to examine the contents of the directory specified in the "logon path"
-on the samba server and verify that the "Desktop", "Start Menu",
-"Programs" and "Nethood" folders have been created.</P
-><P
->These folders will be cached locally on the client, and updated when
-the user logs off (if you haven't made them read-only by then :-).
-You will find that if the user creates further folders or short-cuts,
-that the client will merge the profile contents downloaded with the
-contents of the profile directory already on the local client, taking
-the newest folders and short-cuts from each set.</P
-><P
->If you have made the folders / files read-only on the samba server,
-then you will get errors from the w95 machine on logon and logout, as
-it attempts to merge the local and the remote profile. Basically, if
-you have any errors reported by the w95 machine, check the unix file
-permissions and ownership rights on the profile directory contents,
-on the samba server.</P
-><P
->If you have problems creating user profiles, you can reset the user's
-local desktop cache, as shown below. When this user then next logs in,
-they will be told that they are logging in "for the first time".</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
-> instead of logging in under the [user, password, domain] dialog,
- press escape.
- </P
-></LI
-><LI
-><P
-> run the regedit.exe program, and look in:
- </P
-><P
-> HKEY_LOCAL_MACHINE\Windows\CurrentVersion\ProfileList
- </P
-><P
-> you will find an entry, for each user, of ProfilePath. Note the
- contents of this key (likely to be c:\windows\profiles\username),
- then delete the key ProfilePath for the required user.
- </P
-><P
-> [Exit the registry editor].
- </P
-></LI
-><LI
-><P
-> <EM
->WARNING</EM
-> - before deleting the contents of the
- directory listed in
- the ProfilePath (this is likely to be c:\windows\profiles\username),
- ask them if they have any important files stored on their desktop
- or in their start menu. delete the contents of the directory
- ProfilePath (making a backup if any of the files are needed).
- </P
-><P
-> This will have the effect of removing the local (read-only hidden
- system file) user.DAT in their profile directory, as well as the
- local "desktop", "nethood", "start menu" and "programs" folders.
- </P
-></LI
-><LI
-><P
-> search for the user's .PWL password-caching file in the c:\windows
- directory, and delete it.
- </P
-></LI
-><LI
-><P
-> log off the windows 95 client.
- </P
-></LI
-><LI
-><P
-> check the contents of the profile path (see "logon path" described
- above), and delete the user.DAT or user.MAN file for the user,
- making a backup if required.
- </P
-></LI
-></OL
-><P
->If all else fails, increase samba's debug log levels to between 3 and 10,
-and / or run a packet trace program such as tcpdump or netmon.exe, and
-look for any error reports.</P
-><P
->If you have access to an NT server, then first set up roaming profiles
-and / or netlogons on the NT server. Make a packet trace, or examine
-the example packet traces provided with NT server, and see what the
-differences are with the equivalent samba trace.</P
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN1576"
->8.8.2.5. Windows NT Workstation 4.0</A
-></H3
-><P
->When a user first logs in to a Windows NT Workstation, the profile
-NTuser.DAT is created. The profile location can be now specified
-through the "logon path" parameter. </P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->[lkcl 10aug97 - i tried setting the path to
-\\samba-server\homes\profile, and discovered that this fails because
-a background process maintains the connection to the [homes] share
-which does _not_ close down in between user logins. you have to
-have \\samba-server\%L\profile, where user is the username created
-from the [homes] share].</P
-></BLOCKQUOTE
-></DIV
-><P
->There is a parameter that is now available for use with NT Profiles:
-"logon drive". This should be set to "h:" or any other drive, and
-should be used in conjunction with the new "logon home" parameter.</P
-><P
->The entry for the NT 4.0 profile is a _directory_ not a file. The NT
-help on profiles mentions that a directory is also created with a .PDS
-extension. The user, while logging in, must have write permission to
-create the full profile path (and the folder with the .PDS extension)
-[lkcl 10aug97 - i found that the creation of the .PDS directory failed,
-and had to create these manually for each user, with a shell script.
-also, i presume, but have not tested, that the full profile path must
-be browseable just as it is for w95, due to the manner in which they
-attempt to create the full profile path: test existence of each path
-component; create path component].</P
-><P
->In the profile directory, NT creates more folders than 95. It creates
-"Application Data" and others, as well as "Desktop", "Nethood",
-"Start Menu" and "Programs". The profile itself is stored in a file
-NTuser.DAT. Nothing appears to be stored in the .PDS directory, and
-its purpose is currently unknown.</P
-><P
->You can use the System Control Panel to copy a local profile onto
-a samba server (see NT Help on profiles: it is also capable of firing
-up the correct location in the System Control Panel for you). The
-NT Help file also mentions that renaming NTuser.DAT to NTuser.MAN
-turns a profile into a mandatory one.</P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->[lkcl 10aug97 - i notice that NT Workstation tells me that it is
-downloading a profile from a slow link. whether this is actually the
-case, or whether there is some configuration issue, as yet unknown,
-that makes NT Workstation _think_ that the link is a slow one is a
-matter to be resolved].</P
-><P
->[lkcl 20aug97 - after samba digest correspondence, one user found, and
-another confirmed, that profiles cannot be loaded from a samba server
-unless "security = user" and "encrypt passwords = yes" (see the file
-ENCRYPTION.txt) or "security = server" and "password server = ip.address.
-of.yourNTserver" are used. Either of these options will allow the NT
-workstation to access the samba server using LAN manager encrypted
-passwords, without the user intervention normally required by NT
-workstation for clear-text passwords].</P
-><P
->[lkcl 25aug97 - more comments received about NT profiles: the case of
-the profile _matters_. the file _must_ be called NTuser.DAT or, for
-a mandatory profile, NTuser.MAN].</P
-></BLOCKQUOTE
-></DIV
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN1589"
->8.8.2.6. Windows NT Server</A
-></H3
-><P
->There is nothing to stop you specifying any path that you like for the
-location of users' profiles. Therefore, you could specify that the
-profile be stored on a samba server, or any other SMB server, as long as
-that SMB server supports encrypted passwords.</P
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN1592"
->8.8.2.7. Sharing Profiles between W95 and NT Workstation 4.0</A
-></H3
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Potentially outdated or incorrect material follows</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
->I think this is all bogus, but have not deleted it. (Richard Sharpe)</P
-></TD
-></TR
-></TABLE
-></DIV
-><P
->The default logon path is \\%N\U%. NT Workstation will attempt to create
-a directory "\\samba-server\username.PDS" if you specify the logon path
-as "\\samba-server\username" with the NT User Manager. Therefore, you
-will need to specify (for example) "\\samba-server\username\profile".
-NT 4.0 will attempt to create "\\samba-server\username\profile.PDS", which
-is more likely to succeed.</P
-><P
->If you then want to share the same Start Menu / Desktop with W95, you will
-need to specify "logon path = \\samba-server\username\profile" [lkcl 10aug97
-this has its drawbacks: i created a shortcut to telnet.exe, which attempts
-to run from the c:\winnt\system32 directory. this directory is obviously
-unlikely to exist on a Win95-only host].</P
-><P
->&#13;If you have this set up correctly, you will find separate user.DAT and
-NTuser.DAT files in the same profile directory.</P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
><P
-><B
->Note: </B
->[lkcl 25aug97 - there are some issues to resolve with downloading of
-NT profiles, probably to do with time/date stamps. i have found that
-NTuser.DAT is never updated on the workstation after the first time that
-it is copied to the local workstation profile directory. this is in
-contrast to w95, where it _does_ transfer / update profiles correctly].</P
-></BLOCKQUOTE
-></DIV
-></DIV
+> Please don't post messages to the list asking to be removed, you will just
+ be referred to the above address (unless that process failed in some way...)
+ </P
></DIV
></DIV
><DIV
@@ -7678,38 +4394,16 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1602"
->8.9. DOMAIN_CONTROL.txt : Windows NT Domain Control &#38; Samba</A
+NAME="AEN1005"
+>DOMAIN_CONTROL.txt : Windows NT Domain Control &#38; Samba</A
></H1
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Possibly Outdated Material</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
><P
-> This appendix was originally authored by John H Terpstra of
- the Samba Team and is included here for posterity.
- </P
-></TD
-></TR
-></TABLE
-></DIV
+>This appendix was originally authored by John H Terpstra of the Samba Team
+and is included here for posterity.</P
><P
-><EM
->NOTE :</EM
+><I
+CLASS="EMPHASIS"
+>NOTE :</I
>
The term "Domain Controller" and those related to it refer to one specific
method of authentication that can underly an SMB domain. Domain Controllers
@@ -7722,9 +4416,12 @@ Windows NT SAM.</P
><P
>Windows NT Server can be installed as either a plain file and print server
(WORKGROUP workstation or server) or as a server that participates in Domain
-Control (DOMAIN member, Primary Domain controller or Backup Domain controller).
-The same is true for OS/2 Warp Server, Digital Pathworks and other similar
-products, all of which can participate in Domain Control along with Windows NT.</P
+Control (DOMAIN member, Primary Domain controller or Backup Domain controller).</P
+><P
+>The same is true for OS/2 Warp Server, Digital Pathworks and other similar
+products, all of which can participate in Domain Control along with Windows NT.
+However only those servers which have licensed Windows NT code in them can be
+a primary Domain Controller (eg Windows NT Server, Advanced Server for Unix.)</P
><P
>To many people these terms can be confusing, so let's try to clear the air.</P
><P
@@ -7775,7 +4472,7 @@ plain Servers.</P
><P
>The User database is called the SAM (Security Access Manager) database and
is used for all user authentication as well as for authentication of inter-
-process authentication (i.e. to ensure that the service action a user has
+process authentication (ie: to ensure that the service action a user has
requested is permitted within the limits of that user's privileges).</P
><P
>The Samba team have produced a utility that can dump the Windows NT SAM into
@@ -7786,7 +4483,7 @@ to Samba systems.</P
><P
>Windows for Workgroups, Windows 95, and Windows NT Workstations and Servers
can participate in a Domain security system that is controlled by Windows NT
-servers that have been correctly configured. Almost every domain will have
+servers that have been correctly configured. At most every domain will have
ONE Primary Domain Controller (PDC). It is desirable that each domain will
have at least one Backup Domain Controller (BDC).</P
><P
@@ -7799,25 +4496,26 @@ within its registry.</P
CLASS="CHAPTER"
><HR><H1
><A
-NAME="AEN1627"
->Chapter 9. Unified Logons between Windows NT and UNIX using Winbind</A
+NAME="AEN1029"
+>Chapter 7. Unifed Logons between Windows NT and UNIX using Winbind</A
></H1
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
-NAME="AEN1645"
->9.1. Abstract</A
+NAME="AEN1047"
+>Abstract</A
></H1
><P
>Integration of UNIX and Microsoft Windows NT through
a unified logon has been considered a "holy grail" in heterogeneous
- computing environments for a long time. We present <EM
+ computing environments for a long time. We present <I
+CLASS="EMPHASIS"
>winbind
- </EM
+ </I
>, a component of the Samba suite of programs as a
- solution to the unified logon problem. Winbind uses a UNIX implementation
+ solution to the unied logon problem. Winbind uses a UNIX implementation
of Microsoft RPC calls, Pluggable Authentication Modules, and the Name
Service Switch to allow Windows NT domain users to appear and operate
as UNIX users on a UNIX machine. This paper describes the winbind
@@ -7829,8 +4527,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1649"
->9.2. Introduction</A
+NAME="AEN1051"
+>Introduction</A
></H1
><P
>It is well known that UNIX and Microsoft Windows NT have
@@ -7848,7 +4546,7 @@ NAME="AEN1649"
can lead to synchronization problems between the UNIX and Windows
systems and confusion for users.</P
><P
->We divide the unified logon problem for UNIX machines into
+>We divide the unifed logon problem for UNIX machines into
three smaller problems:</P
><P
></P
@@ -7875,7 +4573,7 @@ NAME="AEN1649"
information on the UNIX machines and without creating additional
tasks for the system administrator when maintaining users and
groups on either system. The winbind system provides a simple
- and elegant solution to all three components of the unified logon
+ and elegant solution to all three components of the unifed logon
problem.</P
></DIV
><DIV
@@ -7883,8 +4581,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1662"
->9.3. What Winbind Provides</A
+NAME="AEN1064"
+>What Winbind Provides</A
></H1
><P
>Winbind unifies UNIX and Windows NT account management by
@@ -7925,8 +4623,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN1669"
->9.3.1. Target Uses</A
+NAME="AEN1071"
+>Target Uses</A
></H2
><P
>Winbind is targeted at organizations that have an
@@ -7949,8 +4647,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1673"
->9.4. How Winbind Works</A
+NAME="AEN1075"
+>How Winbind Works</A
></H1
><P
>The winbind system is designed around a client/server
@@ -7969,8 +4667,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN1678"
->9.4.1. Microsoft Remote Procedure Calls</A
+NAME="AEN1080"
+>Microsoft Remote Procedure Calls</A
></H2
><P
>Over the last two years, efforts have been underway
@@ -7995,14 +4693,14 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN1682"
->9.4.2. Name Service Switch</A
+NAME="AEN1084"
+>Name Service Switch</A
></H2
><P
>The Name Service Switch, or NSS, is a feature that is
present in many UNIX operating systems. It allows system
information such as hostnames, mail aliases and user information
- to be resolved from different sources. For example, a standalone
+ to be resolved from dierent sources. For example, a standalone
UNIX workstation may resolve system information from a series of
flat files stored on the local lesystem. A networked workstation
may first attempt to resolve system information from local files,
@@ -8031,7 +4729,7 @@ CLASS="FILENAME"
for a line which matches the service type being requested, for
example the "passwd" service type is used when user or group names
are looked up. This config line species which implementations
- of that service should be tried and in what order. If the passwd
+ of that service should be tried andin what order. If the passwd
config line is:</P
><P
><B
@@ -8074,14 +4772,14 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN1698"
->9.4.3. Pluggable Authentication Modules</A
+NAME="AEN1100"
+>Pluggable Authentication Modules</A
></H2
><P
>Pluggable Authentication Modules, also known as PAM,
is a system for abstracting authentication and authorization
technologies. With a PAM module it is possible to specify different
- authentication methods for different system applications without
+ authentication methods for dierent system applications without
having to recompile these applications. PAM is also useful
for implementing a particular policy for authorization. For example,
a system administrator may only allow console logins from users
@@ -8096,7 +4794,7 @@ NAME="AEN1698"
this change take eect directly on the Primary Domain Controller.
</P
><P
->PAM is configured by providing control files in the directory
+>PAM is congured by providing control files in the directory
<TT
CLASS="FILENAME"
>/etc/pam.d/</TT
@@ -8123,16 +4821,16 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN1706"
->9.4.4. User and Group ID Allocation</A
+NAME="AEN1108"
+>User and Group ID Allocation</A
></H2
><P
>When a user or group is created under Windows NT
- is it allocated a numerical relative identifier (RID). This is
- slightly different to UNIX which has a range of numbers which are
+ is it allocated a numerical relative identier (RID). This is
+ slightly dierent to UNIX which has a range of numbers which are
used to identify users, and the same range in which to identify
groups. It is winbind's job to convert RIDs to UNIX id numbers and
- vice versa. When winbind is configured it is given part of the UNIX
+ vice versa. When winbind is congured it is given part of the UNIX
user id space and a part of the UNIX group id space in which to
store Windows NT users and groups. If a Windows NT user is
resolved for the first time, it is allocated the next UNIX id from
@@ -8149,8 +4847,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN1710"
->9.4.5. Result Caching</A
+NAME="AEN1112"
+>Result Caching</A
></H2
><P
>An active system can generate a lot of user and group
@@ -8159,7 +4857,7 @@ NAME="AEN1710"
by NT domain controllers. User or group information returned
by a PDC is cached by winbind along with a sequence number also
returned by the PDC. This sequence number is incremented by
- Windows NT whenever any user or group information is modified. If
+ Windows NT whenever any user or group information is modied. If
a cached entry has expired, the sequence number is requested from
the PDC and compared against the sequence number of the cached entry.
If the sequence numbers do not match, then the cached information
@@ -8172,8 +4870,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1713"
->9.5. Installation and Configuration</A
+NAME="AEN1115"
+>Installation and Configuration</A
></H1
><P
>The easiest way to install winbind is by using the packages
@@ -8193,7 +4891,7 @@ CLASS="FILENAME"
CLASS="COMMAND"
>winbindd(8)</B
> man page which will provide you
- with configuration information and give you sample configuration files.
+ with conguration information and give you sample conguration files.
You may also wish to update the main Samba daemons smbd and nmbd)
with a more recent development release, such as the recently
announced Samba 2.2 alpha release.</P
@@ -8203,8 +4901,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1719"
->9.6. Limitations</A
+NAME="AEN1121"
+>Limitations</A
></H1
><P
>Winbind has a number of limitations in its current
@@ -8251,8 +4949,8 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN1731"
->9.7. Conclusion</A
+NAME="AEN1133"
+>Conclusion</A
></H1
><P
>The winbind system, through the use of the Name Service
@@ -8267,24 +4965,786 @@ NAME="AEN1731"
CLASS="CHAPTER"
><HR><H1
><A
-NAME="AEN1734"
->Chapter 10. OS2 Client HOWTO</A
+NAME="AEN1136"
+>Chapter 8. UNIX Permission Bits and WIndows NT Access Control Lists</A
+></H1
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="AEN1147"
+>Viewing and changing UNIX permissions using the NT
+ security dialogs</A
+></H1
+><P
+>New in the Samba 2.0.4 release is the ability for Windows
+ NT clients to use their native security settings dialog box to
+ view and modify the underlying UNIX permissions.</P
+><P
+>Note that this ability is careful not to compromise
+ the security of the UNIX host Samba is running on, and
+ still obeys all the file permission rules that a Samba
+ administrator can set.</P
+><P
+>In Samba 2.0.4 and above the default value of the
+ parameter <A
+HREF="smb.conf.5.html#NTACLSUPPOR"
+TARGET="_top"
+><TT
+CLASS="PARAMETER"
+><I
+> nt acl support</I
+></TT
+></A
+> has been changed from
+ <TT
+CLASS="CONSTANT"
+>false</TT
+> to <TT
+CLASS="CONSTANT"
+>true</TT
+>, so
+ manipulation of permissions is turned on by default.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="AEN1156"
+>How to view file security on a Samba share</A
+></H1
+><P
+>From an NT 4.0 client, single-click with the right
+ mouse button on any file or directory in a Samba mounted
+ drive letter or UNC path. When the menu pops-up, click
+ on the <I
+CLASS="EMPHASIS"
+>Properties</I
+> entry at the bottom of
+ the menu. This brings up the normal file properties dialog
+ box, but with Samba 2.0.4 this will have a new tab along the top
+ marked <I
+CLASS="EMPHASIS"
+>Security</I
+>. Click on this tab and you
+ will see three buttons, <I
+CLASS="EMPHASIS"
+>Permissions</I
+>,
+ <I
+CLASS="EMPHASIS"
+>Auditing</I
+>, and <I
+CLASS="EMPHASIS"
+>Ownership</I
+>.
+ The <I
+CLASS="EMPHASIS"
+>Auditing</I
+> button will cause either
+ an error message <SPAN
+CLASS="ERRORNAME"
+>A requested privilege is not held
+ by the client</SPAN
+> to appear if the user is not the
+ NT Administrator, or a dialog which is intended to allow an
+ Administrator to add auditing requirements to a file if the
+ user is logged on as the NT Administrator. This dialog is
+ non-functional with a Samba share at this time, as the only
+ useful button, the <B
+CLASS="COMMAND"
+>Add</B
+> button will not currently
+ allow a list of users to be seen.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="AEN1167"
+>Viewing file ownership</A
+></H1
+><P
+>Clicking on the <B
+CLASS="COMMAND"
+>"Ownership"</B
+> button
+ brings up a dialog box telling you who owns the given file. The
+ owner name will be of the form :</P
+><P
+><B
+CLASS="COMMAND"
+>"SERVER\user (Long name)"</B
+></P
+><P
+>Where <TT
+CLASS="REPLACEABLE"
+><I
+>SERVER</I
+></TT
+> is the NetBIOS name of
+ the Samba server, <TT
+CLASS="REPLACEABLE"
+><I
+>user</I
+></TT
+> is the user name of
+ the UNIX user who owns the file, and <TT
+CLASS="REPLACEABLE"
+><I
+>(Long name)</I
+></TT
+>
+ is the discriptive string identifying the user (normally found in the
+ GECOS field of the UNIX password database). Click on the <B
+CLASS="COMMAND"
+>Close
+ </B
+> button to remove this dialog.</P
+><P
+>If the parameter <TT
+CLASS="PARAMETER"
+><I
+>nt acl support</I
+></TT
+>
+ is set to <TT
+CLASS="CONSTANT"
+>false</TT
+> then the file owner will
+ be shown as the NT user <B
+CLASS="COMMAND"
+>"Everyone"</B
+>.</P
+><P
+>The <B
+CLASS="COMMAND"
+>Take Ownership</B
+> button will not allow
+ you to change the ownership of this file to yourself (clicking on
+ it will display a dialog box complaining that the user you are
+ currently logged onto the NT client cannot be found). The reason
+ for this is that changing the ownership of a file is a privilaged
+ operation in UNIX, available only to the <I
+CLASS="EMPHASIS"
+>root</I
+>
+ user. As clicking on this button causes NT to attempt to change
+ the ownership of a file to the current user logged into the NT
+ client this will not work with Samba at this time.</P
+><P
+>There is an NT chown command that will work with Samba
+ and allow a user with Administrator privillage connected
+ to a Samba 2.0.4 server as root to change the ownership of
+ files on both a local NTFS filesystem or remote mounted NTFS
+ or Samba drive. This is available as part of the <I
+CLASS="EMPHASIS"
+>Seclib
+ </I
+> NT security library written by Jeremy Allison of
+ the Samba Team, available from the main Samba ftp site.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="AEN1187"
+>Viewing file or directory permissions</A
+></H1
+><P
+>The third button is the <B
+CLASS="COMMAND"
+>"Permissions"</B
+>
+ button. Clicking on this brings up a dialog box that shows both
+ the permissions and the UNIX owner of the file or directory.
+ The owner is displayed in the form :</P
+><P
+><B
+CLASS="COMMAND"
+>"SERVER\user (Long name)"</B
+></P
+><P
+>Where <TT
+CLASS="REPLACEABLE"
+><I
+>SERVER</I
+></TT
+> is the NetBIOS name of
+ the Samba server, <TT
+CLASS="REPLACEABLE"
+><I
+>user</I
+></TT
+> is the user name of
+ the UNIX user who owns the file, and <TT
+CLASS="REPLACEABLE"
+><I
+>(Long name)</I
+></TT
+>
+ is the discriptive string identifying the user (normally found in the
+ GECOS field of the UNIX password database).</P
+><P
+>If the parameter <TT
+CLASS="PARAMETER"
+><I
+>nt acl support</I
+></TT
+>
+ is set to <TT
+CLASS="CONSTANT"
+>false</TT
+> then the file owner will
+ be shown as the NT user <B
+CLASS="COMMAND"
+>"Everyone"</B
+> and the
+ permissions will be shown as NT "Full Control".</P
+><P
+>The permissions field is displayed differently for files
+ and directories, so I'll describe the way file permissions
+ are displayed first.</P
+><DIV
+CLASS="SECT2"
+><HR><H2
+CLASS="SECT2"
+><A
+NAME="AEN1202"
+>File Permissions</A
+></H2
+><P
+>The standard UNIX user/group/world triple and
+ the correspinding "read", "write", "execute" permissions
+ triples are mapped by Samba into a three element NT ACL
+ with the 'r', 'w', and 'x' bits mapped into the corresponding
+ NT permissions. The UNIX world permissions are mapped into
+ the global NT group <B
+CLASS="COMMAND"
+>Everyone</B
+>, followed
+ by the list of permissions allowed for UNIX world. The UNIX
+ owner and group permissions are displayed as an NT
+ <B
+CLASS="COMMAND"
+>user</B
+> icon and an NT <B
+CLASS="COMMAND"
+>local
+ group</B
+> icon respectively followed by the list
+ of permissions allowed for the UNIX user and group.</P
+><P
+>As many UNIX permission sets don't map into common
+ NT names such as <B
+CLASS="COMMAND"
+>"read"</B
+>, <B
+CLASS="COMMAND"
+> "change"</B
+> or <B
+CLASS="COMMAND"
+>"full control"</B
+> then
+ usually the permissions will be prefixed by the words <B
+CLASS="COMMAND"
+> "Special Access"</B
+> in the NT display list.</P
+><P
+>But what happens if the file has no permissions allowed
+ for a particular UNIX user group or world component ? In order
+ to allow "no permissions" to be seen and modified then Samba
+ overloads the NT <B
+CLASS="COMMAND"
+>"Take Ownership"</B
+> ACL attribute
+ (which has no meaning in UNIX) and reports a component with
+ no permissions as having the NT <B
+CLASS="COMMAND"
+>"O"</B
+> bit set.
+ This was chosen of course to make it look like a zero, meaning
+ zero permissions. More details on the decision behind this will
+ be given below.</P
+></DIV
+><DIV
+CLASS="SECT2"
+><HR><H2
+CLASS="SECT2"
+><A
+NAME="AEN1216"
+>Directory Permissions</A
+></H2
+><P
+>Directories on an NT NTFS file system have two
+ different sets of permissions. The first set of permissions
+ is the ACL set on the directory itself, this is usually displayed
+ in the first set of parentheses in the normal <B
+CLASS="COMMAND"
+>"RW"</B
+>
+ NT style. This first set of permissions is created by Samba in
+ exactly the same way as normal file permissions are, described
+ above, and is displayed in the same way.</P
+><P
+>The second set of directory permissions has no real meaning
+ in the UNIX permissions world and represents the <B
+CLASS="COMMAND"
+> "inherited"</B
+> permissions that any file created within
+ this directory would inherit.</P
+><P
+>Samba synthesises these inherited permissions for NT by
+ returning as an NT ACL the UNIX permission mode that a new file
+ created by Samba on this share would receive.</P
+></DIV
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="AEN1223"
+>Modifying file or directory permissions</A
+></H1
+><P
+>Modifying file and directory permissions is as simple
+ as changing the displayed permissions in the dialog box, and
+ clicking the <B
+CLASS="COMMAND"
+>OK</B
+> button. However, there are
+ limitations that a user needs to be aware of, and also interactions
+ with the standard Samba permission masks and mapping of DOS
+ attributes that need to also be taken into account.</P
+><P
+>If the parameter <TT
+CLASS="PARAMETER"
+><I
+>nt acl support</I
+></TT
+>
+ is set to <TT
+CLASS="CONSTANT"
+>false</TT
+> then any attempt to set
+ security permissions will fail with an <B
+CLASS="COMMAND"
+>"Access Denied"
+ </B
+> message.</P
+><P
+>The first thing to note is that the <B
+CLASS="COMMAND"
+>"Add"</B
+>
+ button will not return a list of users in Samba 2.0.4 (it will give
+ an error message of <B
+CLASS="COMMAND"
+>"The remote proceedure call failed
+ and did not execute"</B
+>). This means that you can only
+ manipulate the current user/group/world permissions listed in
+ the dialog box. This actually works quite well as these are the
+ only permissions that UNIX actually has.</P
+><P
+>If a permission triple (either user, group, or world)
+ is removed from the list of permissions in the NT dialog box,
+ then when the <B
+CLASS="COMMAND"
+>"OK"</B
+> button is pressed it will
+ be applied as "no permissions" on the UNIX side. If you then
+ view the permissions again the "no permissions" entry will appear
+ as the NT <B
+CLASS="COMMAND"
+>"O"</B
+> flag, as described above. This
+ allows you to add permissions back to a file or directory once
+ you have removed them from a triple component.</P
+><P
+>As UNIX supports only the "r", "w" and "x" bits of
+ an NT ACL then if other NT security attributes such as "Delete
+ access" are selected then they will be ignored when applied on
+ the Samba server.</P
+><P
+>When setting permissions on a directory the second
+ set of permissions (in the second set of parentheses) is
+ by default applied to all files within that directory. If this
+ is not what you want you must uncheck the <B
+CLASS="COMMAND"
+>"Replace
+ permissions on existing files"</B
+> checkbox in the NT
+ dialog before clicking <B
+CLASS="COMMAND"
+>"OK"</B
+>.</P
+><P
+>If you wish to remove all permissions from a
+ user/group/world component then you may either highlight the
+ component and click the <B
+CLASS="COMMAND"
+>"Remove"</B
+> button,
+ or set the component to only have the special <B
+CLASS="COMMAND"
+>"Take
+ Ownership"</B
+> permission (dsplayed as <B
+CLASS="COMMAND"
+>"O"
+ </B
+>) highlighted.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="AEN1245"
+>Interaction with the standard Samba create mask
+ parameters</A
+></H1
+><P
+>Note that with Samba 2.0.5 there are four new parameters
+ to control this interaction. These are :</P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>security mask</I
+></TT
+></P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>force security mode</I
+></TT
+></P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>directory security mask</I
+></TT
+></P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>force directory security mode</I
+></TT
+></P
+><P
+>Once a user clicks <B
+CLASS="COMMAND"
+>"OK"</B
+> to apply the
+ permissions Samba maps the given permissions into a user/group/world
+ r/w/x triple set, and then will check the changed permissions for a
+ file against the bits set in the <A
+HREF="smb.conf.5.html#SECURITYMASK"
+TARGET="_top"
+>
+ <TT
+CLASS="PARAMETER"
+><I
+>security mask</I
+></TT
+></A
+> parameter. Any bits that
+ were changed that are not set to '1' in this parameter are left alone
+ in the file permissions.</P
+><P
+>Essentially, zero bits in the <TT
+CLASS="PARAMETER"
+><I
+>security mask</I
+></TT
+>
+ mask may be treated as a set of bits the user is <I
+CLASS="EMPHASIS"
+>not</I
+>
+ allowed to change, and one bits are those the user is allowed to change.
+ </P
+><P
+>If not set explicitly this parameter is set to the same value as
+ the <A
+HREF="smb.conf.5.html#CREATEMASK"
+TARGET="_top"
+><TT
+CLASS="PARAMETER"
+><I
+>create mask
+ </I
+></TT
+></A
+> parameter to provide compatibility with Samba 2.0.4
+ where this permission change facility was introduced. To allow a user to
+ modify all the user/group/world permissions on a file, set this parameter
+ to 0777.</P
+><P
+>Next Samba checks the changed permissions for a file against
+ the bits set in the <A
+HREF="smb.conf.5.html#FORCESECURITYMODE"
+TARGET="_top"
+> <TT
+CLASS="PARAMETER"
+><I
+>force security mode</I
+></TT
+></A
+> parameter. Any bits
+ that were changed that correspond to bits set to '1' in this parameter
+ are forced to be set.</P
+><P
+>Essentially, bits set in the <TT
+CLASS="PARAMETER"
+><I
+>force security mode
+ </I
+></TT
+> parameter may be treated as a set of bits that, when
+ modifying security on a file, the user has always set to be 'on'.</P
+><P
+>If not set explicitly this parameter is set to the same value
+ as the <A
+HREF="smb.conf.5.html#FORCECREATEMODE"
+TARGET="_top"
+><TT
+CLASS="PARAMETER"
+><I
+>force
+ create mode</I
+></TT
+></A
+> parameter to provide compatibility
+ with Samba 2.0.4 where the permission change facility was introduced.
+ To allow a user to modify all the user/group/world permissions on a file,
+ with no restrictions set this parameter to 000.</P
+><P
+>The <TT
+CLASS="PARAMETER"
+><I
+>security mask</I
+></TT
+> and <TT
+CLASS="PARAMETER"
+><I
+>force
+ security mode</I
+></TT
+> parameters are applied to the change
+ request in that order.</P
+><P
+>For a directory Samba will perform the same operations as
+ described above for a file except using the parameter <TT
+CLASS="PARAMETER"
+><I
+> directory security mask</I
+></TT
+> instead of <TT
+CLASS="PARAMETER"
+><I
+>security
+ mask</I
+></TT
+>, and <TT
+CLASS="PARAMETER"
+><I
+>force directory security mode
+ </I
+></TT
+> parameter instead of <TT
+CLASS="PARAMETER"
+><I
+>force security mode
+ </I
+></TT
+>.</P
+><P
+>The <TT
+CLASS="PARAMETER"
+><I
+>directory security mask</I
+></TT
+> parameter
+ by default is set to the same value as the <TT
+CLASS="PARAMETER"
+><I
+>directory mask
+ </I
+></TT
+> parameter and the <TT
+CLASS="PARAMETER"
+><I
+>force directory security
+ mode</I
+></TT
+> parameter by default is set to the same value as
+ the <TT
+CLASS="PARAMETER"
+><I
+>force directory mode</I
+></TT
+> parameter to provide
+ compatibility with Samba 2.0.4 where the permission change facility
+ was introduced.</P
+><P
+>In this way Samba enforces the permission restrictions that
+ an administrator can set on a Samba share, whilst still allowing users
+ to modify the permission bits within that restriction.</P
+><P
+>If you want to set up a share that allows users full control
+ in modifying the permission bits on their files and directories and
+ doesn't force any particular bits to be set 'on', then set the following
+ parameters in the <A
+HREF="smb.conf.5.html"
+TARGET="_top"
+><TT
+CLASS="FILENAME"
+>smb.conf(5)
+ </TT
+></A
+> file in that share specific section :</P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>security mask = 0777</I
+></TT
+></P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>force security mode = 0</I
+></TT
+></P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>directory security mask = 0777</I
+></TT
+></P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>force directory security mode = 0</I
+></TT
+></P
+><P
+>As described, in Samba 2.0.4 the parameters :</P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>create mask</I
+></TT
+></P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>force create mode</I
+></TT
+></P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>directory mask</I
+></TT
+></P
+><P
+><TT
+CLASS="PARAMETER"
+><I
+>force directory mode</I
+></TT
+></P
+><P
+>were used instead of the parameters discussed here.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="AEN1309"
+>Interaction with the standard Samba file attribute
+ mapping</A
+></H1
+><P
+>Samba maps some of the DOS attribute bits (such as "read
+ only") into the UNIX permissions of a file. This means there can
+ be a conflict between the permission bits set via the security
+ dialog and the permission bits set by the file attribute mapping.
+ </P
+><P
+>One way this can show up is if a file has no UNIX read access
+ for the owner it will show up as "read only" in the standard
+ file attributes tabbed dialog. Unfortunately this dialog is
+ the same one that contains the security info in another tab.</P
+><P
+>What this can mean is that if the owner changes the permissions
+ to allow themselves read access using the security dialog, clicks
+ <B
+CLASS="COMMAND"
+>"OK"</B
+> to get back to the standard attributes tab
+ dialog, and then clicks <B
+CLASS="COMMAND"
+>"OK"</B
+> on that dialog, then
+ NT will set the file permissions back to read-only (as that is what
+ the attributes still say in the dialog). This means that after setting
+ permissions and clicking <B
+CLASS="COMMAND"
+>"OK"</B
+> to get back to the
+ attributes dialog you should always hit <B
+CLASS="COMMAND"
+>"Cancel"</B
+>
+ rather than <B
+CLASS="COMMAND"
+>"OK"</B
+> to ensure that your changes
+ are not overridden.</P
+></DIV
+></DIV
+><DIV
+CLASS="CHAPTER"
+><HR><H1
+><A
+NAME="AEN1319"
+>Chapter 9. OS2 Client HOWTO</A
></H1
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
-NAME="AEN1745"
->10.1. FAQs</A
+NAME="AEN1330"
+>FAQs</A
></H1
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
-NAME="AEN1747"
->10.1.1. How can I configure OS/2 Warp Connect or
+NAME="AEN1332"
+>How can I configure OS/2 Warp Connect or
OS/2 Warp 4 as a client for Samba?</A
></H2
><P
@@ -8342,8 +5802,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN1762"
->10.1.2. How can I configure OS/2 Warp 3 (not Connect),
+NAME="AEN1347"
+>How can I configure OS/2 Warp 3 (not Connect),
OS/2 1.2, 1.3 or 2.x for Samba?</A
></H2
><P
@@ -8363,21 +5823,12 @@ TARGET="_top"
a nutshell, edit the file \OS2VER in the root directory of
the OS/2 boot partition and add the lines:</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
> 20=setup.exe
20=netwksta.sys
20=netvdd.sys
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>before you install the client. Also, don't use the
@@ -8395,8 +5846,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN1771"
->10.1.3. Are there any other issues when OS/2 (any version)
+NAME="AEN1356"
+>Are there any other issues when OS/2 (any version)
is used as a client?</A
></H2
><P
@@ -8417,8 +5868,8 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN1775"
->10.1.4. How do I get printer driver download working
+NAME="AEN1360"
+>How do I get printer driver download working
for OS/2 clients?</A
></H2
><P
@@ -8429,7 +5880,7 @@ NAME="AEN1775"
driver from an OS/2 system.</P
><P
>Install the NT driver first for that printer. Then,
- add to your smb.conf a parameter, "os2 driver map =
+ add to your smb.conf a paramater, "os2 driver map =
<TT
CLASS="REPLACEABLE"
><I
@@ -8445,8 +5896,8 @@ CLASS="REPLACEABLE"
name of the NT driver name to the OS/2 driver name as
follows:</P
><P
->&#60;nt driver name&#62; = &#60;os2 driver
- name&#62;.&#60;device name&#62;, e.g.:
+>&lt;nt driver name&gt; = &lt;os2 driver
+ name&gt;.&lt;device name&gt;, e.g.:
HP LaserJet 5L = LASERJET.HP LaserJet 5L</P
><P
>You can have multiple drivers mapped in this file.</P
@@ -8461,178 +5912,6 @@ CLASS="REPLACEABLE"
></DIV
></DIV
></DIV
-><DIV
-CLASS="CHAPTER"
-><HR><H1
-><A
-NAME="AEN1784"
->Chapter 11. HOWTO Access Samba source code via CVS</A
-></H1
-><DIV
-CLASS="SECT1"
-><H1
-CLASS="SECT1"
-><A
-NAME="AEN1791"
->11.1. Introduction</A
-></H1
-><P
->Samba is developed in an open environment. Developers use CVS
-(Concurrent Versioning System) to "checkin" (also known as
-"commit") new source code. Samba's various CVS branches can
-be accessed via anonymous CVS using the instructions
-detailed in this chapter.</P
-><P
->This document is a modified version of the instructions found at
-<A
-HREF="http://samba.org/samba/cvs.html"
-TARGET="_top"
->http://samba.org/samba/cvs.html</A
-></P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN1796"
->11.2. CVS Access to samba.org</A
-></H1
-><P
->The machine samba.org runs a publicly accessible CVS
-repository for access to the source code of several packages,
-including samba, rsync and jitterbug. There are two main ways of
-accessing the CVS server on this host.</P
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN1799"
->11.2.1. Access via CVSweb</A
-></H2
-><P
->You can access the source code via your
-favourite WWW browser. This allows you to access the contents of
-individual files in the repository and also to look at the revision
-history and commit logs of individual files. You can also ask for a diff
-listing between any two versions on the repository.</P
-><P
->Use the URL : <A
-HREF="http://samba.org/cgi-bin/cvsweb"
-TARGET="_top"
->http://samba.org/cgi-bin/cvsweb</A
-></P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN1804"
->11.2.2. Access via cvs</A
-></H2
-><P
->You can also access the source code via a
-normal cvs client. This gives you much more control over you can
-do with the repository and allows you to checkout whole source trees
-and keep them up to date via normal cvs commands. This is the
-preferred method of access if you are a developer and not
-just a casual browser.</P
-><P
->To download the latest cvs source code, point your
-browser at the URL : <A
-HREF="http://www.cyclic.com/"
-TARGET="_top"
->http://www.cyclic.com/</A
->.
-and click on the 'How to get cvs' link. CVS is free software under
-the GNU GPL (as is Samba). Note that there are several graphical CVS clients
-which provide a graphical interface to the sometimes mundane CVS commands.
-Links to theses clients are also available from http://www.cyclic.com.</P
-><P
->To gain access via anonymous cvs use the following steps.
-For this example it is assumed that you want a copy of the
-samba source code. For the other source code repositories
-on this system just substitute the correct package name</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
-> Install a recent copy of cvs. All you really need is a
- copy of the cvs client binary.
- </P
-></LI
-><LI
-><P
-> Run the command
- </P
-><P
-> <B
-CLASS="COMMAND"
->cvs -d :pserver:cvs@samba.org:/cvsroot login</B
->
- </P
-><P
-> When it asks you for a password type <TT
-CLASS="USERINPUT"
-><B
->cvs</B
-></TT
->.
- </P
-></LI
-><LI
-><P
-> Run the command
- </P
-><P
-> <B
-CLASS="COMMAND"
->cvs -d :pserver:cvs@samba.org:/cvsroot co samba</B
->
- </P
-><P
-> This will create a directory called samba containing the
- latest samba source code (i.e. the HEAD tagged cvs branch). This
- currently corresponds to the 3.0 development tree.
- </P
-><P
-> CVS branches other HEAD can be obtained by using the <TT
-CLASS="PARAMETER"
-><I
->-r</I
-></TT
->
- and defining a tag name. A list of branch tag names can be found on the
- "Development" page of the samba web site. A common request is to obtain the
- latest 2.2 release code. This could be done by using the following command.
- </P
-><P
-> <B
-CLASS="COMMAND"
->cvs -d :pserver:cvs@samba.org:/cvsroot co -r SAMBA_2_2 samba</B
->
- </P
-></LI
-><LI
-><P
-> Whenever you want to merge in the latest code changes use
- the following command from within the samba directory:
- </P
-><P
-> <B
-CLASS="COMMAND"
->cvs update -d -P</B
->
- </P
-></LI
-></OL
-></DIV
-></DIV
-></DIV
></DIV
></BODY
></HTML
diff --git a/docs/htmldocs/Samba-PDC-HOWTO.html b/docs/htmldocs/Samba-PDC-HOWTO.html
index 1c67649f4ca..668f7f9aff3 100644
--- a/docs/htmldocs/Samba-PDC-HOWTO.html
+++ b/docs/htmldocs/Samba-PDC-HOWTO.html
@@ -1,7 +1,7 @@
<HTML
><HEAD
><TITLE
->How to Configure Samba 2.2 as a Primary Domain Controller</TITLE
+>How to Configure Samba 2.2.x as a Primary Domain Controller</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.57"></HEAD
@@ -20,7 +20,7 @@ CLASS="TITLEPAGE"
CLASS="TITLE"
><A
NAME="AEN1"
->How to Configure Samba 2.2 as a Primary Domain Controller</A
+>How to Configure Samba 2.2.x as a Primary Domain Controller</A
></H1
><HR></DIV
><DIV
@@ -29,127 +29,44 @@ CLASS="SECT1"
CLASS="SECT1"
><A
NAME="AEN3"
->Prerequisite Reading</A
-></H1
-><P
->Before you continue reading in this chapter, please make sure
-that you are comfortable with configuring basic files services
-in smb.conf and how to enable and administer password
-encryption in Samba. Theses two topics are covered in the
-<A
-HREF="smb.conf.5.html"
-TARGET="_top"
-><TT
-CLASS="FILENAME"
->smb.conf(5)</TT
-></A
->
-manpage and the <A
-HREF="ENCRYPTION.html"
-TARGET="_top"
->Encryption chapter</A
->
-of this HOWTO Collection.</P
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN9"
>Background</A
></H1
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
><P
-><B
->Note: </B
><I
CLASS="EMPHASIS"
>Author's Note :</I
-> This document is a combination
-of David Bannon's Samba 2.2 PDC HOWTO and the Samba NT Domain FAQ.
-Both documents are superseded by this one.</P
-></BLOCKQUOTE
-></DIV
+> This document
+is a combination of David Bannon's Samba 2.2 PDC HOWTO
+and the Samba NT Domain FAQ. Both documents are superceeded by this one.</P
><P
>Version of Samba prior to release 2.2 had marginal capabilities to
-act as a Windows NT 4.0 Primary Domain Controller (PDC). Beginning with
-Samba 2.2.0, we are proud to announce official support for Windows NT 4.0
-style domain logons from Windows NT 4.0 (through SP6) and Windows 2000 (through
-SP1) clients. This article outlines the steps necessary for configuring Samba
-as a PDC. It is necessary to have a working Samba server prior to implementing the
-PDC functionality. If you have not followed the steps outlined in
-<A
-HREF="UNIX_INSTALL.html"
-TARGET="_top"
-> UNIX_INSTALL.html</A
->, please make sure
-that your server is configured correctly before proceeding. Another good
-resource in the <A
-HREF="smb.conf.5.html"
-TARGET="_top"
->smb.conf(5) man
-page</A
->. The following functionality should work in 2.2:</P
+act as a Windows NT 4.0 Primary Domain Controller (PDC). The following
+functionality should work in 2.2.0:</P
><P
></P
><UL
><LI
><P
-> domain logons for Windows NT 4.0/2000 clients.
- </P
+>domain logons for Windows NT 4.0/2000 clients</P
></LI
><LI
><P
-> placing a Windows 9x client in user level security
- </P
+>placing a Windows 9x client in user level security</P
></LI
><LI
><P
-> retrieving a list of users and groups from a Samba PDC to
- Windows 9x/NT/2000 clients
- </P
+>retrieving a list of users and groups from a Samba PDC to
+ Windows 9x/NT/2000 clients </P
></LI
><LI
><P
-> roving (roaming) user profiles
- </P
+>roving user profiles</P
></LI
><LI
><P
-> Windows NT 4.0 style system policies
- </P
+>Windows NT 4.0 style system policies</P
></LI
></UL
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Windows 2000 Service Pack 2 Clients</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
-> Samba 2.2.1 is required for PDC functionality when using Windows 2000
- SP2 clients.
- </P
-></TD
-></TR
-></TABLE
-></DIV
><P
>The following pieces of functionality are not included in the 2.2 release:</P
><P
@@ -157,25 +74,21 @@ ALIGN="LEFT"
><UL
><LI
><P
-> Windows NT 4 domain trusts
- </P
+>Windows NT 4 domain trusts</P
></LI
><LI
><P
-> SAM replication with Windows NT 4.0 Domain Controllers
- (i.e. a Samba PDC and a Windows NT BDC or vice versa)
- </P
+>Sam replication with Windows NT 4.0 Domain Controllers
+ (i.e. a Samba PDC and a Windows NT BDC or vice versa) </P
></LI
><LI
><P
-> Adding users via the User Manager for Domains
- </P
+>Adding users via the User Manager for Domains</P
></LI
><LI
><P
-> Acting as a Windows 2000 Domain Controller (i.e. Kerberos and
- Active Directory)
- </P
+>Acting as a Windows 2000 Domain Controller (i.e. Kerberos
+ and Active Directory)</P
></LI
></UL
><P
@@ -185,6 +98,25 @@ support Windows 9x style domain logons is completely different
from NT4 domain logons and has been officially supported for some
time.</P
><P
+>Beginning with Samba 2.2.0, we are proud to announce official
+support for Windows NT 4.0 style domain logons from Windows NT
+4.0 and Windows 2000 (including SP1) clients. This article
+outlines the steps necessary for configuring Samba as a PDC.
+Note that it is necessary to have a working Samba server
+prior to implementing the PDC functionality. If you have not
+followed the steps outlined in <A
+HREF="UNIX_INSTALL.html"
+TARGET="_top"
+>UNIX_INSTALL.html</A
+>, please make sure that your server
+is configured correctly before proceeding. Another good
+resource in the <A
+HREF="smb.conf.5.html"
+TARGET="_top"
+>smb.conf(5) man
+page</A
+>.</P
+><P
>Implementing a Samba PDC can basically be divided into 2 broad
steps.</P
><P
@@ -193,14 +125,13 @@ steps.</P
TYPE="1"
><LI
><P
-> Configuring the Samba PDC
+>Configuring the Samba Domain Controller
</P
></LI
><LI
><P
-> Creating machine trust accounts and joining clients
- to the domain
- </P
+>Creating machine trust accounts
+ and joining clients to the domain</P
></LI
></OL
><P
@@ -214,7 +145,7 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN49"
+NAME="AEN40"
>Configuring the Samba Domain Controller</A
></H1
><P
@@ -320,7 +251,7 @@ TARGET="_top"
> = \\homeserver\%u
; specify a generic logon script for all users
- ; this is a relative **DOS** path to the [netlogon] share
+ ; this is a relative path to the [netlogon] share
<A
HREF="smb.conf.5.html#LOGONSCRIPT"
TARGET="_top"
@@ -374,14 +305,16 @@ TARGET="_top"
> = 0700</PRE
></P
><P
->There are a couple of points to emphasize in the above configuration.</P
+>There are a couple of points to emphasize in the above
+configuration.</P
><P
></P
><UL
><LI
><P
-> Encrypted passwords must be enabled. For more details on how
- to do this, refer to <A
+>encrypted passwords must be enabled.
+ For more details on how to do this, refer to
+ <A
HREF="ENCRYPTION.html"
TARGET="_top"
>ENCRYPTION.html</A
@@ -390,27 +323,23 @@ TARGET="_top"
></LI
><LI
><P
-> The server must support domain logons and a
- <TT
+>The server must support domain logons
+ and a <TT
CLASS="FILENAME"
>[netlogon]</TT
-> share
- </P
+> share</P
></LI
><LI
><P
-> The server must be the domain master browser in order for Windows
- client to locate the server as a DC. Please refer to the various
- Network Browsing documentation included with this distribution for
- details.
- </P
+>The server must be the domain master browser
+ in order for Windows client to locate the server as a DC.</P
></LI
></UL
><P
>As Samba 2.2 does not offer a complete implementation of group mapping between
Windows NT groups and UNIX groups (this is really quite complicated to explain
in a short space), you should refer to the <A
-HREF="smb.conf.5.html#DOMAINADMINUSERS"
+HREF="smb.conf.5.html#DOMAINADMONUSERS"
TARGET="_top"
>domain
admin users</A
@@ -427,38 +356,28 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN92"
+NAME="AEN83"
>Creating Machine Trust Accounts and Joining Clients
to the Domain</A
></H1
><P
->A machine trust account is a samba user account owned by a computer.
+>First you must understand what a machine trust account is and what
+it is used for.</P
+><P
+>A machine trust account is a user account owned by a computer.
The account password acts as the shared secret for secure
-communication with the Domain Controller. This is a security feature
-to prevent an unauthorized machine with the same NetBIOS name from
-joining the domain and gaining access to domain user/group accounts.
-Hence a Windows 9x host is never a true member of a domain because it does
-not posses a machine trust account, and thus has no shared secret with the DC.</P
+communication with the Domain Controller. Hence the reason that
+a Windows 9x host is never a true member of a domain because
+it does not posses a machine trust account and thus has no shared
+secret with the DC.</P
><P
>On a Windows NT PDC, these machine trust account passwords are stored
-in the registry. A Samba PDC stores these accounts in the same location
+in the registry. A Samba PDC stores these accounts in he same location
as user LanMan and NT password hashes (currently <TT
CLASS="FILENAME"
>smbpasswd</TT
>).
-However, machine trust accounts only possess and use the NT password hash.</P
-><P
->Because Samba requires machine accounts to possess a UNIX uid from
-which an Windows NT SID can be generated, all of these accounts
-must have an entry in <TT
-CLASS="FILENAME"
->/etc/passwd</TT
-> and smbpasswd.
-Future releases will alleviate the need to create
-<TT
-CLASS="FILENAME"
->/etc/passwd</TT
-> entries. </P
+However, machine trust accounts only possess the NT password hash.</P
><P
>There are two means of creating machine trust accounts.</P
><P
@@ -466,52 +385,30 @@ CLASS="FILENAME"
><UL
><LI
><P
-> Manual creation before joining the client to the domain. In this case,
- the password is set to a known value -- the lower case of the
- machine's NetBIOS name.
- </P
+>Manual creation before joining the client
+ to the domain. In this case, the password is set to a known
+ value -- the lower case of the machine's netbios name.</P
></LI
><LI
><P
-> Creation of the account at the time of joining the domain. In
- this case, the session key of the administrative account used to join
- the client to the domain acts as an encryption key for setting the
- password to a random value (This is the recommended method).
- </P
+>Creation of the account at the time of
+ joining the domain. In this case, the session key of the
+ administrative account used to join the client to the domain acts
+ as an encryption key for setting the password to a random value.</P
></LI
></UL
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN106"
->Manually creating machine trust accounts</A
-></H2
><P
->The first step in creating a machine trust account by hand is to
-create an entry for the machine in /etc/passwd. This can be done
-using <B
-CLASS="COMMAND"
->vipw</B
-> or any 'add userr' command which is normally
-used to create new UNIX accounts. The following is an example for a Linux
-based Samba server:</P
-><P
-><TT
-CLASS="PROMPT"
->root# </TT
->/usr/sbin/useradd -g 100 -d /dev/null -c <TT
-CLASS="REPLACEABLE"
-><I
->machine_nickname</I
-></TT
-> -m -s /bin/false <TT
-CLASS="REPLACEABLE"
-><I
->machine_name</I
-></TT
->$</P
+>Because Samba requires machine accounts to possess a UNIX uid from
+which an Windows NT SID can be generated, all of these accounts
+will have an entry in <TT
+CLASS="FILENAME"
+>/etc/passwd</TT
+> and smbpasswd.
+Future releases will alleviate the need to create
+<TT
+CLASS="FILENAME"
+>/etc/passwd</TT
+> entries.</P
><P
>The <TT
CLASS="FILENAME"
@@ -526,40 +423,20 @@ CLASS="FILENAME"
><P
><PRE
CLASS="PROGRAMLISTING"
->doppy$:x:505:501:<TT
-CLASS="REPLACEABLE"
-><I
->machine_nickname</I
-></TT
->:/dev/null:/bin/false</PRE
+>doppy$:x:505:501:NTMachine:/dev/null:/bin/false</PRE
></P
><P
->Above, <TT
-CLASS="REPLACEABLE"
-><I
->machine_nickname</I
-></TT
-> can be any descriptive name for the
-pc i.e. BasementComputer. The <TT
-CLASS="REPLACEABLE"
-><I
->machine_name</I
-></TT
-> absolutely must be
-the NetBIOS name of the pc to be added to the domain. The "$" must append the NetBIOS
-name of the pc or samba will not recognize this as a machine account</P
-><P
->Now that the UNIX account has been created, the next step is to create
-the smbpasswd entry for the machine containing the well known initial
-trust account password. This can be done using the <A
-HREF="smbpasswd.6.html"
-TARGET="_top"
-><B
-CLASS="COMMAND"
->smbpasswd(8)</B
-></A
-> command
-as shown here:</P
+>If you are manually creating the machine accounts, it is necessary
+to add the <TT
+CLASS="FILENAME"
+>/etc/passwd</TT
+> (or NIS passwd
+map) entry prior to adding the <TT
+CLASS="FILENAME"
+>smbpasswd</TT
+>
+entry. The following command will create a new machine account
+ready for use.</P
><P
><TT
CLASS="PROMPT"
@@ -576,284 +453,168 @@ CLASS="REPLACEABLE"
><I
>machine_name</I
></TT
-> is the machine's NetBIOS
-name. </P
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Join the client to the domain immediately</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
-> Manually creating a machine trust account using this method is the
- equivalent of creating a machine account on a Windows NT PDC using
- the "Server Manager". From the time at which the account is created
- to the time which th client joins the domain and changes the password,
- your domain is vulnerable to an intruder joining your domain using a
- a machine with the same NetBIOS name. A PDC inherently trusts
- members of the domain and will serve out a large degree of user
- information to such clients. You have been warned!
- </P
-></TD
-></TR
-></TABLE
-></DIV
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN134"
->Creating machine trust accounts "on the fly"</A
-></H2
+> is the machine's netbios
+name.</P
><P
->The second, and most recommended way of creating machine trust accounts
-is to create them as needed at the time the client is joined to
-the domain. You will need to include a value for the <A
+><I
+CLASS="EMPHASIS"
+>If you manually create a machine account, immediately join
+the client to the domain.</I
+> An open account like this
+can allow intruders to gain access to user account information
+in your domain.</P
+><P
+>The second way of creating machine trust accounts is to add
+them on the fly at the time the client is joined to the domain.
+You will need to include a value for the
+<A
HREF="smb.conf.5.html#ADDUSERSCRIPT"
TARGET="_top"
>add user script</A
>
-parameter. Below is an example from a RedHat 6.2 Linux system.</P
+parameter. Below is an example I use on a RedHat 6.2 Linux system.</P
><P
><PRE
CLASS="PROGRAMLISTING"
>add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u </PRE
></P
><P
->In Samba 2.2.1, <I
+>In Samba 2.2.0, <I
CLASS="EMPHASIS"
>only the root account</I
> can be used to create
-machine accounts like this. Therefore, it is required to create
-an entry in smbpasswd for <I
+machine accounts on the fly like this. Therefore, it is required
+to create an entry in smbpasswd for <I
CLASS="EMPHASIS"
>root</I
->. The password
-<I
+>.
+The password <I
CLASS="EMPHASIS"
>SHOULD</I
-> be set to s different password that the
-associated <TT
+> be set to s different
+password that the associated <TT
CLASS="FILENAME"
>/etc/passwd</TT
-> entry for security reasons.</P
-></DIV
+>
+entry for security reasons.</P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN145"
+NAME="AEN122"
>Common Problems and Errors</A
></H1
><P
></P
><P
-></P
-><UL
-><LI
-><P
-> <I
+><I
CLASS="EMPHASIS"
>I cannot include a '$' in a machine name.</I
->
- </P
+></P
><P
-> A 'machine name' in (typically) <TT
+>A 'machine name' in (typically) <TT
CLASS="FILENAME"
>/etc/passwd</TT
>
- of the machine name with a '$' appended. FreeBSD (and other BSD
- systems ?) won't create a user with a '$' in their name.
- </P
+of the machine name with a '$' appended. FreeBSD (and other BSD
+systems ?) won't create a user with a '$' in their name.</P
><P
-> The problem is only in the program used to make the entry, once
- made, it works perfectly. So create a user without the '$' and
- use <B
+>The problem is only in the program used to make the entry, once
+made, it works perfectly. So create a user without the '$' and
+use <B
CLASS="COMMAND"
>vipw</B
> to edit the entry, adding the '$'. Or create
- the whole entry with vipw if you like, make sure you use a
- unique uid !
- </P
-></LI
-><LI
+the whole entry with vipw if you like, make sure you use a
+unique uid !</P
><P
-> <I
+><I
CLASS="EMPHASIS"
>I get told "You already have a connection to the Domain...."
- or "Cannot join domain, the credentials supplied conflict with an
- existing set.." when creating a machine account.</I
->
- </P
+when creating a machine account.</I
+></P
><P
-> This happens if you try to create a machine account from the
- machine itself and already have a connection (e.g. mapped drive)
- to a share (or IPC$) on the Samba PDC. The following command
- will remove all network drive connections:
- </P
+>This happens if you try to create a machine account from the
+machine itself and use a user name that does not work (for whatever
+reason) and then try another (possibly valid) user name.
+Exit out of the network applet to close the initial connection
+and try again.</P
><P
-> <TT
-CLASS="PROMPT"
->C:\WINNT\&#62;</TT
-> <B
-CLASS="COMMAND"
->net use * /d</B
->
- </P
+>Further, if the machine is a already a 'member of a workgroup' that
+is the same name as the domain you are joining (bad idea) you will
+get this message. Change the workgroup name to something else, it
+does not matter what, reboot, and try again.</P
><P
-> Further, if the machine is a already a 'member of a workgroup' that
- is the same name as the domain you are joining (bad idea) you will
- get this message. Change the workgroup name to something else, it
- does not matter what, reboot, and try again.
- </P
-></LI
-><LI
+><I
+CLASS="EMPHASIS"
+>I get told "Cannot join domain, the credentials supplied
+conflict with an existing set.."</I
+></P
+><P
+>This is the same basic problem as mentioned above, "You already
+have a connection..."</P
><P
-> <I
+><I
CLASS="EMPHASIS"
->The system can not log you on (C000019B)....</I
->
- </P
+>"The system can not log you on (C000019B)...."</I
+></P
><P
>I joined the domain successfully but after upgrading
- to a newer version of the Samba code I get the message, "The system
- can not log you on (C000019B), Please try a gain or consult your
- system administrator" when attempting to logon.
- </P
+to a newer version of the Samba code I get the message, "The system
+can not log you on (C000019B), Please try a gain or consult your
+system administrator" when attempting to logon.</P
><P
-> This occurs when the domain SID stored in
- <TT
+>This occurs when the domain SID stored in
+<TT
CLASS="FILENAME"
>private/WORKGROUP.SID</TT
> is
- changed. For example, you remove the file and <B
+changed. For example, you remove the file and <B
CLASS="COMMAND"
>smbd</B
> automatically
- creates a new one. Or you are swapping back and forth between
- versions 2.0.7, TNG and the HEAD branch code (not recommended). The
- only way to correct the problem is to restore the original domain
- SID or remove the domain client from the domain and rejoin.
- </P
-></LI
-><LI
-><P
-> <I
-CLASS="EMPHASIS"
->The machine account for this computer either does not
- exist or is not accessible.</I
->
- </P
+creates a new one. Or you are swapping back and forth between
+versions 2.0.7, TNG and the HEAD branch code (not recommended). The
+only way to correct the problem is to restore the original domain
+SID or remove the domain client from the domain and rejoin.</P
><P
-> When I try to join the domain I get the message "The machine account
- for this computer either does not exist or is not accessible". Whats
- wrong?
- </P
-><P
-> This problem is caused by the PDC not having a suitable machine account.
- If you are using the <TT
-CLASS="PARAMETER"
><I
->add user script</I
-></TT
-> method to create
- accounts then this would indicate that it has not worked. Ensure the domain
- admin user system is working.
- </P
-><P
-> Alternatively if you are creating account entries manually then they
- have not been created correctly. Make sure that you have the entry
- correct for the machine account in smbpasswd file on the Samba PDC.
- If you added the account using an editor rather than using the smbpasswd
- utility, make sure that the account name is the machine NetBIOS name
- with a '$' appended to it ( i.e. computer_name$ ). There must be an entry
- in both /etc/passwd and the smbpasswd file. Some people have reported
- that inconsistent subnet masks between the Samba server and the NT
- client have caused this problem. Make sure that these are consistent
- for both client and server.
- </P
-></LI
-><LI
-><P
-> <I
CLASS="EMPHASIS"
->When I attempt to login to a Samba Domain from a NT4/W2K workstation,
- I get a message about my account being disabled.</I
->
- </P
+>"The machine account for this computer either does not
+exist or is not accessible."</I
+></P
><P
-> This problem is caused by a PAM related bug in Samba 2.2.0. This bug is
- fixed in 2.2.1. Other symptoms could be unaccessible shares on
- NT/W2K member servers in the domain or the following error in your smbd.log:
- passdb/pampass.c:pam_account(268) PAM: UNKNOWN ERROR for User: %user%
- </P
+>When I try to join the domain I get the message "The machine account
+for this computer either does not exist or is not accessible". Whats
+wrong ?</P
><P
-> At first be ensure to enable the useraccounts with <B
+>This problem is caused by the PDC not having a suitable machine account.
+If you are using the <B
CLASS="COMMAND"
->smbpasswd -e
- %user%</B
->, this is normally done, when you create an account.
- </P
-><P
-> In order to work around this problem in 2.2.0, configure the
- <TT
-CLASS="PARAMETER"
-><I
->account</I
-></TT
-> control flag in
- <TT
-CLASS="FILENAME"
->/etc/pam.d/samba</TT
-> file as follows:
- </P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
-> account required pam_permit.so
- </PRE
-></P
-><P
-> If you want to remain backward compatibility to samba 2.0.x use
- <TT
-CLASS="FILENAME"
->pam_permit.so</TT
->, it's also possible to use
- <TT
-CLASS="FILENAME"
->pam_pwdb.so</TT
->. There are some bugs if you try to
- use <TT
-CLASS="FILENAME"
->pam_unix.so</TT
->, if you need this, be ensure to use
- the most recent version of this file.
- </P
-></LI
-></UL
+>add user script =</B
+> method to create
+accounts then this would indicate that it has not worked. Ensure the domain
+admin user system is working.</P
+><P
+>Alternatively if you are creating account entries manually then they
+have not been created correctly. Make sure that you have the entry
+correct for the machine account in smbpasswd file on the Samba PDC.
+If you added the account using an editor rather than using the smbpasswd
+utility, make sure that the account name is the machine netbios name
+with a '$' appended to it ( ie. computer_name$ ). There must be an entry
+in both /etc/passwd and the smbpasswd file. Some people have reported
+that inconsistent subnet masks between the Samba server and the NT
+client have caused this problem. Make sure that these are consistent
+for both client and server.</P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN193"
+NAME="AEN150"
>System Policies and Profiles</A
></H1
><P
@@ -869,112 +630,97 @@ Profiles and Policies in Windows NT 4.0</A
><P
>Here are some additional details:</P
><P
-></P
-><UL
-><LI
-><P
-> <I
+><I
CLASS="EMPHASIS"
>What about Windows NT Policy Editor ?</I
->
- </P
+></P
><P
-> To create or edit <TT
+>To create or edit <TT
CLASS="FILENAME"
>ntconfig.pol</TT
> you must use
- the NT Server Policy Editor, <B
+the NT Server Policy Editor, <B
CLASS="COMMAND"
>poledit.exe</B
> which
- is included with NT Server but <I
+is included with NT Server but <I
CLASS="EMPHASIS"
>not NT Workstation</I
>.
- There is a Policy Editor on a NTws
- but it is not suitable for creating <I
+There is a Policy Editor on a NTws
+but it is not suitable for creating <I
CLASS="EMPHASIS"
>Domain Policies</I
>.
- Further, although the Windows 95
- Policy Editor can be installed on an NT Workstation/Server, it will not
- work with NT policies because the registry key that are set by the policy templates.
- However, the files from the NT Server will run happily enough on an NTws.
- You need <TT
+Further, although the Windows 95
+Policy Editor can be installed on an NT Workstation/Server, it will not
+work with NT policies because the registry key that are set by the policy templates.
+However, the files from the NT Server will run happily enough on an NTws.
+You need <TT
CLASS="FILENAME"
>poledit.exe, common.adm</TT
> and <TT
CLASS="FILENAME"
>winnt.adm</TT
>. It is convenient
- to put the two *.adm files in <TT
+to put the two *.adm files in <TT
CLASS="FILENAME"
>c:\winnt\inf</TT
> which is where
- the binary will look for them unless told otherwise. Note also that that
- directory is 'hidden'.
- </P
+the binary will look for them unless told otherwise. Note also that that
+directory is 'hidden'.</P
><P
-> The Windows NT policy editor is also included with the Service Pack 3 (and
- later) for Windows NT 4.0. Extract the files using <B
+>The Windows NT policy editor is also included with the
+Service Pack 3 (and later) for Windows NT 4.0. Extract the files using
+<B
CLASS="COMMAND"
>servicepackname /x</B
->,
- i.e. that's <B
+>, ie thats <B
CLASS="COMMAND"
->Nt4sp6ai.exe /x</B
-> for service pack 6a. The policy editor,
- <B
+>Nt4sp6ai.exe
+/x</B
+> for service pack 6a. The policy editor, <B
CLASS="COMMAND"
>poledit.exe</B
-> and the associated template files (*.adm) should
- be extracted as well. It is also possible to downloaded the policy template
- files for Office97 and get a copy of the policy editor. Another possible
- location is with the Zero Administration Kit available for download from Microsoft.
- </P
-></LI
-><LI
+> and the
+associated template files (*.adm) should
+be extracted as well. It is also possible to downloaded the policy template
+files for Office97 and get a copy of the policy editor. Another possible
+location is with the Zero Administration Kit available for download from Microsoft.</P
><P
-> <I
+><I
CLASS="EMPHASIS"
>Can Win95 do Policies ?</I
->
- </P
+></P
><P
-> Install the group policy handler for Win9x to pick up group
- policies. Look on the Win98 CD in <TT
+>Install the group policy handler for Win9x to pick up group
+policies. Look on the Win98 CD in <TT
CLASS="FILENAME"
>\tools\reskit\netadmin\poledit</TT
>.
- Install group policies on a Win9x client by double-clicking
- <TT
+Install group policies on a Win9x client by double-clicking
+<TT
CLASS="FILENAME"
>grouppol.inf</TT
>. Log off and on again a couple of
- times and see if Win98 picks up group policies. Unfortunately this needs
- to be done on every Win9x machine that uses group policies....
- </P
+times and see if Win98 picks up group policies. Unfortunately this needs
+to be done on every Win9x machine that uses group policies....</P
><P
-> If group policies don't work one reports suggests getting the updated
- (read: working) grouppol.dll for Windows 9x. The group list is grabbed
- from /etc/group.
- </P
-></LI
-><LI
+>If group policies don't work one reports suggests getting the updated
+(read: working) grouppol.dll for Windows 9x. The group list is grabbed
+from /etc/group.</P
><P
-> <I
+><I
CLASS="EMPHASIS"
>How do I get 'User Manager' and 'Server Manager'</I
->
- </P
+></P
><P
-> Since I don't need to buy an NT Server CD now, how do I get
- the 'User Manager for Domains', the 'Server Manager' ?
- </P
+>Since I don't need to buy an NT Server CD now, how do I get
+the 'User Manager for Domains', the 'Server Manager' ?</P
><P
-> Microsoft distributes a version of these tools called nexus for
- installation on Windows 95 systems. The tools set includes
- </P
+>Microsoft distributes a version of
+these tools called nexus for installation on Windows 95 systems. The
+tools set includes</P
><P
></P
><UL
@@ -992,30 +738,26 @@ CLASS="EMPHASIS"
></LI
></UL
><P
-> Click here to download the archived file <A
+>Click here to download the archived file <A
HREF="ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE"
TARGET="_top"
>ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE</A
->
- </P
+></P
><P
-> The Windows NT 4.0 version of the 'User Manager for
- Domains' and 'Server Manager' are available from Microsoft via ftp
- from <A
+>The Windows NT 4.0 version of the 'User Manager for
+Domains' and 'Server Manager' are available from Microsoft via ftp
+from <A
HREF="ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE"
TARGET="_top"
>ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE</A
->
- </P
-></LI
-></UL
+></P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN237"
+NAME="AEN190"
>What other help can I get ?</A
></H1
><P
@@ -1024,19 +766,14 @@ of mailing lists, RFC's and documentation. The docs that come
with the samba distribution contain very good explanations of
general SMB topics such as browsing.</P
><P
-></P
-><UL
-><LI
-><P
-> <I
+><I
CLASS="EMPHASIS"
>What are some diagnostics tools I can use to debug the domain logon
- process and where can I find them?</I
->
- </P
+process and where can I find them?</I
+></P
><P
> One of the best diagnostic tools for debugging problems is Samba itself.
- You can use the -d option for both smbd and nmbd to specify what
+ You can use the -d option for both smbd and nmbd to specifiy what
'debug level' at which to run. See the man pages on smbd, nmbd and
smb.conf for more information on debugging options. The debug
level can range from 1 (the default) to 10 (100 for debugging passwords).
@@ -1075,7 +812,7 @@ CLASS="COMMAND"
></UL
><P
> An SMB enabled version of tcpdump is available from
- <A
+ <A
HREF="http://www.tcpdump.org/"
TARGET="_top"
>http://www.tcpdup.org/</A
@@ -1092,21 +829,18 @@ TARGET="_top"
(aka. netmon) is available on the Microsoft Developer Network CD's,
the Windows NT Server install CD and the SMS CD's. The version of
netmon that ships with SMS allows for dumping packets between any two
- computers (i.e. placing the network interface in promiscuous mode).
+ computers (ie. placing the network interface in promiscuous mode).
The version on the NT Server install CD will only allow monitoring
of network traffic directed to the local NT box and broadcasts on the
local subnet. Be aware that Ethereal can read and write netmon
formatted files.
</P
-></LI
-><LI
><P
-> <I
+><I
CLASS="EMPHASIS"
>How do I install 'Network Monitor' on an NT Workstation
- or a Windows 9x box?</I
->
- </P
+or a Windows 9x box?</I
+></P
><P
> Installing netmon on an NT workstation requires a couple
of steps. The following are for installing Netmon V4.00.349, which comes
@@ -1201,11 +935,14 @@ CLASS="FILENAME"
information on how to do this. Copy the files from a working
Netmon installation.
</P
-></LI
-><LI
-><P
-> The following is a list if helpful URLs and other links:
- </P
+><DIV
+CLASS="SECT2"
+><HR><H2
+CLASS="SECT2"
+><A
+NAME="AEN237"
+>URLs and similar</A
+></H2
><P
></P
><UL
@@ -1271,44 +1008,44 @@ TARGET="_top"
></P
></LI
></UL
-></LI
-></UL
-><P
-></P
-><UL
-><LI
+></DIV
+><DIV
+CLASS="SECT2"
+><HR><H2
+CLASS="SECT2"
+><A
+NAME="AEN261"
+>Mailing Lists</A
+></H2
><P
-> <I
+><I
CLASS="EMPHASIS"
>How do I get help from the mailing lists ?</I
->
- </P
+></P
><P
-> There are a number of Samba related mailing lists. Go to <A
+>There are a number of Samba related mailing lists. Go to <A
HREF="http://samba.org"
TARGET="_top"
>http://samba.org</A
>, click on your nearest mirror
- and then click on <B
+and then click on <B
CLASS="COMMAND"
>Support</B
> and then click on <B
CLASS="COMMAND"
-> Samba related mailing lists</B
->.
- </P
+>Samba related mailing lists</B
+>.</P
><P
-> For questions relating to Samba TNG go to
- <A
+>For questions relating to Samba TNG go to
+<A
HREF="http://www.samba-tng.org/"
TARGET="_top"
>http://www.samba-tng.org/</A
>
- It has been requested that you don't post questions about Samba-TNG to the
- main stream Samba lists.</P
+It has been requested that you don't post questions about Samba-TNG to the
+main stream Samba lists.</P
><P
-> If you post a message to one of the lists please observe the following guide lines :
- </P
+>If you post a message to one of the lists please observe the following guide lines :</P
><P
></P
><UL
@@ -1347,7 +1084,7 @@ TARGET="_top"
><LI
><P
> Don't cross post. Work out which is the best list to post to
- and see what happens, i.e. don't post to both samba-ntdom and samba-technical.
+ and see what happens, ie don't post to both samba-ntdom and samba-technical.
Many people active on the lists subscribe to more
than one list and get annoyed to see the same message two or more times.
Often someone will see a message and thinking it would be better dealt
@@ -1376,799 +1113,35 @@ CLASS="EMPHASIS"
smb.conf in their attach directory ?</P
></LI
></UL
-></LI
-><LI
><P
-> <I
+><I
CLASS="EMPHASIS"
>How do I get off the mailing lists ?</I
->
- </P
+></P
><P
>To have your name removed from a samba mailing list, go to the
- same place you went to to get on it. Go to <A
+ same place you went to to get on it. Go to <A
HREF="http://lists.samba.org/"
TARGET="_top"
>http://lists.samba.org</A
->,
- click on your nearest mirror and then click on <B
+>, click
+ on your nearest mirror and then click on <B
CLASS="COMMAND"
>Support</B
> and
- then click on <B
+ then click on <B
CLASS="COMMAND"
> Samba related mailing lists</B
>. Or perhaps see
- <A
+ <A
HREF="http://lists.samba.org/mailman/roster/samba-ntdom"
TARGET="_top"
>here</A
->
- </P
-><P
-> Please don't post messages to the list asking to be removed, you will just
- be referred to the above address (unless that process failed in some way...)
- </P
-></LI
-></UL
-></DIV
-><DIV
-CLASS="SECT1"
-><HR><H1
-CLASS="SECT1"
-><A
-NAME="AEN351"
->Domain Control for Windows 9x/ME</A
-></H1
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->The following section contains much of the original
-DOMAIN.txt file previously included with Samba. Much of
-the material is based on what went into the book Special
-Edition, Using Samba. (Richard Sharpe)</P
-></BLOCKQUOTE
-></DIV
-><P
->A domain and a workgroup are exactly the same thing in terms of network
-browsing. The difference is that a distributable authentication
-database is associated with a domain, for secure login access to a
-network. Also, different access rights can be granted to users if they
-successfully authenticate against a domain logon server (NT server and
-other systems based on NT server support this, as does at least Samba TNG now).</P
-><P
->The SMB client logging on to a domain has an expectation that every other
-server in the domain should accept the same authentication information.
-Network browsing functionality of domains and workgroups is
-identical and is explained in BROWSING.txt. It should be noted, that browsing
-is total orthogonal to logon support.</P
-><P
->Issues related to the single-logon network model are discussed in this
-document. Samba supports domain logons, network logon scripts, and user
-profiles for MS Windows for workgroups and MS Windows 9X clients.</P
-><P
->When an SMB client in a domain wishes to logon it broadcast requests for a
-logon server. The first one to reply gets the job, and validates its
-password using whatever mechanism the Samba administrator has installed.
-It is possible (but very stupid) to create a domain where the user
-database is not shared between servers, i.e. they are effectively workgroup
-servers advertising themselves as participating in a domain. This
-demonstrates how authentication is quite different from but closely
-involved with domains.</P
-><P
->Another thing commonly associated with single-logon domains is remote
-administration over the SMB protocol. Again, there is no reason why this
-cannot be implemented with an underlying username database which is
-different from the Windows NT SAM. Support for the Remote Administration
-Protocol is planned for a future release of Samba.</P
-><P
->Network logon support as discussed in this section is aimed at Window for
-Workgroups, and Windows 9X clients. </P
-><P
->Support for profiles is confirmed as working for Win95, NT 4.0 and NT 3.51.
-It is possible to specify: the profile location; script file to be loaded
-on login; the user's home directory; and for NT a kick-off time could also
-now easily be supported. However, there are some differences between Win9X
-profile support and WinNT profile support. These are discussed below.</P
-><P
->With NT Workstations, all this does not require the use or intervention of
-an NT 4.0 or NT 3.51 server: Samba can now replace the logon services
-provided by an NT server, to a limited and experimental degree (for example,
-running "User Manager for Domains" will not provide you with access to
-a domain created by a Samba Server).</P
-><P
->With Win95, the help of an NT server can be enlisted, both for profile storage
-and for user authentication. For details on user authentication, see
-security_level.txt. For details on profile storage, see below.</P
-><P
->Using these features you can make your clients verify their logon via
-the Samba server; make clients run a batch file when they logon to
-the network and download their preferences, desktop and start menu.</P
-><P
->Before launching into the configuration instructions, it is worthwhile looking
-at how a Win9X client performs a logon:</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
-> The client broadcasts (to the IP broadcast address of the subnet it is in)
- a NetLogon request. This is sent to the NetBIOS address DOMAIN&#60;00&#62; at the
- NetBIOS layer. The client chooses the first response it receives, which
- contains the NetBIOS name of the logon server to use in the format of
- \\SERVER.
- </P
-></LI
-><LI
-><P
-> The client then connects to that server, logs on (does an SMBsessetupX) and
- then connects to the IPC$ share (using an SMBtconX).
- </P
-></LI
-><LI
-><P
-> The client then does a NetWkstaUserLogon request, which retrieves the name
- of the user's logon script.
- </P
-></LI
-><LI
-><P
-> The client then connects to the NetLogon share and searches for this
- and if it is found and can be read, is retrieved and executed by the client.
- After this, the client disconnects from the NetLogon share.
- </P
-></LI
-><LI
-><P
-> The client then sends a NetUserGetInfo request to the server, to retrieve
- the user's home share, which is used to search for profiles. Since the
- response to the NetUserGetInfo request does not contain much more
- the user's home share, profiles for Win9X clients MUST reside in the user
- home directory.
- </P
-></LI
-><LI
-><P
-> The client then connects to the user's home share and searches for the
- user's profile. As it turns out, you can specify the user's home share as
- a sharename and path. For example, \\server\fred\.profile.
- If the profiles are found, they are implemented.
- </P
-></LI
-><LI
-><P
-> The client then disconnects from the user's home share, and reconnects to
- the NetLogon share and looks for CONFIG.POL, the policies file. If this is
- found, it is read and implemented.
- </P
-></LI
-></OL
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN381"
->Configuration Instructions: Network Logons</A
-></H2
-><P
->To use domain logons and profiles you need to do the following:</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
-> Create a share called [netlogon] in your smb.conf. This share should
- be readable by all users, and probably should not be writeable. This
- share will hold your network logon scripts, and the CONFIG.POL file
- (Note: for details on the CONFIG.POL file, how to use it, what it is,
- refer to the Microsoft Windows NT Administration documentation.
- The format of these files is not known, so you will need to use
- Microsoft tools).
- </P
-><P
-> For example I have used:
- </P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->[netlogon]
- path = /data/dos/netlogon
- writeable = no
- guest ok = no</PRE
-></P
-><P
-> Note that it is important that this share is not writeable by ordinary
- users, in a secure environment: ordinary users should not be allowed
- to modify or add files that another user's computer would then download
- when they log in.
- </P
-></LI
-><LI
-><P
-> in the [global] section of smb.conf set the following:
- </P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->domain logons = yes
-logon script = %U.bat
- </PRE
-></P
-><P
-> The choice of batch file is, of course, up to you. The above would
- give each user a separate batch file as the %U will be changed to
- their username automatically. The other standard % macros may also be
- used. You can make the batch files come from a subdirectory by using
- something like:
- </P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->logon script = scripts\%U.bat
- </PRE
-></P
-></LI
-><LI
-><P
-> create the batch files to be run when the user logs in. If the batch
- file doesn't exist then no batch file will be run.
- </P
-><P
-> In the batch files you need to be careful to use DOS style cr/lf line
- endings. If you don't then DOS may get confused. I suggest you use a
- DOS editor to remotely edit the files if you don't know how to produce
- DOS style files under unix.
- </P
-></LI
-><LI
-><P
-> Use smbclient with the -U option for some users to make sure that
- the \\server\NETLOGON share is available, the batch files are
- visible and they are readable by the users.
- </P
-></LI
-><LI
-><P
-> you will probably find that your clients automatically mount the
- \\SERVER\NETLOGON share as drive z: while logging in. You can put
- some useful programs there to execute from the batch files.
- </P
-></LI
-></OL
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->security mode and master browsers</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
->There are a few comments to make in order to tie up some
-loose ends. There has been much debate over the issue of whether
-or not it is ok to configure Samba as a Domain Controller in security
-modes other than <TT
-CLASS="CONSTANT"
->USER</TT
->. The only security mode
-which will not work due to technical reasons is <TT
-CLASS="CONSTANT"
->SHARE</TT
->
-mode security. <TT
-CLASS="CONSTANT"
->DOMAIN</TT
-> and <TT
-CLASS="CONSTANT"
->SERVER</TT
->
-mode security is really just a variation on SMB user level security.</P
-><P
->Actually, this issue is also closer tied to the debate on whether
-or not Samba must be the domain master browser for its workgroup
-when operating as a DC. While it may technically be possible
-to configure a server as such (after all, browsing and domain logons
-are two distinctly different functions), it is not a good idea to
-so. You should remember that the DC must register the DOMAIN#1b NetBIOS
-name. This is the name used by Windows clients to locate the DC.
-Windows clients do not distinguish between the DC and the DMB.
-For this reason, it is very wise to configure the Samba DC as the DMB.</P
-><P
->Now back to the issue of configuring a Samba DC to use a mode other
-than "security = user". If a Samba host is configured to use
-another SMB server or DC in order to validate user connection
-requests, then it is a fact that some other machine on the network
-(the "password server") knows more about user than the Samba host.
-99% of the time, this other host is a domain controller. Now
-in order to operate in domain mode security, the "workgroup" parameter
-must be set to the name of the Windows NT domain (which already
-has a domain controller, right?)</P
-><P
->Therefore configuring a Samba box as a DC for a domain that
-already by definition has a PDC is asking for trouble.
-Therefore, you should always configure the Samba DC to be the DMB
-for its domain.</P
-></TD
-></TR
-></TABLE
-></DIV
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN415"
->Configuration Instructions: Setting up Roaming User Profiles</A
-></H2
-><DIV
-CLASS="WARNING"
-><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Warning</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
-><I
-CLASS="EMPHASIS"
->NOTE!</I
-> Roaming profiles support is different
-for Win9X and WinNT.</P
-></TD
-></TR
-></TABLE
-></DIV
-><P
->Before discussing how to configure roaming profiles, it is useful to see how
-Win9X and WinNT clients implement these features.</P
-><P
->Win9X clients send a NetUserGetInfo request to the server to get the user's
-profiles location. However, the response does not have room for a separate
-profiles location field, only the user's home share. This means that Win9X
-profiles are restricted to being in the user's home directory.</P
-><P
->WinNT clients send a NetSAMLogon RPC request, which contains many fields,
-including a separate field for the location of the user's profiles.
-This means that support for profiles is different for Win9X and WinNT.</P
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN423"
->Windows NT Configuration</A
-></H3
-><P
->To support WinNT clients, inn the [global] section of smb.conf set the
-following (for example):</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->logon path = \\profileserver\profileshare\profilepath\%U\moreprofilepath</PRE
-></P
-><P
->The default for this option is \\%N\%U\profile, namely
-\\sambaserver\username\profile. The \\N%\%U service is created
-automatically by the [homes] service.
-If you are using a samba server for the profiles, you _must_ make the
-share specified in the logon path browseable. </P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->[lkcl 26aug96 - we have discovered a problem where Windows clients can
-maintain a connection to the [homes] share in between logins. The
-[homes] share must NOT therefore be used in a profile path.]</P
-></BLOCKQUOTE
-></DIV
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN431"
->Windows 9X Configuration</A
-></H3
-><P
->To support Win9X clients, you must use the "logon home" parameter. Samba has
-now been fixed so that "net use/home" now works as well, and it, too, relies
-on the "logon home" parameter.</P
-><P
->By using the logon home parameter, you are restricted to putting Win9X
-profiles in the user's home directory. But wait! There is a trick you
-can use. If you set the following in the [global] section of your
-smb.conf file:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->logon home = \\%L\%U\.profiles</PRE
-></P
-><P
->then your Win9X clients will dutifully put their clients in a subdirectory
-of your home directory called .profiles (thus making them hidden).</P
-><P
->Not only that, but 'net use/home' will also work, because of a feature in
-Win9X. It removes any directory stuff off the end of the home directory area
-and only uses the server and share portion. That is, it looks like you
-specified \\%L\%U for "logon home".</P
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN439"
->Win9X and WinNT Configuration</A
-></H3
-><P
->You can support profiles for both Win9X and WinNT clients by setting both the
-"logon home" and "logon path" parameters. For example:</P
-><P
-><PRE
-CLASS="PROGRAMLISTING"
->logon home = \\%L\%U\.profiles
-logon path = \\%L\profiles\%U</PRE
-></P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->I have not checked what 'net use /home' does on NT when "logon home" is
-set as above.</P
-></BLOCKQUOTE
-></DIV
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN446"
->Windows 9X Profile Setup</A
-></H3
-><P
->When a user first logs in on Windows 9X, the file user.DAT is created,
-as are folders "Start Menu", "Desktop", "Programs" and "Nethood".
-These directories and their contents will be merged with the local
-versions stored in c:\windows\profiles\username on subsequent logins,
-taking the most recent from each. You will need to use the [global]
-options "preserve case = yes", "short case preserve = yes" and
-"case sensitive = no" in order to maintain capital letters in shortcuts
-in any of the profile folders.</P
-><P
->The user.DAT file contains all the user's preferences. If you wish to
-enforce a set of preferences, rename their user.DAT file to user.MAN,
-and deny them write access to this file.</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
-> On the Windows 95 machine, go to Control Panel | Passwords and
- select the User Profiles tab. Select the required level of
- roaming preferences. Press OK, but do _not_ allow the computer
- to reboot.
- </P
-></LI
-><LI
-><P
-> On the Windows 95 machine, go to Control Panel | Network |
- Client for Microsoft Networks | Preferences. Select 'Log on to
- NT Domain'. Then, ensure that the Primary Logon is 'Client for
- Microsoft Networks'. Press OK, and this time allow the computer
- to reboot.
- </P
-></LI
-></OL
-><P
->Under Windows 95, Profiles are downloaded from the Primary Logon.
-If you have the Primary Logon as 'Client for Novell Networks', then
-the profiles and logon script will be downloaded from your Novell
-Server. If you have the Primary Logon as 'Windows Logon', then the
-profiles will be loaded from the local machine - a bit against the
-concept of roaming profiles, if you ask me.</P
-><P
->You will now find that the Microsoft Networks Login box contains
-[user, password, domain] instead of just [user, password]. Type in
-the samba server's domain name (or any other domain known to exist,
-but bear in mind that the user will be authenticated against this
-domain and profiles downloaded from it, if that domain logon server
-supports it), user name and user's password.</P
-><P
->Once the user has been successfully validated, the Windows 95 machine
-will inform you that 'The user has not logged on before' and asks you
-if you wish to save the user's preferences? Select 'yes'.</P
-><P
->Once the Windows 95 client comes up with the desktop, you should be able
-to examine the contents of the directory specified in the "logon path"
-on the samba server and verify that the "Desktop", "Start Menu",
-"Programs" and "Nethood" folders have been created.</P
-><P
->These folders will be cached locally on the client, and updated when
-the user logs off (if you haven't made them read-only by then :-).
-You will find that if the user creates further folders or short-cuts,
-that the client will merge the profile contents downloaded with the
-contents of the profile directory already on the local client, taking
-the newest folders and short-cuts from each set.</P
-><P
->If you have made the folders / files read-only on the samba server,
-then you will get errors from the w95 machine on logon and logout, as
-it attempts to merge the local and the remote profile. Basically, if
-you have any errors reported by the w95 machine, check the unix file
-permissions and ownership rights on the profile directory contents,
-on the samba server.</P
-><P
->If you have problems creating user profiles, you can reset the user's
-local desktop cache, as shown below. When this user then next logs in,
-they will be told that they are logging in "for the first time".</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
-> instead of logging in under the [user, password, domain] dialog,
- press escape.
- </P
-></LI
-><LI
-><P
-> run the regedit.exe program, and look in:
- </P
-><P
-> HKEY_LOCAL_MACHINE\Windows\CurrentVersion\ProfileList
- </P
-><P
-> you will find an entry, for each user, of ProfilePath. Note the
- contents of this key (likely to be c:\windows\profiles\username),
- then delete the key ProfilePath for the required user.
- </P
-><P
-> [Exit the registry editor].
- </P
-></LI
-><LI
-><P
-> <I
-CLASS="EMPHASIS"
->WARNING</I
-> - before deleting the contents of the
- directory listed in
- the ProfilePath (this is likely to be c:\windows\profiles\username),
- ask them if they have any important files stored on their desktop
- or in their start menu. delete the contents of the directory
- ProfilePath (making a backup if any of the files are needed).
- </P
-><P
-> This will have the effect of removing the local (read-only hidden
- system file) user.DAT in their profile directory, as well as the
- local "desktop", "nethood", "start menu" and "programs" folders.
- </P
-></LI
-><LI
-><P
-> search for the user's .PWL password-caching file in the c:\windows
- directory, and delete it.
- </P
-></LI
-><LI
-><P
-> log off the windows 95 client.
- </P
-></LI
-><LI
-><P
-> check the contents of the profile path (see "logon path" described
- above), and delete the user.DAT or user.MAN file for the user,
- making a backup if required.
- </P
-></LI
-></OL
-><P
->If all else fails, increase samba's debug log levels to between 3 and 10,
-and / or run a packet trace program such as tcpdump or netmon.exe, and
-look for any error reports.</P
-><P
->If you have access to an NT server, then first set up roaming profiles
-and / or netlogons on the NT server. Make a packet trace, or examine
-the example packet traces provided with NT server, and see what the
-differences are with the equivalent samba trace.</P
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN482"
->Windows NT Workstation 4.0</A
-></H3
-><P
->When a user first logs in to a Windows NT Workstation, the profile
-NTuser.DAT is created. The profile location can be now specified
-through the "logon path" parameter. </P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->[lkcl 10aug97 - i tried setting the path to
-\\samba-server\homes\profile, and discovered that this fails because
-a background process maintains the connection to the [homes] share
-which does _not_ close down in between user logins. you have to
-have \\samba-server\%L\profile, where user is the username created
-from the [homes] share].</P
-></BLOCKQUOTE
-></DIV
-><P
->There is a parameter that is now available for use with NT Profiles:
-"logon drive". This should be set to "h:" or any other drive, and
-should be used in conjunction with the new "logon home" parameter.</P
-><P
->The entry for the NT 4.0 profile is a _directory_ not a file. The NT
-help on profiles mentions that a directory is also created with a .PDS
-extension. The user, while logging in, must have write permission to
-create the full profile path (and the folder with the .PDS extension)
-[lkcl 10aug97 - i found that the creation of the .PDS directory failed,
-and had to create these manually for each user, with a shell script.
-also, i presume, but have not tested, that the full profile path must
-be browseable just as it is for w95, due to the manner in which they
-attempt to create the full profile path: test existence of each path
-component; create path component].</P
-><P
->In the profile directory, NT creates more folders than 95. It creates
-"Application Data" and others, as well as "Desktop", "Nethood",
-"Start Menu" and "Programs". The profile itself is stored in a file
-NTuser.DAT. Nothing appears to be stored in the .PDS directory, and
-its purpose is currently unknown.</P
-><P
->You can use the System Control Panel to copy a local profile onto
-a samba server (see NT Help on profiles: it is also capable of firing
-up the correct location in the System Control Panel for you). The
-NT Help file also mentions that renaming NTuser.DAT to NTuser.MAN
-turns a profile into a mandatory one.</P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->[lkcl 10aug97 - i notice that NT Workstation tells me that it is
-downloading a profile from a slow link. whether this is actually the
-case, or whether there is some configuration issue, as yet unknown,
-that makes NT Workstation _think_ that the link is a slow one is a
-matter to be resolved].</P
-><P
->[lkcl 20aug97 - after samba digest correspondence, one user found, and
-another confirmed, that profiles cannot be loaded from a samba server
-unless "security = user" and "encrypt passwords = yes" (see the file
-ENCRYPTION.txt) or "security = server" and "password server = ip.address.
-of.yourNTserver" are used. Either of these options will allow the NT
-workstation to access the samba server using LAN manager encrypted
-passwords, without the user intervention normally required by NT
-workstation for clear-text passwords].</P
-><P
->[lkcl 25aug97 - more comments received about NT profiles: the case of
-the profile _matters_. the file _must_ be called NTuser.DAT or, for
-a mandatory profile, NTuser.MAN].</P
-></BLOCKQUOTE
-></DIV
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN495"
->Windows NT Server</A
-></H3
-><P
->There is nothing to stop you specifying any path that you like for the
-location of users' profiles. Therefore, you could specify that the
-profile be stored on a samba server, or any other SMB server, as long as
-that SMB server supports encrypted passwords.</P
-></DIV
-><DIV
-CLASS="SECT3"
-><HR><H3
-CLASS="SECT3"
-><A
-NAME="AEN498"
->Sharing Profiles between W95 and NT Workstation 4.0</A
-></H3
-><DIV
-CLASS="WARNING"
-><P
></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Potentially outdated or incorrect material follows</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
->I think this is all bogus, but have not deleted it. (Richard Sharpe)</P
-></TD
-></TR
-></TABLE
-></DIV
><P
->The default logon path is \\%N\U%. NT Workstation will attempt to create
-a directory "\\samba-server\username.PDS" if you specify the logon path
-as "\\samba-server\username" with the NT User Manager. Therefore, you
-will need to specify (for example) "\\samba-server\username\profile".
-NT 4.0 will attempt to create "\\samba-server\username\profile.PDS", which
-is more likely to succeed.</P
-><P
->If you then want to share the same Start Menu / Desktop with W95, you will
-need to specify "logon path = \\samba-server\username\profile" [lkcl 10aug97
-this has its drawbacks: i created a shortcut to telnet.exe, which attempts
-to run from the c:\winnt\system32 directory. this directory is obviously
-unlikely to exist on a Win95-only host].</P
-><P
->&#13;If you have this set up correctly, you will find separate user.DAT and
-NTuser.DAT files in the same profile directory.</P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
-><P
-><B
->Note: </B
->[lkcl 25aug97 - there are some issues to resolve with downloading of
-NT profiles, probably to do with time/date stamps. i have found that
-NTuser.DAT is never updated on the workstation after the first time that
-it is copied to the local workstation profile directory. this is in
-contrast to w95, where it _does_ transfer / update profiles correctly].</P
-></BLOCKQUOTE
-></DIV
-></DIV
+> Please don't post messages to the list asking to be removed, you will just
+ be referred to the above address (unless that process failed in some way...)
+ </P
></DIV
></DIV
><DIV
@@ -2176,35 +1149,12 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN508"
+NAME="AEN300"
>DOMAIN_CONTROL.txt : Windows NT Domain Control &#38; Samba</A
></H1
-><DIV
-CLASS="WARNING"
><P
-></P
-><TABLE
-CLASS="WARNING"
-BORDER="1"
-WIDTH="100%"
-><TR
-><TD
-ALIGN="CENTER"
-><B
->Possibly Outdated Material</B
-></TD
-></TR
-><TR
-><TD
-ALIGN="LEFT"
-><P
-> This appendix was originally authored by John H Terpstra of
- the Samba Team and is included here for posterity.
- </P
-></TD
-></TR
-></TABLE
-></DIV
+>This appendix was originally authored by John H Terpstra of the Samba Team
+and is included here for posterity.</P
><P
><I
CLASS="EMPHASIS"
@@ -2221,9 +1171,12 @@ Windows NT SAM.</P
><P
>Windows NT Server can be installed as either a plain file and print server
(WORKGROUP workstation or server) or as a server that participates in Domain
-Control (DOMAIN member, Primary Domain controller or Backup Domain controller).
-The same is true for OS/2 Warp Server, Digital Pathworks and other similar
-products, all of which can participate in Domain Control along with Windows NT.</P
+Control (DOMAIN member, Primary Domain controller or Backup Domain controller).</P
+><P
+>The same is true for OS/2 Warp Server, Digital Pathworks and other similar
+products, all of which can participate in Domain Control along with Windows NT.
+However only those servers which have licensed Windows NT code in them can be
+a primary Domain Controller (eg Windows NT Server, Advanced Server for Unix.)</P
><P
>To many people these terms can be confusing, so let's try to clear the air.</P
><P
@@ -2274,7 +1227,7 @@ plain Servers.</P
><P
>The User database is called the SAM (Security Access Manager) database and
is used for all user authentication as well as for authentication of inter-
-process authentication (i.e. to ensure that the service action a user has
+process authentication (ie: to ensure that the service action a user has
requested is permitted within the limits of that user's privileges).</P
><P
>The Samba team have produced a utility that can dump the Windows NT SAM into
@@ -2285,7 +1238,7 @@ to Samba systems.</P
><P
>Windows for Workgroups, Windows 95, and Windows NT Workstations and Servers
can participate in a Domain security system that is controlled by Windows NT
-servers that have been correctly configured. Almost every domain will have
+servers that have been correctly configured. At most every domain will have
ONE Primary Domain Controller (PDC). It is desirable that each domain will
have at least one Backup Domain Controller (BDC).</P
><P
diff --git a/docs/htmldocs/UNIX_INSTALL.html b/docs/htmldocs/UNIX_INSTALL.html
index 32c4b7be593..34f4ed9283a 100644
--- a/docs/htmldocs/UNIX_INSTALL.html
+++ b/docs/htmldocs/UNIX_INSTALL.html
@@ -84,7 +84,7 @@ CLASS="USERINPUT"
></P
><P
>first to see what special options you can enable.
- Then executing</P
+ Then exectuting</P
><P
><TT
CLASS="PROMPT"
@@ -202,7 +202,7 @@ CLASS="PROGRAMLISTING"
>which would allow connections by anyone with an
account on the server, using either their login name or
"homes" as the service name. (Note that I also set the
- workgroup that Samba is part of. See BROWSING.txt for details)</P
+ workgroup that Samba is part of. See BROWSING.txt for defails)</P
><P
>Note that <B
CLASS="COMMAND"
@@ -249,7 +249,7 @@ CLASS="FILENAME"
not it will give an error message.</P
><P
>Make sure it runs OK and that the services look
- reasonable before proceeding. </P
+ resonable before proceeding. </P
></DIV
><DIV
CLASS="SECT1"
@@ -358,7 +358,7 @@ CLASS="FILENAME"
<TT
CLASS="FILENAME"
>/etc/inetd.conf</TT
-> to make them consistent.</P
+> to make them consistant.</P
><P
>NOTE: On many systems you may need to use the
"interfaces" option in smb.conf to specify the IP address
@@ -371,7 +371,7 @@ CLASS="COMMAND"
CLASS="COMMAND"
>nmbd</B
> tries to determine it at run
- time, but fails on some unixes. See the section on "testing nmbd"
+ time, but fails on somunixes. See the section on "testing nmbd"
for a method of finding if you need to do this.</P
><P
>!!!WARNING!!! Many unixes only accept around 5
@@ -637,7 +637,7 @@ NAME="AEN162"
>Diagnosing Problems</A
></H2
><P
->If you have installation problems then go to
+>If you have instalation problems then go to
<TT
CLASS="FILENAME"
>DIAGNOSIS.txt</TT
@@ -771,7 +771,7 @@ NAME="AEN182"
are set by an application when it opens a file to determine
what types of access should be allowed simultaneously with
its open. A client may ask for DENY_NONE, DENY_READ, DENY_WRITE
- or DENY_ALL. There are also special compatibility modes called
+ or DENY_ALL. There are also special compatability modes called
DENY_FCB and DENY_DOS.</P
><P
>You can disable share modes using "share modes = no".
@@ -804,7 +804,7 @@ NAME="AEN195"
><P
>If you have problems using filenames with accented
characters in them (like the German, French or Scandinavian
- character sets) then I recommend you look at the "valid chars"
+ character sets) then I recommmend you look at the "valid chars"
option in smb.conf and also take a look at the validchars
package in the examples directory.</P
></DIV
diff --git a/docs/htmldocs/findsmb.1.html b/docs/htmldocs/findsmb.1.html
index 2f246d666d8..0f7ed2265ea 100644
--- a/docs/htmldocs/findsmb.1.html
+++ b/docs/htmldocs/findsmb.1.html
@@ -165,12 +165,6 @@ CLASS="COMMAND"
>nmbd</B
> running would yield output similar
to the following</P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="SCREEN"
><TT
@@ -189,9 +183,6 @@ CLASS="COMPUTEROUTPUT"
192.168.35.97 HERBNT1 *[HERB-NT] [Windows NT 4.0] [NT LAN Manager 4.0]
</TT
></PRE
-></TD
-></TR
-></TABLE
></DIV
><DIV
CLASS="REFSECT1"
diff --git a/docs/htmldocs/lmhosts.5.html b/docs/htmldocs/lmhosts.5.html
index 47df4a9733b..671278c19e0 100644
--- a/docs/htmldocs/lmhosts.5.html
+++ b/docs/htmldocs/lmhosts.5.html
@@ -59,9 +59,10 @@ TARGET="_top"
><TT
CLASS="FILENAME"
>lmhosts</TT
-> is the <EM
+> is the <I
+CLASS="EMPHASIS"
>Samba
- </EM
+ </I
> NetBIOS name to IP address mapping file. It
is very similar to the <TT
CLASS="FILENAME"
@@ -104,12 +105,6 @@ NAME="AEN20"
><P
>An example follows :</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>#
@@ -119,9 +114,6 @@ CLASS="PROGRAMLISTING"
192.9.200.20 NTSERVER#20
192.9.200.21 SAMBASERVER
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>Contains three IP to NetBIOS name mappings. The first
diff --git a/docs/htmldocs/make_smbcodepage.1.html b/docs/htmldocs/make_smbcodepage.1.html
index 8e792e31221..456ea98b20c 100644
--- a/docs/htmldocs/make_smbcodepage.1.html
+++ b/docs/htmldocs/make_smbcodepage.1.html
@@ -14,7 +14,7 @@ VLINK="#840084"
ALINK="#0000FF"
><H1
><A
-NAME="MAKE-SMBCODEPAGE"
+NAME="FINDSMB"
>make_smbcodepage</A
></H1
><DIV
@@ -104,24 +104,24 @@ CLASS="PARAMETER"
>inputfile</DT
><DD
><P
->This is the input file to process. In
- the <TT
+>This is the input file to process. In t
+ he '<TT
CLASS="PARAMETER"
><I
>c</I
></TT
-> case this will be a text
+>' case this will be a text
codepage definition file such as the ones found in the Samba
<TT
CLASS="FILENAME"
>source/codepages</TT
> directory. In
- the <TT
+ the '<TT
CLASS="PARAMETER"
><I
>d</I
></TT
-> case this will be the
+>' case this will be the
binary format codepage definition file normally found in
the <TT
CLASS="FILENAME"
@@ -202,7 +202,7 @@ NAME="AEN58"
><P
><B
CLASS="COMMAND"
->codepage_def.&#60;codepage&#62;</B
+>codepage_def.&lt;codepage&gt;</B
></P
><P
>These are the input (text) codepage files provided in the
@@ -259,7 +259,7 @@ CLASS="COMMAND"
><P
><B
CLASS="COMMAND"
->codepage.&#60;codepage&#62;</B
+>codepage.&lt;codepage&gt;</B
> - These are the
output (binary) codepage files produced and placed in the Samba
destination <TT
diff --git a/docs/htmldocs/make_unicodemap.1.html b/docs/htmldocs/make_unicodemap.1.html
deleted file mode 100644
index b8b768ce40d..00000000000
--- a/docs/htmldocs/make_unicodemap.1.html
+++ /dev/null
@@ -1,276 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->make_unicodemap</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.57"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><H1
-><A
-NAME="MAKE-UNICODEMAP"
->make_unicodemap</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN5"
-></A
-><H2
->Name</H2
->make_unicodemap&nbsp;--&nbsp;construct a unicode map file for Samba</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN8"
-></A
-><H2
->Synopsis</H2
-><P
-><B
-CLASS="COMMAND"
->make_unicodemap</B
-> {codepage} {inputfile} {outputfile}</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN14"
-></A
-><H2
->DESCRIPTION</H2
-><P
-> This tool is part of the <A
-HREF="samba.7.html"
-TARGET="_top"
->Samba</A
->
- suite.
- </P
-><P
-> <B
-CLASS="COMMAND"
->make_unicodemap</B
-> compiles text unicode map
- files into binary unicode map files for use with the
- internationalization features of Samba 2.2.
- </P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN20"
-></A
-><H2
->OPTIONS</H2
-><P
-></P
-><DIV
-CLASS="VARIABLELIST"
-><DL
-><DT
->codepage</DT
-><DD
-><P
->This is the codepage or UNIX character
- set we are processing (a number, e.g. 850).
- </P
-></DD
-><DT
->inputfile</DT
-><DD
-><P
->This is the input file to process. This is a
- text unicode map file such as the ones found in the Samba
- <TT
-CLASS="FILENAME"
->source/codepages</TT
-> directory.
- </P
-></DD
-><DT
->outputfile</DT
-><DD
-><P
->This is the binary output file to produce.
- </P
-></DD
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN36"
-></A
-><H2
->Samba Unicode Map Files</H2
-><P
-> A text Samba unicode map file is a description that tells Samba
- how to map characters from a specified DOS code page or UNIX character
- set to 16 bit unicode.
- </P
-><P
->A binary Samba unicode map file is a binary representation
- of the same information, including a value that specifies what
- codepage or UNIX character set this file is describing.
- </P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN40"
-></A
-><H2
->Files</H2
-><P
-><TT
-CLASS="FILENAME"
->CP&#60;codepage&#62;.TXT</TT
-></P
-><P
-> These are the input (text) unicode map files provided
- in the Samba <TT
-CLASS="FILENAME"
->source/codepages</TT
->
- directory.
- </P
-><P
-> A text unicode map file consists of multiple lines
- containing two fields. These fields are :
- </P
-><P
-></P
-><UL
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->character</I
-></TT
-> - which is
- the (hex) character mapped on this line.
- </P
-></LI
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->unicode</I
-></TT
-> - which
- is the (hex) 16 bit unicode character that the character
- will map to.
- </P
-></LI
-></UL
-><P
-> <TT
-CLASS="FILENAME"
->unicode_map.&#60;codepage&#62;</TT
-> - These are
- the output (binary) unicode map files produced and placed in
- the Samba destination <TT
-CLASS="FILENAME"
->lib/codepage</TT
->
- directory.
- </P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN57"
-></A
-><H2
->Installation</H2
-><P
-> The location of the server and its support files is a matter
- for individual system administrators. The following are thus
- suggestions only.
- </P
-><P
-> It is recommended that the <B
-CLASS="COMMAND"
->make_unicodemap</B
->
- program be installed under the
- <TT
-CLASS="FILENAME"
->$prefix/samba</TT
-> hierarchy,
- in a directory readable by all, writeable only by root. The
- program itself should be executable by all. The program
- should NOT be setuid or setgid!
- </P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN63"
-></A
-><H2
->VERSION</H2
-><P
->This man page is correct for version 2.2 of
- the Samba suite.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN66"
-></A
-><H2
->SEE ALSO</H2
-><P
-><A
-HREF="smbd.8.html"
-TARGET="_top"
-><B
-CLASS="COMMAND"
->smbd(8)</B
-></A
->,
- <A
-HREF="smb.conf.5.html"
-TARGET="_top"
->smb.conf(5)</A
->
- </P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN72"
-></A
-><H2
->AUTHOR</H2
-><P
->The original Samba software and related utilities
- were created by Andrew Tridgell. Samba is now developed
- by the Samba Team as an Open Source project similar
- to the way the Linux kernel is developed.</P
-><P
->The original Samba man pages were written by Karl Auer.
- The man page sources were converted to YODL format (another
- excellent piece of Open Source software, available at
- <A
-HREF="ftp://ftp.icce.rug.nl/pub/unix/"
-TARGET="_top"
-> ftp://ftp.icce.rug.nl/pub/unix/</A
->) and updated for the Samba 2.0
- release by Jeremy Allison. The conversion to DocBook for
- Samba 2.2 was done by Gerald Carter</P
-></DIV
-></BODY
-></HTML
-> \ No newline at end of file
diff --git a/docs/htmldocs/nmbd.8.html b/docs/htmldocs/nmbd.8.html
index 29bd8180407..4f7f71fe700 100644
--- a/docs/htmldocs/nmbd.8.html
+++ b/docs/htmldocs/nmbd.8.html
@@ -37,7 +37,7 @@ NAME="AEN8"
><B
CLASS="COMMAND"
>smbd</B
-> [-D] [-a] [-o] [-P] [-h] [-V] [-d &#60;debug level&#62;] [-H &#60;lmhosts file&#62;] [-l &#60;log file&#62;] [-n &#60;primary netbios name&#62;] [-p &#60;port number&#62;] [-s &#60;configuration file&#62;]</P
+> [-D] [-a] [-o] [-P] [-h] [-V] [-d &lt;debug level&gt;] [-H &lt;lmhosts file&gt;] [-l &lt;log file&gt;] [-n &lt;primary netbios name&gt;] [-p &lt;port number&gt;] [-s &lt;configuration file&gt;]</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -54,7 +54,7 @@ CLASS="COMMAND"
>nmbd</B
> is a server that understands
and can reply to NetBIOS over IP name service requests, like
- those produced by SMB/CIFS clients such as Windows 95/98/ME,
+ those produced by SMBD/CIFS clients such as Windows 95/98/ME,
Windows NT, Windows 2000, and LanManager clients. It also
participates in the browsing protocols which make up the
Windows "Network Neighborhood" view.</P
@@ -71,8 +71,9 @@ CLASS="COMMAND"
specified it will respond with the IP number of the host it
is running on. Its "own NetBIOS name" is by
default the primary DNS name of the host it is running on,
- but this can be overridden with the <EM
->-n</EM
+ but this can be overridden with the <I
+CLASS="EMPHASIS"
+>-n</I
>
option (see OPTIONS below). Thus <B
CLASS="COMMAND"
@@ -174,7 +175,7 @@ CLASS="COMMAND"
>.</P
></DD
><DT
->-H &#60;filename&#62;</DT
+>-H &lt;filename&gt;</DT
><DD
><P
>NetBIOS lmhosts file. The lmhosts
@@ -193,16 +194,18 @@ CLASS="FILENAME"
></A
>
to resolve any NetBIOS name queries needed by the server. Note
- that the contents of this file are <EM
->NOT</EM
+ that the contents of this file are <I
+CLASS="EMPHASIS"
+>NOT</I
>
used by <B
CLASS="COMMAND"
>nmbd</B
> to answer any name queries.
Adding a line to this file affects name NetBIOS resolution
- from this host <EM
->ONLY</EM
+ from this host <I
+CLASS="EMPHASIS"
+>ONLY</I
>.</P
><P
>The default path to this file is compiled into
@@ -239,7 +242,7 @@ CLASS="COMMAND"
>.</P
></DD
><DT
->-d &#60;debug level&#62;</DT
+>-d &lt;debug level&gt;</DT
><DD
><P
>debuglevel is an integer
@@ -275,7 +278,7 @@ CLASS="FILENAME"
> file.</P
></DD
><DT
->-l &#60;log file&#62;</DT
+>-l &lt;log file&gt;</DT
><DD
><P
>The -l parameter specifies a path
@@ -303,7 +306,7 @@ CLASS="FILENAME"
>.</P
></DD
><DT
->-n &#60;primary NetBIOS name&#62;</DT
+>-n &lt;primary NetBIOS name&gt;</DT
><DD
><P
>This option allows you to override
@@ -328,7 +331,7 @@ CLASS="FILENAME"
>.</P
></DD
><DT
->-p &#60;UDP port number&#62;</DT
+>-p &lt;UDP port number&gt;</DT
><DD
><P
>UDP port number is a positive integer value.
@@ -341,7 +344,7 @@ CLASS="COMMAND"
won't need help!</P
></DD
><DT
->-s &#60;configuration file&#62;</DT
+>-s &lt;configuration file&gt;</DT
><DD
><P
>The default configuration file name
@@ -481,8 +484,9 @@ CLASS="FILENAME"
>If <B
CLASS="COMMAND"
>nmbd</B
-> is acting as a <EM
-> browse master</EM
+> is acting as a <I
+CLASS="EMPHASIS"
+> browse master</I
> (see the <A
HREF="smb.conf.5.html#localmaster"
TARGET="_top"
@@ -525,8 +529,9 @@ NAME="AEN171"
CLASS="COMMAND"
>nmbd</B
> process it is recommended
- that SIGKILL (-9) <EM
->NOT</EM
+ that SIGKILL (-9) <I
+CLASS="EMPHASIS"
+>NOT</I
> be used, except as a last
resort, as this may leave the name database in an inconsistent state.
The correct way to terminate <B
@@ -539,7 +544,7 @@ CLASS="COMMAND"
CLASS="COMMAND"
>nmbd</B
> will accept SIGHUP, which will cause
- it to dump out its namelists into the file <TT
+ it to dump out it's namelists into the file <TT
CLASS="FILENAME"
>namelist.debug
</TT
@@ -555,7 +560,7 @@ CLASS="FILENAME"
cause <B
CLASS="COMMAND"
>nmbd</B
-> to dump out its server database in
+> to dump out it's server database in
the <TT
CLASS="FILENAME"
>log.nmb</TT
@@ -563,11 +568,11 @@ CLASS="FILENAME"
of nmbd may be raised by sending it a SIGUSR1 (<B
CLASS="COMMAND"
>kill -USR1
- &#60;nmbd-pid&#62;</B
+ &lt;nmbd-pid&gt;</B
>) and lowered by sending it a
SIGUSR2 (<B
CLASS="COMMAND"
->kill -USR2 &#60;nmbd-pid&#62;</B
+>kill -USR2 &lt;nmbd-pid&gt;</B
>). This is to
allow transient problems to be diagnosed, whilst still running at a
normally low log level.</P
diff --git a/docs/htmldocs/nmblookup.1.html b/docs/htmldocs/nmblookup.1.html
index c87d7d35db9..71503708752 100644
--- a/docs/htmldocs/nmblookup.1.html
+++ b/docs/htmldocs/nmblookup.1.html
@@ -37,7 +37,7 @@ NAME="AEN8"
><B
CLASS="COMMAND"
>nmblookup</B
-> [-M] [-R] [-S] [-r] [-A] [-h] [-B &#60;broadcast address&#62;] [-U &#60;unicast address&#62;] [-d &#60;debug level&#62;] [-s &#60;smb config file&#62;] [-i &#60;NetBIOS scope&#62;] [-T] {name}</P
+> [-M] [-R] [-S] [-r] [-A] [-h] [-B &lt;broadcast address&gt;] [-U &lt;unicast address&gt;] [-d &lt;debug level&gt;] [-s &lt;smb config file&gt;] [-i &lt;NetBIOS scope&gt;] [-T] {name}</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -128,7 +128,7 @@ CLASS="CONSTANT"
datagrams. The reason for this option is a bug in Windows 95
where it ignores the source port of the requesting packet
and only replies to UDP port 137. Unfortunately, on most UNIX
- systems root privilege is needed to bind to this port, and
+ systems root privilage is needed to bind to this port, and
in addition, if the <A
HREF="nmbd.8.html"
TARGET="_top"
@@ -156,7 +156,7 @@ CLASS="REPLACEABLE"
>Print a help (usage) message.</P
></DD
><DT
->-B &#60;broadcast address&#62;</DT
+>-B &lt;broadcast address&gt;</DT
><DD
><P
>Send the query to the given broadcast address. Without
@@ -179,7 +179,7 @@ CLASS="FILENAME"
</P
></DD
><DT
->-U &#60;unicast address&#62;</DT
+>-U &lt;unicast address&gt;</DT
><DD
><P
>Do a unicast query to the specified address or
@@ -198,7 +198,7 @@ CLASS="PARAMETER"
query a WINS server.</P
></DD
><DT
->-d &#60;debuglevel&#62;</DT
+>-d &lt;debuglevel&gt;</DT
><DD
><P
>debuglevel is an integer from 0 to 10.</P
@@ -234,7 +234,7 @@ CLASS="FILENAME"
> file.</P
></DD
><DT
->-s &#60;smb.conf&#62;</DT
+>-s &lt;smb.conf&gt;</DT
><DD
><P
>This parameter specifies the pathname to
@@ -246,7 +246,7 @@ TARGET="_top"
the Samba setup on the machine.</P
></DD
><DT
->-i &#60;scope&#62;</DT
+>-i &lt;scope&gt;</DT
><DD
><P
>This specifies a NetBIOS scope that
@@ -256,8 +256,9 @@ CLASS="COMMAND"
> will use to communicate with when
generating NetBIOS names. For details on the use of NetBIOS
scopes, see rfc1001.txt and rfc1002.txt. NetBIOS scopes are
- <EM
->very</EM
+ <I
+CLASS="EMPHASIS"
+>very</I
> rarely used, only set this parameter
if you are the system administrator in charge of all the
NetBIOS systems you communicate with.</P
@@ -270,8 +271,9 @@ CLASS="COMMAND"
lookup to be looked up via a reverse DNS lookup into a
DNS name, and printed out before each</P
><P
-><EM
->IP address .... NetBIOS name</EM
+><I
+CLASS="EMPHASIS"
+>IP address .... NetBIOS name</I
></P
><P
> pair that is the normal output.</P
@@ -283,7 +285,7 @@ CLASS="COMMAND"
>This is the NetBIOS name being queried. Depending
upon the previous options this may be a NetBIOS name or IP address.
If a NetBIOS name then the different name types may be specified
- by appending '#&#60;type&#62;' to the name. This name may also be
+ by appending '#&lt;type&gt;' to the name. This name may also be
'*', which will return all registered names within a broadcast
area.</P
></DD
@@ -321,7 +323,7 @@ CLASS="COMMAND"
><P
><B
CLASS="COMMAND"
->nmblookup -U samba.org -R 'IRIX#1B'</B
+>nmblookup -U samba.org -R IRIX#1B'</B
></P
><P
>would query the WINS server samba.org for the domain
diff --git a/docs/htmldocs/printer_driver2.html b/docs/htmldocs/printer_driver2.html
index 36a6ba6c9c6..34208f8feea 100644
--- a/docs/htmldocs/printer_driver2.html
+++ b/docs/htmldocs/printer_driver2.html
@@ -33,89 +33,71 @@ NAME="AEN3"
></H1
><P
>Beginning with the 2.2.0 release, Samba supports
-the native Windows NT printing mechanisms implemented via
-MS-RPC (i.e. the SPOOLSS named pipe). Previous versions of
-Samba only supported LanMan printing calls.</P
+ the native Windows NT printing mechanisms implemented via
+ MS-RPC (i.e. the SPOOLSS named pipe). Previous versions of
+ Samba only supported LanMan printing calls.</P
><P
>The additional functionality provided by the new
-SPOOLSS support includes:</P
+ SPOOLSS support includes:</P
><P
></P
><UL
><LI
><P
>Support for downloading printer driver
- files to Windows 95/98/NT/2000 clients upon demand.
- </P
+ files to Windows 95/98/NT/2000 clients upon demand.
+ </P
></LI
><LI
><P
>Uploading of printer drivers via the
- Windows NT Add Printer Wizard (APW) or the
- Imprints tool set (refer to <A
+ Windows NT Add Printer Wizard (APW) or the <A
HREF="http://imprints.sourceforge.net"
TARGET="_top"
->http://imprints.sourceforge.net</A
->).
- </P
+>Imprints tool set
+ </A
+></P
></LI
><LI
><P
>Support for the native MS-RPC printing
- calls such as StartDocPrinter, EnumJobs(), etc... (See
- the MSDN documentation at <A
+ calls such as StartDocPrinter, EnumJobs(), etc... (See
+ the <A
HREF="http://msdn.microsoft.com/"
TARGET="_top"
->http://msdn.microsoft.com/</A
->
- for more information on the Win32 printing API)
- </P
+>MSDN documentation
+ </A
+> for more information on the Win32 printing API)
+ </P
></LI
><LI
><P
>Support for NT Access Control Lists (ACL)
- on printer objects</P
+ on printer objects</P
></LI
><LI
><P
>Improved support for printer queue manipulation
- through the use of an internal databases for spooled job
- information</P
+ through the use of an internal databases for spooled job
+ information</P
></LI
></UL
-><P
->There has been some initial confusion about what all this means
-and whether or not it is a requirement for printer drivers to be
-installed on a Samba host in order to support printing from Windows
-clients. A bug existed in Samba 2.2.0 which made Windows NT/2000 clients
-require that the Samba server possess a valid driver for the printer.
-This is fixed in Samba 2.2.1 and once again, Windows NT/2000 clients
-can use the local APW for installing drivers to be used with a Samba
-served printer. This is the same behavior exhibited by Windows 9x clients.
-As a side note, Samba does not use these drivers in any way to process
-spooled files. They are utilized entirely by the clients.</P
-><P
->The following MS KB article, may be of some help if you are dealing with
-Windows 2000 clients: <I
-CLASS="EMPHASIS"
->How to Add Printers with No User
-Interaction in Windows 2000</I
-></P
-><P
-><A
-HREF="http://support.microsoft.com/support/kb/articles/Q189/1/05.ASP"
-TARGET="_top"
->http://support.microsoft.com/support/kb/articles/Q189/1/05.ASP</A
-></P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN25"
+NAME="AEN20"
>Configuration</A
></H1
+><P
+>In order to support the uploading of printer driver
+ files, you must first configure a file share named [print$].
+ The name of this share is hard coded in Samba's internals so
+ the name is very important (print$ is the service used by
+ Windows NT print servers to provide support for printer driver
+ download).</P
><DIV
CLASS="WARNING"
><P
@@ -128,95 +110,70 @@ WIDTH="100%"
><TD
ALIGN="CENTER"
><B
->[print$] vs. [printer$]</B
+>Warning</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
->Previous versions of Samba recommended using a share named [printer$].
-This name was taken from the printer$ service created by Windows 9x
-clients when a printer was shared. Windows 9x printer servers always have
-a printer$ service which provides read-only access via no
-password in order to support printer driver downloads.</P
+>Previous versions of Samba recommended using
+ a share named [printer$]. This name was taken from the
+ printer$ service created by Windows 9x clients when a
+ printer was shared. Windows 9x printer servers always have
+ a printer$ service which provides read-only access via no
+ password in order to support printer driver downloads.</P
><P
>However, the initial implementation allowed for a
-parameter named <TT
+ parameter named <TT
CLASS="PARAMETER"
><I
>printer driver location</I
></TT
>
-to be used on a per share basis to specify the location of
-the driver files associated with that printer. Another
-parameter named <TT
+ to be used on a per share basis to specify the location of
+ the driver files associated with that printer. Another
+ parameter named <TT
CLASS="PARAMETER"
><I
>printer driver</I
></TT
> provided
-a means of defining the printer driver name to be sent to
-the client.</P
+ a means of defining the printer driver name to be sent to
+ the client.</P
><P
>These parameters, including <TT
CLASS="PARAMETER"
><I
->printer driver
-file</I
+>printer driver
+ file</I
></TT
> parameter, are being depreciated and should not
-be used in new installations. For more information on this change,
-you should refer to the <A
+ be used in new installations. For more information on this change,
+ you should refer to the <A
HREF="#MIGRATION"
->Migration section</A
->
-of this document.</P
+>Migration section
+ </A
+>of this document.</P
></TD
></TR
></TABLE
></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN36"
->Creating [print$]</A
-></H2
><P
->In order to support the uploading of printer driver
-files, you must first configure a file share named [print$].
-The name of this share is hard coded in Samba's internals so
-the name is very important (print$ is the service used by
-Windows NT print servers to provide support for printer driver
-download).</P
-><P
->You should modify the server's smb.conf file to add the global
-parameters and to create the
-following file share (of course, some of the parameter values,
-such as 'path' are arbitrary and should be replaced with
-appropriate values for your site):</P
+>You should modify the server's smb.conf file to create the
+ following file share (of course, some of the parameter values,
+ such as 'path' are arbitrary and should be replaced with
+ appropriate values for your site):</P
><P
><PRE
CLASS="PROGRAMLISTING"
->[global]
- ; members of the ntadmin group should be able
- ; to add drivers and set printer properties
- ; root is implicitly a 'printer admin'
- printer admin = @ntadmin
-
-[print$]
- path = /usr/local/samba/printers
- guest ok = yes
- browseable = yes
- read only = yes
- ; since this share is configured as read only, then we need
- ; a 'write list'. Check the file system permissions to make
- ; sure this account can copy files to the share. If this
- ; is setup to a non-root account, then it should also exist
- ; as a 'printer admin'
- write list = @ntadmin,root</PRE
+>[print$]
+ path = /usr/local/samba/printers
+ guest ok = yes
+ browseable = yes
+ read only = yes
+ write list = ntadmin
+ </PRE
></P
><P
>The <A
@@ -225,73 +182,70 @@ TARGET="_top"
><TT
CLASS="PARAMETER"
><I
->write list</I
+> write list</I
></TT
></A
> is used to allow administrative
-level user accounts to have write access in order to update files
-on the share. See the <A
+ level user accounts to have write access in order to update files
+ on the share. See the <A
HREF="smb./conf.5.html"
TARGET="_top"
->smb.conf(5)
-man page</A
-> for more information on configuring file shares.</P
+> smb.conf(5) man page</A
+> for more information on
+ configuring file shares.</P
><P
>The requirement for <A
HREF="smb.conf.5.html#GUESTOK"
TARGET="_top"
><B
CLASS="COMMAND"
->guest
-ok = yes</B
+> guest ok = yes</B
></A
> depends upon how your
-site is configured. If users will be guaranteed to have
-an account on the Samba host, then this is a non-issue.</P
-><DIV
-CLASS="NOTE"
-><BLOCKQUOTE
-CLASS="NOTE"
+ site is configured. If users will be guaranteed to have
+ an account on the Samba host, then this is a non-issue.</P
><P
-><B
->Author's Note: </B
->The non-issue is that if all your Windows NT users are guaranteed to be
-authenticated by the Samba server (such as a domain member server and the NT
-user has already been validated by the Domain Controller in
-order to logon to the Windows NT console), then guest access
-is not necessary. Of course, in a workgroup environment where
-you just want to be able to print without worrying about
-silly accounts and security, then configure the share for
-guest access. You'll probably want to add <A
+><I
+CLASS="EMPHASIS"
+>author's note: </I
+>The non-issue is that
+ if all your Windows NT users are guarenteed to be authenticated
+ by the Samba server (such as a domain member server and the NT
+ user has already been validated by the Domain Controller in
+ order to logon to the Windows NT console), then guest access
+ is not necessary. Of course, in a workgroup environment where
+ you just want to be able to print without worrying about
+ silly accounts and security, then configure the share for
+ guest access. You'll probably want to add <A
HREF="smb.conf.5.html#MAPTOGUEST"
TARGET="_top"
><B
CLASS="COMMAND"
->map to guest = Bad User</B
+>map to guest = Bad User
+ </B
></A
> in the [global] section as well. Make sure
-you understand what this parameter does before using it
-though. --jerry</P
-></BLOCKQUOTE
-></DIV
+ you understand what this parameter does before using it
+ though. --jerry]</P
><P
>In order for a Windows NT print server to support
-the downloading of driver files by multiple client architectures,
-it must create subdirectories within the [print$] service
-which correspond to each of the supported client architectures.
-Samba follows this model as well.</P
+ the downloading of driver files by multiple client architectures,
+ it must create subdirectories within the [print$] service
+ which correspond to each of the supported client architectures.
+ Samba follows this model as well.</P
><P
>Next create the directory tree below the [print$] share
-for each architecture you wish to support.</P
+ for each architecture you wish to support.</P
><P
><PRE
CLASS="PROGRAMLISTING"
->[print$]-----
- |-W32X86 ; "Windows NT x86"
- |-WIN40 ; "Windows 95/98"
- |-W32ALPHA ; "Windows NT Alpha_AXP"
- |-W32MIPS ; "Windows NT R4000"
- |-W32PPC ; "Windows NT PowerPC"</PRE
+> [print$]-----
+ |-W32X86 ; "Windows NT x86"
+ |-WIN40 ; "Windows 95/98"
+ |-W32ALPHA ; "Windows NT Alpha_AXP"
+ |-W32MIPS ; "Windows NT R4000"
+ |-W32PPC ; "Windows NT PowerPC"
+ </PRE
></P
><DIV
CLASS="WARNING"
@@ -305,34 +259,38 @@ WIDTH="100%"
><TD
ALIGN="CENTER"
><B
->ATTENTION! REQUIRED PERMISSIONS</B
+>Warning</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
+><I
+CLASS="EMPHASIS"
+>ATTENTION! REQUIRED PERMISSIONS</I
+></P
+><P
>In order to currently add a new driver to you Samba host,
-one of two conditions must hold true:</P
+ one of two conditions must hold true:</P
><P
></P
><UL
><LI
><P
>The account used to connect to the Samba host
- must have a uid of 0 (i.e. a root account)</P
+ must have a uid of 0 (i.e. a root account)</P
></LI
><LI
><P
>The account used to connect to the Samba host
- must be a member of the <A
-HREF="smb.conf.5.html#PRINTERADMIN"
+ must be a member of the <A
+HREF="smb.conf.5.html"
TARGET="_top"
><TT
CLASS="PARAMETER"
><I
->printer
- admin</I
+> printer admin</I
></TT
></A
> list.</P
@@ -340,128 +298,97 @@ CLASS="PARAMETER"
></UL
><P
>Of course, the connected account must still possess access
-to add files to the subdirectories beneath [print$]. Remember
-that all file shares are set to 'read only' by default.</P
+ to add files to the subdirectories beneath [print$].</P
></TD
></TR
></TABLE
></DIV
><P
>Once you have created the required [print$] service and
-associated subdirectories, simply log onto the Samba server using
-a root (or <TT
+ associated subdirectories, simply log onto the Samba server using
+ a root (or <TT
CLASS="PARAMETER"
><I
>printer admin</I
></TT
>) account
-from a Windows NT 4.0 client. Navigate to the "Printers" folder
-on the Samba server. You should see an initial listing of printers
-that matches the printer shares defined on your Samba host.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN71"
->Setting Drivers for Existing Printers</A
-></H2
+ from a Windows NT 4.0 client. Navigate to the "Printers" folder
+ on the Samba server. You should see an initial listing of printers
+ that matches the printer shares defined on your Samba host.</P
><P
>The initial listing of printers in the Samba host's
-Printers folder will have no real printer driver assigned
-to them. By default, in Samba 2.2.0 this driver name was set to
-<I
-CLASS="EMPHASIS"
->NO PRINTER DRIVER AVAILABLE FOR THIS PRINTER</I
->.
-Later versions changed this to a NULL string to allow the use
-tof the local Add Printer Wizard on NT/2000 clients.
-Attempting to view the printer properties for a printer
-which has this default driver assigned will result in
-the error message:</P
-><P
-><I
-CLASS="EMPHASIS"
->Device settings cannot be displayed. The driver
-for the specified printer is not installed, only spooler
-properties will be displayed. Do you want to install the
-driver now?</I
-></P
-><P
->Click "No" in the error dialog and you will be presented with
-the printer properties window. The way assign a driver to a
-printer is to either</P
+ Printers folder will have no printer driver assigned to them.
+ The way assign a driver to a printer is to view the Properties
+ of the printer and either</P
><P
></P
><UL
><LI
><P
>Use the "New Driver..." button to install
- a new printer driver, or</P
+ a new printer driver, or</P
></LI
><LI
><P
>Select a driver from the popup list of
- installed drivers. Initially this list will be empty.</P
+ installed drivers. Initially this list will be empty.</P
></LI
></UL
><P
>If you wish to install printer drivers for client
-operating systems other than "Windows NT x86", you will need
-to use the "Sharing" tab of the printer properties dialog.</P
+ operating systems other than "Windows NT x86", you will need
+ to use the "Sharing" tab of the printer properties dialog.</P
><P
>Assuming you have connected with a root account, you
-will also be able modify other printer properties such as
-ACLs and device settings using this dialog box.</P
+ will also be able modify other printer properties such as
+ ACLs and device settings using this dialog box.</P
><P
>A few closing comments for this section, it is possible
-on a Windows NT print server to have printers
-listed in the Printers folder which are not shared. Samba does
-not make this distinction. By definition, the only printers of
-which Samba is aware are those which are specified as shares in
-<TT
+ on a Windows NT print server to have printers
+ listed in the Printers folder which are not shared. Samba does
+ not make this distinction. By definition, the only printers of
+ which Samba is aware are those which are specified as shares in
+ <TT
CLASS="FILENAME"
>smb.conf</TT
>.</P
><P
>Another interesting side note is that Windows NT clients do
-not use the SMB printer share, but rather can print directly
-to any printer on another Windows NT host using MS-RPC. This
-of course assumes that the printing client has the necessary
-privileges on the remote host serving the printer. The default
-permissions assigned by Windows NT to a printer gives the "Print"
-permissions to the "Everyone" well-known group.</P
-></DIV
+ not use the SMB printer share, but rather can print directly
+ to any printer on another Windows NT host using MS-RPC. This
+ of course assumes that the printing client has the necessary
+ privileges on the remote host serving the printer. The default
+ permissions assigned by Windows NT to a printer gives the "Print"
+ permissions to the "Everyone" well-known group.</P
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN88"
+NAME="AEN74"
>Support a large number of printers</A
></H2
><P
>One issue that has arisen during the development
-phase of Samba 2.2 is the need to support driver downloads for
-100's of printers. Using the Windows NT APW is somewhat
-awkward to say the list. If more than one printer are using the
-same driver, the <A
+ phase of Samba 2.2 is the need to support driver downloads for
+ 100's of printers. Using the Windows NT APW is somewhat
+ awkward to say the list. If more than one printer are using the
+ same driver, the <A
HREF="rpcclient.1.html"
TARGET="_top"
><B
CLASS="COMMAND"
>rpcclient's
-setdriver command</B
+ setdriver command</B
></A
> can be used to set the driver
-associated with an installed driver. The following is example
-of how this could be accomplished:</P
+ associated with an installed driver. The following is example
+ of how this could be accomplished:</P
><P
><PRE
CLASS="PROGRAMLISTING"
>
-<TT
+ <TT
CLASS="PROMPT"
>$ </TT
>rpcclient pogo -U root%secret -c "enumdrivers"
@@ -469,185 +396,44 @@ Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
[Windows NT x86]
Printer Driver Info 1:
- Driver Name: [HP LaserJet 4000 Series PS]
+ Driver Name: [HP LaserJet 4000 Series PS]
Printer Driver Info 1:
- Driver Name: [HP LaserJet 2100 Series PS]
+ Driver Name: [HP LaserJet 2100 Series PS]
Printer Driver Info 1:
- Driver Name: [HP LaserJet 4Si/4SiMX PS]
+ Driver Name: [HP LaserJet 4Si/4SiMX PS]
-<TT
+ <TT
CLASS="PROMPT"
>$ </TT
>rpcclient pogo -U root%secret -c "enumprinters"
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
- flags:[0x800000]
- name:[\\POGO\hp-print]
- description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
- comment:[]
+ flags:[0x800000]
+ name:[\\POGO\hp-print]
+ description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
+ comment:[]
-<TT
+ <TT
CLASS="PROMPT"
>$ </TT
->rpcclient pogo -U root%secret \
-<TT
+>rpcclient pogo -U root%bleaK.er \
+ <TT
CLASS="PROMPT"
>&gt; </TT
> -c "setdriver hp-print \"HP LaserJet 4000 Series PS\""
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
-Successfully set hp-print to driver HP LaserJet 4000 Series PS.</PRE
+Succesfully set hp-print to driver HP LaserJet 4000 Series PS.
+ </PRE
></P
></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN99"
->Adding New Printers via the Windows NT APW</A
-></H2
-><P
->By default, Samba offers all printer shares defined in <TT
-CLASS="FILENAME"
->smb.conf</TT
->
-in the "Printers..." folder. Also existing in this folder is the Windows NT
-Add Printer Wizard icon. The APW will be show only if</P
-><P
-></P
-><UL
-><LI
-><P
->The connected user is able to successfully
- execute an OpenPrinterEx(\\server) with administrative
- privileges (i.e. root or <TT
-CLASS="PARAMETER"
-><I
->printer admin</I
-></TT
->).
- </P
-></LI
-><LI
-><P
-><A
-HREF="smb.conf.5.html#SHOWADDPRINTERWIZARD"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
->show
- add printer wizard = yes</I
-></TT
-></A
-> (the default).
- </P
-></LI
-></UL
-><P
->In order to be able to use the APW to successfully add a printer to a Samba
-server, the <A
-HREF="smb.conf.5.html#ADDPRINTERCOMMAND"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
->add
-printer command</I
-></TT
-></A
-> must have a defined value. The program
-hook must successfully add the printer to the system (i.e.
-<TT
-CLASS="FILENAME"
->/etc/printcap</TT
-> or appropriate files) and
-<TT
-CLASS="FILENAME"
->smb.conf</TT
-> if necessary.</P
-><P
->When using the APW from a client, if the named printer share does
-not exist, <B
-CLASS="COMMAND"
->smbd</B
-> will execute the <TT
-CLASS="PARAMETER"
-><I
->add printer
-command</I
-></TT
-> and reparse to the <TT
-CLASS="FILENAME"
->smb.conf</TT
->
-to attempt to locate the new printer share. If the share is still not defined,
-an error of "Access Denied" is returned to the client. Note that the
-<TT
-CLASS="PARAMETER"
-><I
->add printer program</I
-></TT
-> is executed under the context
-of the connected user, not necessarily a root account.</P
-><P
->There is a complementing <A
-HREF="smb.conf.5.html#DELETEPRINTERCOMMAND"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
->delete
-printer command</I
-></TT
-></A
-> for removing entries from the "Printers..."
-folder.</P
-></DIV
-><DIV
-CLASS="SECT2"
-><HR><H2
-CLASS="SECT2"
-><A
-NAME="AEN124"
->Samba and Printer Ports</A
-></H2
-><P
->Windows NT/2000 print servers associate a port with each printer. These normally
-take the form of LPT1:, COM1:, FILE:, etc... Samba must also support the
-concept of ports associated with a printer. By default, only one printer port,
-named "Samba Printer Port", exists on a system. Samba does not really a port in
-order to print, rather it is a requirement of Windows clients. </P
-><P
->Note that Samba does not support the concept of "Printer Pooling" internally
-either. This is when a logical printer is assigned to multiple ports as
-a form of load balancing or fail over.</P
-><P
->If you require that multiple ports be defined for some reason,
-<TT
-CLASS="FILENAME"
->smb.conf</TT
-> possesses a <A
-HREF="smb.conf.5.html#ENUMPORTSCOMMAND"
-TARGET="_top"
-><TT
-CLASS="PARAMETER"
-><I
->enumports
-command</I
-></TT
-></A
-> which can be used to define an external program
-that generates a listing of ports on a system.</P
-></DIV
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN132"
+NAME="AEN85"
>The Imprints Toolset</A
></H1
><P
@@ -665,7 +451,7 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN136"
+NAME="AEN89"
>What is Imprints?</A
></H2
><P
@@ -697,7 +483,7 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN146"
+NAME="AEN99"
>Creating Printer Driver Packages</A
></H2
><P
@@ -713,7 +499,7 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN149"
+NAME="AEN102"
>The Imprints server</A
></H2
><P
@@ -734,7 +520,7 @@ CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
-NAME="AEN153"
+NAME="AEN106"
>The Installation Client</A
></H2
><P
@@ -779,23 +565,24 @@ CLASS="COMMAND"
><PRE
CLASS="PROGRAMLISTING"
>
-foreach (supported architecture for a given driver)
-{
- 1. rpcclient: Get the appropriate upload directory
- on the remote server
- 2. smbclient: Upload the driver files
- 3. rpcclient: Issues an AddPrinterDriver() MS-RPC
-}
+ foreach (supported architecture for a given driver)
+ {
+ 1. rpcclient: Get the appropriate upload directory
+ on the remote server
+ 2. smbclient: Upload the driver files
+ 3. rpcclient: Issues an AddPrinterDriver() MS-RPC
+ }
-4. rpcclient: Issue an AddPrinterEx() MS-RPC to actually
- create the printer</PRE
+ 4. rpcclient: Issue an AddPrinterEx() MS-RPC to actually
+ create the printer
+ </PRE
></P
><P
>One of the problems encountered when implementing
the Imprints tool set was the name space issues between
various supported client architectures. For example, Windows
NT includes a driver named "Apple LaserWriter II NTX v51.8"
- and Windows 95 calls its version of this driver "Apple
+ and Windows 95 callsits version of this driver "Apple
LaserWriter II NTX"</P
><P
>The problem is how to know what client drivers have
@@ -811,7 +598,7 @@ CLASS="FILENAME"
></P
><P
>will reveal that Windows NT always uses the NT driver
- name. This is ok as Windows NT always requires that at least
+ name. The is ok as Windows NT always requires that at least
the Windows NT version of the printer driver is present.
However, Samba does not have the requirement internally.
Therefore, how can you use the NT driver name if is has not
@@ -828,61 +615,18 @@ CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
-NAME="AEN175"
+NAME="AEN128"
><A
NAME="MIGRATION"
></A
->Migration to from Samba 2.0.x to 2.2.x</A
+>Migration to from Samba 2.0.x to
+ 2.2.x</A
></H1
><P
->Given that printer driver management has changed (we hope improved) in
-2.2 over prior releases, migration from an existing setup to 2.2 can
-follow several paths.</P
-><P
->Windows clients have a tendency to remember things for quite a while.
-For example, if a Windows NT client has attached to a Samba 2.0 server,
-it will remember the server as a LanMan printer server. Upgrading
-the Samba host to 2.2 makes support for MSRPC printing possible, but
-the NT client will still remember the previous setting.</P
-><P
->In order to give an NT client printing "amnesia" (only necessary if you
-want to use the newer MSRPC printing functionality in Samba), delete
-the registry keys associated with the print server contained in
-<TT
-CLASS="CONSTANT"
->[HKLM\SYSTEM\CurrentControlSet\Control\Print]</TT
->. The
-spooler service on the client should be stopped prior to doing this:</P
-><P
-><TT
-CLASS="PROMPT"
->C:\WINNT\ &#62;</TT
-> <TT
-CLASS="USERINPUT"
-><B
->net stop spooler</B
-></TT
-></P
-><P
-><I
-CLASS="EMPHASIS"
->All the normal disclaimers about editing the registry go
-here.</I
-> Be careful, and know what you are doing.</P
-><P
->The spooler service should be restarted after you have finished
-removing the appropriate registry entries by replacing the
-<B
-CLASS="COMMAND"
->stop</B
-> command above with <B
-CLASS="COMMAND"
->start</B
->.</P
-><P
->Windows 9x clients will continue to use LanMan printing calls
-with a 2.2 Samba server so there is no need to perform any of these
-modifications on non-NT clients.</P
+>Given that printer driver management has changed
+ (we hope improved :) ) in 2.2.0 over prior releases,
+ migration from an existing setup to 2.2.0 can follow
+ several paths.</P
><DIV
CLASS="WARNING"
><P
@@ -895,15 +639,16 @@ WIDTH="100%"
><TD
ALIGN="CENTER"
><B
->Achtung!</B
+>Warning</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
->The following smb.conf parameters are considered to be depreciated and will
-be removed soon. Do not use them in new installations</P
+>The following smb.conf parameters are considered to be
+ depreciated and will be removed soon. Do not use them
+ in new installations</P
><P
></P
><UL
@@ -915,7 +660,7 @@ CLASS="PARAMETER"
>printer driver file (G)</I
></TT
>
- </P
+ </P
></LI
><LI
><P
@@ -925,7 +670,7 @@ CLASS="PARAMETER"
>printer driver (S)</I
></TT
>
- </P
+ </P
></LI
><LI
><P
@@ -935,7 +680,7 @@ CLASS="PARAMETER"
>printer driver location (S)</I
></TT
>
- </P
+ </P
></LI
></UL
></TD
@@ -950,54 +695,46 @@ CLASS="PARAMETER"
><LI
><P
>If you do not desire the new Windows NT
- print driver support, nothing needs to be done.
- All existing parameters work the same.</P
+ print driver support, nothing needs to be done.
+ All existing parameters work the same.</P
></LI
><LI
><P
>If you want to take advantage of NT printer
- driver support but do not want to migrate the
- 9x drivers to the new setup, the leave the existing
- printers.def file. When smbd attempts to locate a
- 9x driver for the printer in the TDB and fails it
- will drop down to using the printers.def (and all
- associated parameters). The <B
+ driver support but do not want to migrate the
+ 9x drivers to the new setup, the leave the existing
+ printers.def file. When smbd attempts to locate a
+ 9x driver for the printer in the TDB and fails it
+ will drop down to using the printers.def (and all
+ associated parameters). The <B
CLASS="COMMAND"
>make_printerdef</B
>
- tool will also remain for backwards compatibility but will
- be moved to the "this tool is the old way of doing it"
- pile.</P
+ tool will also remain for backwards compatibility but will
+ be moved to the "this tool is the old way of doing it"
+ pile.</P
></LI
><LI
><P
>If you install a Windows 9x driver for a printer
- on your Samba host (in the printing TDB), this information will
- take precedence and the three old printing parameters
- will be ignored (including print driver location).</P
+ on your Samba host (in the printing TDB), this information will
+ take precedence and the three old printing parameters
+ will be ignored (including print driver location).</P
></LI
><LI
><P
>If you want to migrate an existing <TT
CLASS="FILENAME"
->printers.def</TT
->
- file into the new setup, the current only solution is to use the Windows
- NT APW to install the NT drivers and the 9x drivers. This can be scripted
- using <B
-CLASS="COMMAND"
->smbclient</B
-> and <B
-CLASS="COMMAND"
->rpcclient</B
->. See the
- Imprints installation client at <A
+> printers.def</TT
+> file into the new setup, the current only
+ solution is to use the Windows NT APW to install the NT drivers
+ and the 9x drivers. This can be scripted using smbclient and
+ rpcclient. See the <A
HREF="http://imprints.sourceforge.net/"
TARGET="_top"
->http://imprints.sourceforge.net/</A
->
- for an example.
- </P
+> Imprints insrallation client</A
+> for an example.
+ </P
></LI
></UL
></DIV
diff --git a/docs/htmldocs/rpcclient.1.html b/docs/htmldocs/rpcclient.1.html
index 53a0ea98dd2..0242f7b8270 100644
--- a/docs/htmldocs/rpcclient.1.html
+++ b/docs/htmldocs/rpcclient.1.html
@@ -37,7 +37,7 @@ NAME="AEN8"
><B
CLASS="COMMAND"
>rpcclient</B
-> {server} [-A authfile] [-c &#60;command string&#62;] [-d debuglevel] [-h] [-l logfile] [-N] [-s &#60;smb config file&#62;] [-U username[%password]] [-W workgroup] [-N]</P
+> {server} [-A authfile] [-c &lt;command string&gt;] [-d debuglevel] [-h] [-l logfile] [-N] [-s &lt;smb config file&gt;] [-U username[%password]] [-W workgroup] [-N]</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -104,21 +104,12 @@ CLASS="FILENAME"
password used in the connection. The format of the file is
</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
-> username = &#60;value&#62;
- password = &#60;value&#62;
- domain = &#60;value&#62;
+> username = &lt;value&gt;
+ password = &lt;value&gt;
+ domain = &lt;value&gt;
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>Make certain that the permissions on the file restrict
@@ -137,10 +128,7 @@ CLASS="PROGRAMLISTING"
><P
>set the debuglevel. Debug level 0 is the lowest
and 100 being the highest. This should be set to 100 if you are
- planning on submitting a bug report to the Samba team (see <TT
-CLASS="FILENAME"
->BUGS.txt</TT
->).
+ planning on submitting a bug report to the Samba team (see BUGS.txt).
</P
></DD
><DT
@@ -154,12 +142,8 @@ CLASS="FILENAME"
>-l logbasename</DT
><DD
><P
->File name for log/debug files. The extension
- <TT
-CLASS="CONSTANT"
->'.client'</TT
-> will be appended. The log file is never removed
- by the client.
+>File name for log/debug files. .client will be
+ appended. The log file is never removed by the client.
</P
></DD
><DT
@@ -205,7 +189,7 @@ CLASS="ENVAR"
<TT
CLASS="ENVAR"
>LOGNAME</TT
-> variable and if either exists, the
+> variable and if either exist, the
string is uppercased. If these environmental variables are not
found, the username <TT
CLASS="CONSTANT"
@@ -242,8 +226,14 @@ CLASS="COMMAND"
><DD
><P
>Set the SMB domain of the username. This
- overrides the default domain which is the domain defined in
- smb.conf. If the domain specified is the same as the server's NetBIOS name,
+ overrides the default domain which is the domain of the
+ server specified with the <TT
+CLASS="PARAMETER"
+><I
+>-S</I
+></TT
+> option.
+ If the domain specified is the same as the server's NetBIOS name,
it causes the client to log on using the server's local SAM (as
opposed to the Domain SAM). </P
></DD
@@ -253,13 +243,14 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN92"
+NAME="AEN91"
></A
><H2
>COMMANDS</H2
><P
-><EM
->LSARPC</EM
+><I
+CLASS="EMPHASIS"
+>LSARPC</I
></P
><P
></P
@@ -276,18 +267,14 @@ CLASS="COMMAND"
><B
CLASS="COMMAND"
>lookupsids</B
-> - Resolve a list
- of SIDs to usernames.
- </P
+></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>lookupnames</B
-> - Resolve s list
- of usernames to SIDs.
- </P
+></P
></LI
><LI
><P
@@ -300,8 +287,9 @@ CLASS="COMMAND"
><P
> </P
><P
-><EM
->SAMR</EM
+><I
+CLASS="EMPHASIS"
+>SAMR</I
></P
><P
></P
@@ -334,40 +322,13 @@ CLASS="COMMAND"
>querygroupmem</B
></P
></LI
-><LI
-><P
-><B
-CLASS="COMMAND"
->queryaliasmem</B
-></P
-></LI
-><LI
-><P
-><B
-CLASS="COMMAND"
->querydispinfo</B
-></P
-></LI
-><LI
-><P
-><B
-CLASS="COMMAND"
->querydominfo</B
-></P
-></LI
-><LI
-><P
-><B
-CLASS="COMMAND"
->enumdomgroups</B
-></P
-></LI
></UL
><P
> </P
><P
-><EM
->SPOOLSS</EM
+><I
+CLASS="EMPHASIS"
+>SPOOLSS</I
></P
><P
></P
@@ -376,7 +337,7 @@ CLASS="COMMAND"
><P
><B
CLASS="COMMAND"
->adddriver &#60;arch&#62; &#60;config&#62;</B
+>adddriver &lt;arch&gt; &lt;config&gt;</B
>
- Execute an AddPrinterDriver() RPC to install the printer driver
information on the server. Note that the driver files should
@@ -403,12 +364,6 @@ CLASS="PARAMETER"
> parameter is defined as
follows: </P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
> Long Printer Name:\
@@ -420,9 +375,6 @@ CLASS="PROGRAMLISTING"
Default Data Type:\
Comma Separated list of Files
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>Any empty fields should be enter as the string "NULL". </P
@@ -438,8 +390,8 @@ CLASS="PROGRAMLISTING"
><P
><B
CLASS="COMMAND"
->addprinter &#60;printername&#62;
- &#60;sharename&#62; &#60;drivername&#62; &#60;port&#62;</B
+>addprinter &lt;printername&gt;
+ &lt;sharename&gt; &lt;drivername&gt; &lt;port&gt;</B
>
- Add a printer on the remote server. This printer
will be automatically shared. Be aware that the printer driver
@@ -462,17 +414,6 @@ CLASS="COMMAND"
><P
><B
CLASS="COMMAND"
->deldriver</B
-> - Delete the
- specified printer driver for all architectures. This
- does not delete the actual driver files from the server,
- only the entry from the server's list of drivers.
- </P
-></LI
-><LI
-><P
-><B
-CLASS="COMMAND"
>enumdata</B
> - Enumerate all
printer setting data stored on the server. On Windows NT clients,
@@ -485,7 +426,7 @@ CLASS="COMMAND"
><P
><B
CLASS="COMMAND"
->enumjobs &#60;printer&#62;</B
+>enumjobs &lt;printer&gt;</B
>
- List the jobs and status of a given printer.
This command corresponds to the MS Platform SDK EnumJobs()
@@ -527,7 +468,7 @@ CLASS="COMMAND"
><P
><B
CLASS="COMMAND"
->getdata &#60;printername&#62;</B
+>getdata &lt;printername&gt;</B
>
- Retrieve the data for a given printer setting. See
the <B
@@ -541,7 +482,7 @@ CLASS="COMMAND"
><P
><B
CLASS="COMMAND"
->getdriver &#60;printername&#62;</B
+>getdriver &lt;printername&gt;</B
>
- Retrieve the printer driver information (such as driver file,
config file, dependent files, etc...) for
@@ -553,7 +494,7 @@ CLASS="COMMAND"
><P
><B
CLASS="COMMAND"
->getdriverdir &#60;arch&#62;</B
+>getdriverdir &lt;arch&gt;</B
>
- Execute a GetPrinterDriverDirectory()
RPC to retreive the SMB share name and subdirectory for
@@ -571,7 +512,7 @@ CLASS="PARAMETER"
><P
><B
CLASS="COMMAND"
->getprinter &#60;printername&#62;</B
+>getprinter &lt;printername&gt;</B
>
- Retrieve the current printer information. This command
corresponds to the GetPrinter() MS Platform SDK function.
@@ -581,7 +522,7 @@ CLASS="COMMAND"
><P
><B
CLASS="COMMAND"
->openprinter &#60;printername&#62;</B
+>openprinter &lt;printername&gt;</B
>
- Execute an OpenPrinterEx() and ClosePrinter() RPC
against a given printer. </P
@@ -590,7 +531,7 @@ CLASS="COMMAND"
><P
><B
CLASS="COMMAND"
->setdriver &#60;printername&#62; &#60;drivername&#62;</B
+>setdriver &lt;printername&gt; &lt;drivername&gt;</B
>
- Execute a SetPrinter() command to update the printer driver associated
with an installed printer. The printer driver must already be correctly
@@ -608,8 +549,9 @@ CLASS="COMMAND"
></LI
></UL
><P
-><EM
->GENERAL OPTIONS</EM
+><I
+CLASS="EMPHASIS"
+>GENERAL OPTIONS</I
></P
><P
></P
@@ -647,7 +589,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN212"
+NAME="AEN196"
></A
><H2
>BUGS</H2
@@ -662,14 +604,15 @@ CLASS="COMMAND"
><P
>From Luke Leighton's original rpcclient man page:</P
><P
-><EM
->"WARNING!</EM
+><I
+CLASS="EMPHASIS"
+>"WARNING!</I
> The MSRPC over SMB code has
been developed from examining Network traces. No documentation is
available from the original creators (Microsoft) on how MSRPC over
SMB works, or how the individual MSRPC services work. Microsoft's
implementation of these services has been demonstrated (and reported)
- to be... a bit flaky in places. </P
+ to be... a bit flakey in places. </P
><P
>The development of Samba's implementation is also a bit rough,
and as more of the services are understood, it can even result in
@@ -688,7 +631,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN222"
+NAME="AEN206"
></A
><H2
>VERSION</H2
@@ -699,7 +642,7 @@ NAME="AEN222"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN225"
+NAME="AEN209"
></A
><H2
>AUTHOR</H2
@@ -710,7 +653,7 @@ NAME="AEN225"
to the way the Linux kernel is developed.</P
><P
>The original rpcclient man page was written by Matthew
- Geddes, Luke Kenneth Casson Leighton, and rewritten by Gerald Carter.
+ Geddes, Luke Kenneth Casson, and rewriten by Gerald Carter.
The conversion to DocBook for Samba 2.2 was done by Gerald
Carter.</P
></DIV
diff --git a/docs/htmldocs/samba-pdc-faq.html b/docs/htmldocs/samba-pdc-faq.html
index d9c204bf1b5..058a5d5f518 100644
--- a/docs/htmldocs/samba-pdc-faq.html
+++ b/docs/htmldocs/samba-pdc-faq.html
@@ -45,9 +45,9 @@ NAME="AEN12"
></H1
><P
> This is the FAQ for Samba 2.2 as an NTDomain controller.
- This document is derived from the original FAQ that was built and
+ This document is derived from the origional FAQ that was built and
maintained by Gerald Carter from the early days of Samba NTDomain development
- up until recently. It is now being updated as significant changes are
+ up until recently. It is now being updated as significent changes are
made to 2.2.0.
</P
><P
@@ -165,7 +165,7 @@ HREF="#AEN103"
><A
HREF="#AEN110"
>"The machine account for this computer either does not
-exist or is not accessible."</A
+exist or is not accessable."</A
></DT
><DT
><A
@@ -256,7 +256,7 @@ HREF="#AEN180"
><DT
><A
HREF="#AEN182"
->What are 'Policies' ?</A
+>What are 'Policies' ?.</A
></DT
><DT
><A
@@ -314,12 +314,12 @@ HREF="#AEN248"
><A
HREF="#AEN250"
>What editor can I use in DOS/Windows that won't
-mess with my unix EOF ?</A
+mess with my unix EOF</A
></DT
><DT
><A
HREF="#AEN263"
->How do I get 'User Manager' and 'Server Manager' ?</A
+>How do I get 'User Manager' and 'Server Manager'</A
></DT
><DT
><A
@@ -334,7 +334,7 @@ HREF="#AEN282"
><DT
><A
HREF="#AEN286"
->How do I get my samba server to become a member ( not PDC ) of an NT domain ?</A
+>How do I get my samba server to become a member ( not PDC ) of an NT domain?</A
></DT
></DL
></DD
@@ -358,13 +358,13 @@ HREF="#AEN292"
><A
HREF="#AEN294"
>What are some diagnostics tools I can use to debug the domain logon process and where can I
- find them ?</A
+ find them?</A
></DT
><DT
><A
HREF="#AEN309"
>How do I install 'Network Monitor' on an NT Workstation
-or a Windows 9x box ?</A
+or a Windows 9x box?</A
></DT
></DL
></DD
@@ -419,13 +419,13 @@ CLASS="FILENAME"
> dialog
will let you reset the smbpasswd. That is you don't need to do it from
the unix box. However, at the present, you do need to have root as an
- administrator and use the root username and password.</P
+ administrator and use the root user name and password.</P
><P
><B
CLASS="COMMAND"
>Policies</B
> do work on a W2K machine. MS says that recent
- builds of W2K don't observe an NT policy but it appears it does in 'legacy'
+ builds of W2K dont observe an NT policy but it appears it does in 'legacy'
mode.</P
></DIV
><DIV
@@ -437,7 +437,7 @@ NAME="AEN27"
>Introduction</A
></H1
><P
-> This FAQ was originally compiled by Jerry Carter (gc) chiefly dealing
+> This FAQ was origionally compiled by Jerry Carter (gc) chiefly dealing
with the 'old HEAD' version of Samba and its NTDomain facilities. It is
being rewritten by David Bannon (drb) so that it addresses more
accurately the Samba 2.2.x release.
@@ -454,7 +454,7 @@ TARGET="_top"
</P
><P
>Hopefully, as we all become familiar with the Samba 2.2 as a
- PDC this document will become much more useful.</P
+ PDC this document will become much more usefull.</P
></DIV
></DIV
><DIV
@@ -532,7 +532,7 @@ NAME="AEN37"
></LI
></UL
><P
-> These things are not expected to work in the foreseeable future:
+> These things are note expected to work in the forseeable future:
</P
><P
></P
@@ -558,7 +558,7 @@ controlled domain?</A
></H2
><P
> The 2.2 release branch of Samba supports Windows 2000 domain
- clients in legacy mode, i.e. as if the PDC is a NTServer, not a
+ clients in legacy mode, ie as if the PDC is a NTServer, not a
W2K server.
</P
></DIV
@@ -572,7 +572,7 @@ NAME="AEN65"
>CVS</A
></H1
><P
-> CVS is a program (publicly available) that the Samba developers
+> CVS is a programme (publically available) that the Samba developers
use to maintain the central source code. Non developers can get
access to the source in a read only capacity. Many flavours of unix
now arrive with cvs installed.</P
@@ -606,7 +606,7 @@ CLASS="VARIABLELIST"
><P
>Samba 3.0 ? This code boasts all the main
development work in Samba. Due to its developmental
- nature, it's not really suitable for production work.
+ nature, its not really suitable for production work.
</P
></DD
><DT
@@ -693,7 +693,7 @@ controlled Domain?</A
HREF="samba-pdc-howto.html"
TARGET="_top"
>HOWTO</A
-> accessible from the samba web
+> accessable from the samba web
site under 'Documentation'. Read it.
</P
></DIV
@@ -734,11 +734,11 @@ CLASS="SECT2"
><A
NAME="AEN110"
>"The machine account for this computer either does not
-exist or is not accessible."</A
+exist or is not accessable."</A
></H2
><P
> When I try to join the domain I get the message "The machine account
- for this computer either does not exist or is not accessible". Whats
+ for this computer either does not exist or is not accessable". Whats
wrong ?
</P
><P
@@ -802,7 +802,7 @@ CLASS="COMMAND"
path to the <B
CLASS="COMMAND"
>smbpasswd</B
-> program, do this :
+> programme, do this :
</P
><P
> <B
@@ -812,7 +812,7 @@ CLASS="COMMAND"
</P
><P
> The entry will be created with a well known password, so any machine that
- says it's doppy could join the domain as long as it gets in first. So
+ says its doppy could join the domain as long as it gets in first. So
don't create the accounts any earlier than you need them.
</P
></DIV
@@ -854,7 +854,7 @@ when creating a machine account.</A
><P
> This happens if you try to create a machine account from the
machine itself and use a user name that does not work (for whatever
- reason) and then try another (possibly valid) username.
+ reason) and then try another (possibly valid) user name.
Exit out of the network applet to close the initial connection
and try again.
</P
@@ -891,7 +891,7 @@ NAME="AEN143"
><P
>I joined the domain successfully but after upgrading
to a newer version of the Samba code I get the message, "The system
- can not log you on (C000019B), Please try again or consult your
+ can not log you on (C000019B), Please try a gain or consult your
system administrator" when attempting to logon.
</P
><P
@@ -1029,14 +1029,14 @@ HREF="#AEN278"
>
</P
><P
-> Make sure that the "logon path" is writable by the user and make sure
+> Make sure that the "logon path" is writeable by the user and make sure
that the connection to the logon path location is by the current user.
- Sometimes Windows clients do not drop the connection immediately upon
+ Sometimes Windows client do not drop the connection immediately upon
logoff.
</P
><P
> Some people have reported that the logon path location should
- also be browseable. I (GC) have yet to empirically verify this,
+ also be browseable. I (GC) have yet to emperically verify this,
but you can try.</P
></DIV
></DIV
@@ -1054,13 +1054,13 @@ CLASS="SECT2"
CLASS="SECT2"
><A
NAME="AEN182"
->What are 'Policies' ?</A
+>What are 'Policies' ?.</A
></H2
><P
> When a user logs onto the domain via a client machine, the PDC
sends the client machine a list of things contained in the
'policy' (if it exists). This list may do things like suppress
- a splash screen, format the dates the way you like them or perhaps
+ a splach screen, format the dates the way you like them or perhaps
remove locally stored profiles.
</P
><P
@@ -1070,7 +1070,7 @@ CLASS="FILENAME"
>ntconfig.pol</TT
> and located in the [netlogon]
share. The file is created with a policy editor and must be readable
- by anyone and writable by only root. See <A
+ by anyone and writeable by only root. See <A
HREF="#AEN203"
> below</A
> for how to get a suitable editor.
@@ -1102,7 +1102,7 @@ CLASS="PROGRAMLISTING"
></P
><P
> A policy file must be in the [netlogon] share and must be
- readable by everyone and writable by only root. The file
+ readable by everyone and writeable by only root. The file
must be created by an NTServer <A
HREF="#AEN203"
>Policy
@@ -1170,7 +1170,7 @@ CLASS="EMPHASIS"
>.
Further, although the Windows 95
Policy Editor can be installed on an NT Workstation/Server, it will not
- work with NT policies because of the registry keys that are set by the policy templates.
+ work with NT policies because the registry key that are set by the policy templates.
However, the files from the NT Server will run happily enough on an NTws.
You need <TT
CLASS="FILENAME"
@@ -1192,7 +1192,7 @@ CLASS="FILENAME"
<B
CLASS="COMMAND"
>servicepackname /x</B
->, i.e. that's <B
+>, ie thats <B
CLASS="COMMAND"
>Nt4sp6ai.exe
/x</B
@@ -1201,7 +1201,7 @@ CLASS="COMMAND"
>poledt.exe</B
> and the
associated template files (*.adm) should
- be extracted as well. It is also possible to download the policy template
+ be extracted as well. It is also possible to downloaded the policy template
files for Office97 and get a copy of the policy editor. Another possible
location is with the Zero Administration Kit available for download from Microsoft.
</P
@@ -1261,7 +1261,7 @@ CLASS="FILENAME"
CLASS="FILENAME"
>/etc/shadow</TT
>).
- In lots of situations that's OK, for example :
+ In lots of situations thats OK, for example :
</P
><P
></P
@@ -1278,10 +1278,10 @@ CLASS="FILENAME"
></LI
></UL
><P
-> But sometimes you really do need to maintain two separate password
+> But sometimes you really do need to maintain two seperate password
databases and there are good reasons to keep then in sync. Trying
to explain to users that they need to change their passwords in two
- separate places or use two separate passwords is not fun.
+ seperate places or use two seperate passwords is not fun.
</P
><P
> However do understand that setting up password sync is not without
@@ -1358,11 +1358,11 @@ CLASS="SECT2"
><A
NAME="AEN250"
>What editor can I use in DOS/Windows that won't
-mess with my unix EOF ?</A
+mess with my unix EOF</A
></H2
><P
>There are a number of Windows or DOS based editors that will
- understand, and leave intact, the unix eof (as opposed to a DOS CR/LF).
+ understand, and leave intact, the unix eof (as opposed to a DOS CL/LF).
List members suggested :
</P
><P
@@ -1390,7 +1390,7 @@ TARGET="_top"
HREF="http://www.lancs.ac.uk/people/cpaap/pfe/"
TARGET="_top"
> www.lancs.ac.uk/people/cpaap/pfe/</A
-> but it's no longer being developed...</P
+> but its no longer being developed...</P
></LI
></UL
></DIV
@@ -1400,7 +1400,7 @@ CLASS="SECT2"
CLASS="SECT2"
><A
NAME="AEN263"
->How do I get 'User Manager' and 'Server Manager' ?</A
+>How do I get 'User Manager' and 'Server Manager'</A
></H2
><P
> Since I don't need to buy an NT Server CD now, how do I get
@@ -1409,7 +1409,7 @@ NAME="AEN263"
><P
> Microsoft distributes a version of
these tools called nexus for installation on Windows 95 systems. The
- tool set includes
+ tools set includes
</P
><P
></P
@@ -1482,7 +1482,7 @@ CLASS="SECT2"
CLASS="SECT2"
><A
NAME="AEN286"
->How do I get my samba server to become a member ( not PDC ) of an NT domain ?</A
+>How do I get my samba server to become a member ( not PDC ) of an NT domain?</A
></H2
><P
> Please refer to the <A
@@ -1517,11 +1517,11 @@ CLASS="SECT2"
><A
NAME="AEN294"
>What are some diagnostics tools I can use to debug the domain logon process and where can I
- find them ?</A
+ find them?</A
></H2
><P
> One of the best diagnostic tools for debugging problems is Samba itself.
- You can use the -d option for both smbd and nmbd to specify what
+ You can use the -d option for both smbd and nmbd to specifiy what
'debug level' at which to run. See the man pages on smbd, nmbd and
smb.conf for more information on debugging options. The debug
level can range from 1 (the default) to 10 (100 for debugging passwords).
@@ -1532,19 +1532,19 @@ NAME="AEN294"
CLASS="COMMAND"
>gcc -g </B
> flag. This will include debug
- information in the binaries and allow you to attach gdb to the
+ information in the binaries and allow you to attch gdb to the
running smbd / nmbd process. In order to attach gdb to an smbd
process for an NT workstation, first get the workstation to make the
- connection. Pressing Ctrl-Alt-Del and going down to the domain box
+ connection. Pressing ctrl-alt-delete and going down to the domain box
is sufficient (at least, on the first time you join the domain) to
generate a 'LsaEnumTrustedDomains'. Thereafter, the workstation
maintains an open connection, and therefore there will be an smbd
process running (assuming that you haven't set a really short smbd
- idle timeout) So, in between pressing Ctrl-Alt-Del, and actually
+ idle timeout) So, in between pressing ctrl alt delete, and actually
typing in your password, you can gdb attach and continue.
</P
><P
-> Some useful samba commands worth investigating:
+> Some usefull samba commands worth investigating:
</P
><P
></P
@@ -1563,7 +1563,7 @@ CLASS="COMMAND"
<A
HREF="http://www.tcpdump.org/"
TARGET="_top"
->http://www.tcpdump.org/</A
+>http://www.tcpdup.org/</A
>.
Ethereal, another good packet sniffer for UNIX and Win32
hosts, can be downloaded from <A
@@ -1573,11 +1573,11 @@ TARGET="_top"
>.
</P
><P
-> For tracing things on Microsoft Windows NT, Network Monitor
+> For tracing things on the Microsoft Windows NT, Network Monitor
(aka. netmon) is available on the Microsoft Developer Network CD's,
the Windows NT Server install CD and the SMS CD's. The version of
netmon that ships with SMS allows for dumping packets between any two
- computers (i.e. placing the network interface in promiscuous mode).
+ computers (ie. placing the network interface in promiscuous mode).
The version on the NT Server install CD will only allow monitoring
of network traffic directed to the local NT box and broadcasts on the
local subnet. Be aware that Ethereal can read and write netmon
@@ -1591,7 +1591,7 @@ CLASS="SECT2"
><A
NAME="AEN309"
>How do I install 'Network Monitor' on an NT Workstation
-or a Windows 9x box ?</A
+or a Windows 9x box?</A
></H2
><P
> Installing netmon on an NT workstation requires a couple
@@ -1732,13 +1732,13 @@ CLASS="EMPHASIS"
></LI
><LI
><P
-> Ignacio Coupeau has a very comprehensive look at LDAP with Samba at
+> Ignacio Coupeau has a very comprehesive look at LDAP with Samba at
<A
HREF="http://www.unav.es/cti/ldap-smb-howto.html"
TARGET="_top"
> http://www.unav.es/cti/ldap-smb-howto.html</A
>
- Be a little careful however, I suspect that it does not specifically
+ Be a little carefull however, I suspect that it does not specificly
address samba 2.2.x. The HEAD pre-2.1 may possibly be the best
stream to look at.</P
></LI
@@ -1754,7 +1754,7 @@ HREF="http://www.kneschke.de/projekte/samba_tng"
TARGET="_top"
> http://www.kneschke.de/projekte/samba_tng</A
>, but again, a
- lot of it does not apply to the mainstream Samba.</P
+ lot of it does not apply to the main stream Samba.</P
></LI
><LI
><P
@@ -1839,7 +1839,7 @@ TARGET="_top"
>http://www.samba-tng.org/</A
>
It has been requested that you don't post questions about Samba-TNG to the
- mainstream Samba lists.</P
+ main stream Samba lists.</P
><P
></P
><P
@@ -1872,18 +1872,18 @@ TARGET="_top"
> Try and make your question clear and brief, lots of long,
convoluted questions get deleted before they are completely read !
Don't post html encoded messages (if you can select colour or font
- size it's html).</P
+ size its html).</P
></LI
><LI
><P
-> If you run one of those nifty 'I'm on holidays' things when
+> If you run one of those niffy 'I'm on holidays' things when
you are away, make sure its configured to not answer mailing lists.
</P
></LI
><LI
><P
> Don't cross post. Work out which is the best list to post to
- and see what happens, i.e. don't post to both samba-ntdom and samba-technical.
+ and see what happens, ie don't post to both samba-ntdom and samba-technical.
Many people active on the lists subscribe to more
than one list and get annoyed to see the same message two or more times.
Often someone will see a message and thinking it would be better dealt
@@ -1943,7 +1943,7 @@ TARGET="_top"
></P
><P
> Please don't post messages to the list asking to be removed, you will just
- be referred to the above address (unless that process failed in some way...)
+ be refered to the above address (unless that process failed in some way...)
</P
></DIV
></DIV
diff --git a/docs/htmldocs/smb.conf.5.html b/docs/htmldocs/smb.conf.5.html
index 221f1c4cc6b..7c4ff0b3658 100644
--- a/docs/htmldocs/smb.conf.5.html
+++ b/docs/htmldocs/smb.conf.5.html
@@ -123,8 +123,9 @@ NAME="AEN28"
><P
>There are three special sections, [global],
[homes] and [printers], which are
- described under <EM
->special sections</EM
+ described under <I
+CLASS="EMPHASIS"
+>special sections</I
>. The
following notes apply to ordinary section descriptions.</P
><P
@@ -138,12 +139,14 @@ NAME="AEN28"
printable services (used by the client to access print services
on the host running the server).</P
><P
->Sections may be designated <EM
->guest</EM
+>Sections may be designated <I
+CLASS="EMPHASIS"
+>guest</I
> services,
in which case no password is required to access them. A specified
- UNIX <EM
->guest account</EM
+ UNIX <I
+CLASS="EMPHASIS"
+>guest account</I
> is used to define access
privileges in this case.</P
><P
@@ -165,12 +168,6 @@ CLASS="FILENAME"
>/home/bar</TT
>.
The share is accessed via the share name "foo":</P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="SCREEN"
> <TT
@@ -181,24 +178,16 @@ CLASS="COMPUTEROUTPUT"
</TT
>
</PRE
-></TD
-></TR
-></TABLE
><P
>The following sample section defines a printable share.
The share is readonly, but printable. That is, the only write
access permitted is via calls to open, write to and close a
- spool file. The <EM
->guest ok</EM
+ spool file. The <I
+CLASS="EMPHASIS"
+>guest ok</I
> parameter means
access will be permitted as the default guest user (specified
elsewhere):</P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="SCREEN"
> <TT
@@ -211,9 +200,6 @@ CLASS="COMPUTEROUTPUT"
</TT
>
</PRE
-></TD
-></TR
-></TABLE
></DIV
><DIV
CLASS="REFSECT1"
@@ -271,8 +257,9 @@ NAME="AEN53"
></LI
></UL
><P
->If you decide to use a <EM
->path=</EM
+>If you decide to use a <I
+CLASS="EMPHASIS"
+>path=</I
> line
in your [homes] section then you may find it useful
to use the %S macro. For example :</P
@@ -301,12 +288,6 @@ CLASS="USERINPUT"
a normal service section can specify, though some make more sense
than others. The following is a typical and suitable [homes]
section:</P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="SCREEN"
> <TT
@@ -316,23 +297,23 @@ CLASS="COMPUTEROUTPUT"
</TT
>
</PRE
-></TD
-></TR
-></TABLE
><P
>An important point is that if guest access is specified
in the [homes] section, all home directories will be
- visible to all clients <EM
->without a password</EM
+ visible to all clients <I
+CLASS="EMPHASIS"
+>without a password</I
>.
In the very unlikely event that this is actually desirable, it
- would be wise to also specify <EM
+ would be wise to also specify <I
+CLASS="EMPHASIS"
>read only
- access</EM
+ access</I
>.</P
><P
->Note that the <EM
->browseable</EM
+>Note that the <I
+CLASS="EMPHASIS"
+>browseable</I
> flag for
auto home directories will be inherited from the global browseable
flag, not the [homes] browseable flag. This is useful as
@@ -395,12 +376,6 @@ NAME="AEN78"
world-writeable spool directory with the sticky bit set on
it. A typical [printers] entry would look like
this:</P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="SCREEN"
><TT
@@ -411,21 +386,12 @@ CLASS="COMPUTEROUTPUT"
printable = yes
</TT
></PRE
-></TD
-></TR
-></TABLE
><P
>All aliases given for a printer in the printcap file
are legitimate printer names as far as the server is concerned.
If your printing subsystem doesn't work like that, you will have
to set up a pseudo-printcap. This is a file consisting of one or
more lines like this:</P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="SCREEN"
> <TT
@@ -434,9 +400,6 @@ CLASS="COMPUTEROUTPUT"
</TT
>
</PRE
-></TD
-></TR
-></TABLE
><P
>Each alias should be an acceptable printer name for
your printing subsystem. In the [global] section, specify
@@ -468,24 +431,29 @@ NAME="AEN101"
>parameters define the specific attributes of sections.</P
><P
>Some parameters are specific to the [global] section
- (e.g., <EM
->security</EM
+ (e.g., <I
+CLASS="EMPHASIS"
+>security</I
>). Some parameters are usable
- in all sections (e.g., <EM
->create mode</EM
+ in all sections (e.g., <I
+CLASS="EMPHASIS"
+>create mode</I
>). All others
are permissible only in normal sections. For the purposes of the
following descriptions the [homes] and [printers]
- sections will be considered normal. The letter <EM
->G</EM
+ sections will be considered normal. The letter <I
+CLASS="EMPHASIS"
+>G</I
>
in parentheses indicates that a parameter is specific to the
- [global] section. The letter <EM
->S</EM
+ [global] section. The letter <I
+CLASS="EMPHASIS"
+>S</I
>
indicates that a parameter can be specified in a service specific
- section. Note that all <EM
->S</EM
+ section. Note that all <I
+CLASS="EMPHASIS"
+>S</I
> parameters can also be specified in
the [global] section - in which case they will define
the default behavior for all services.</P
@@ -602,8 +570,9 @@ CLASS="VARIABLELIST"
><P
>the name of your NIS home directory server.
This is obtained from your NIS auto.map entry. If you have
- not compiled Samba with the <EM
->--with-automount</EM
+ not compiled Samba with the <I
+CLASS="EMPHASIS"
+>--with-automount</I
>
option then this value will be the same as %.</P
></DD
@@ -713,8 +682,9 @@ CLASS="VARIABLELIST"
> controls if names that have characters that
aren't of the "default" case are mangled. For example,
if this is yes then a name like "Mail" would be mangled.
- Default <EM
->no</EM
+ Default <I
+CLASS="EMPHASIS"
+>no</I
>.</P
></DD
><DT
@@ -723,8 +693,9 @@ CLASS="VARIABLELIST"
><P
>controls whether filenames are case sensitive. If
they aren't then Samba must do a filename search and match on passed
- names. Default <EM
->no</EM
+ names. Default <I
+CLASS="EMPHASIS"
+>no</I
>.</P
></DD
><DT
@@ -732,8 +703,9 @@ CLASS="VARIABLELIST"
><DD
><P
>controls what the default case is for new
- filenames. Default <EM
->lower</EM
+ filenames. Default <I
+CLASS="EMPHASIS"
+>lower</I
>.</P
></DD
><DT
@@ -742,8 +714,9 @@ CLASS="VARIABLELIST"
><P
>controls if new files are created with the
case that the client passes, or if they are forced to be the
- "default" case. Default <EM
->yes</EM
+ "default" case. Default <I
+CLASS="EMPHASIS"
+>yes</I
>.
</P
></DD
@@ -756,8 +729,9 @@ CLASS="VARIABLELIST"
upper case, or if they are forced to be the "default"
case. This option can be use with "preserve case = yes"
to permit long filenames to retain their case, while short names
- are lowercased. Default <EM
->yes</EM
+ are lowered. Default <I
+CLASS="EMPHASIS"
+>yes</I
>.</P
></DD
></DL
@@ -808,7 +782,7 @@ CLASS="REPLACEABLE"
></LI
><LI
><P
->The client's NetBIOS name and any previously
+>The client's netbios name and any previously
used user names are checked against the supplied password, if
they match then the connection is allowed as the corresponding
user.</P
@@ -859,23 +833,11 @@ NAME="AEN253"
><LI
><P
><A
-HREF="#ADDPRINTERCOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
->add printer command</I
-></TT
-></A
-></P
-></LI
-><LI
-><P
-><A
-HREF="#ADDSHARECOMMAND"
+HREF="#ADDUSERSCRIPT"
><TT
CLASS="PARAMETER"
><I
->add share command</I
+>add user script</I
></TT
></A
></P
@@ -883,11 +845,11 @@ CLASS="PARAMETER"
><LI
><P
><A
-HREF="#ADDUSERSCRIPT"
+HREF="#ADDPRINTERCOMMAND"
><TT
CLASS="PARAMETER"
><I
->add user script</I
+>addprinter command</I
></TT
></A
></P
@@ -979,18 +941,6 @@ CLASS="PARAMETER"
><LI
><P
><A
-HREF="#CHANGESHARECOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
->change share command</I
-></TT
-></A
-></P
-></LI
-><LI
-><P
-><A
HREF="#CHARACTERSET"
><TT
CLASS="PARAMETER"
@@ -1147,11 +1097,23 @@ CLASS="PARAMETER"
><LI
><P
><A
+HREF="#DELETEUSERSCRIPT"
+><TT
+CLASS="PARAMETER"
+><I
+>delete user script</I
+></TT
+></A
+></P
+></LI
+><LI
+><P
+><A
HREF="#DELETEPRINTERCOMMAND"
><TT
CLASS="PARAMETER"
><I
->delete printer command</I
+>deleteprinter command</I
></TT
></A
></P
@@ -1159,11 +1121,11 @@ CLASS="PARAMETER"
><LI
><P
><A
-HREF="#DELETESHARECOMMAND"
+HREF="#DFREECOMMAND"
><TT
CLASS="PARAMETER"
><I
->delete share command</I
+>dfree command</I
></TT
></A
></P
@@ -1171,11 +1133,11 @@ CLASS="PARAMETER"
><LI
><P
><A
-HREF="#DELETEUSERSCRIPT"
+HREF="#DNSPROXY"
><TT
CLASS="PARAMETER"
><I
->delete user script</I
+>dns proxy</I
></TT
></A
></P
@@ -1183,11 +1145,11 @@ CLASS="PARAMETER"
><LI
><P
><A
-HREF="#DFREECOMMAND"
+HREF="#DOMAINADMINGROUP"
><TT
CLASS="PARAMETER"
><I
->dfree command</I
+>domain admin group</I
></TT
></A
></P
@@ -1195,11 +1157,11 @@ CLASS="PARAMETER"
><LI
><P
><A
-HREF="#DNSPROXY"
+HREF="#DOMAINADMINUSERS"
><TT
CLASS="PARAMETER"
><I
->dns proxy</I
+>domain admin users</I
></TT
></A
></P
@@ -1207,11 +1169,11 @@ CLASS="PARAMETER"
><LI
><P
><A
-HREF="#DOMAINADMINGROUP"
+HREF="#DOMAINGROUPS"
><TT
CLASS="PARAMETER"
><I
->domain admin group</I
+>domain groups</I
></TT
></A
></P
@@ -1231,6 +1193,18 @@ CLASS="PARAMETER"
><LI
><P
><A
+HREF="#DOMAINGUESTUSERS"
+><TT
+CLASS="PARAMETER"
+><I
+>domain guest users</I
+></TT
+></A
+></P
+></LI
+><LI
+><P
+><A
HREF="#DOMAINLOGONS"
><TT
CLASS="PARAMETER"
@@ -1867,18 +1841,6 @@ CLASS="PARAMETER"
><LI
><P
><A
-HREF="#OBEYPAMRESTRICTIONS"
-><TT
-CLASS="PARAMETER"
-><I
->obey pam restrictions</I
-></TT
-></A
-></P
-></LI
-><LI
-><P
-><A
HREF="#OPLOCKBREAKWAITTIME"
><TT
CLASS="PARAMETER"
@@ -1915,18 +1877,6 @@ CLASS="PARAMETER"
><LI
><P
><A
-HREF="#PAMPASSWORDCHANGE"
-><TT
-CLASS="PARAMETER"
-><I
->pam password change</I
-></TT
-></A
-></P
-></LI
-><LI
-><P
-><A
HREF="#PANICACTION"
><TT
CLASS="PARAMETER"
@@ -2587,6 +2537,18 @@ CLASS="PARAMETER"
><LI
><P
><A
+HREF="#UNIXREALNAME"
+><TT
+CLASS="PARAMETER"
+><I
+>unix realname</I
+></TT
+></A
+></P
+></LI
+><LI
+><P
+><A
HREF="#UPDATEENCRYPTED"
><TT
CLASS="PARAMETER"
@@ -2781,7 +2743,7 @@ CLASS="PARAMETER"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN897"
+NAME="AEN893"
></A
><H2
>COMPLETE LIST OF SERVICE PARAMETERS</H2
@@ -4200,7 +4162,7 @@ CLASS="PARAMETER"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN1369"
+NAME="AEN1365"
></A
><H2
>EXPLANATION OF EACH PARAMETER</H2
@@ -4211,9 +4173,157 @@ CLASS="VARIABLELIST"
><DL
><DT
><A
+NAME="ADDUSERSCRIPT"
+></A
+>add user script (G)</DT
+><DD
+><P
+>This is the full pathname to a script that will
+ be run <I
+CLASS="EMPHASIS"
+>AS ROOT</I
+> by <A
+HREF="smbd.8.html"
+TARGET="_top"
+>smbd(8)
+ </A
+> under special circumstances described below.</P
+><P
+>Normally, a Samba server requires that UNIX users are
+ created for all users accessing files on this server. For sites
+ that use Windows NT account databases as their primary user database
+ creating these users and keeping the user list in sync with the
+ Windows NT PDC is an onerous task. This option allows <A
+HREF="smbd.8.html"
+TARGET="_top"
+>smbd</A
+> to create the required UNIX users
+ <I
+CLASS="EMPHASIS"
+>ON DEMAND</I
+> when a user accesses the Samba server.</P
+><P
+>In order to use this option, <A
+HREF="smbd.8.html"
+TARGET="_top"
+>smbd</A
+>
+ must be set to <TT
+CLASS="PARAMETER"
+><I
+>security=server</I
+></TT
+> or <TT
+CLASS="PARAMETER"
+><I
+> security=domain</I
+></TT
+> and <TT
+CLASS="PARAMETER"
+><I
+>add user script</I
+></TT
+>
+ must be set to a full pathname for a script that will create a UNIX
+ user given one argument of <TT
+CLASS="PARAMETER"
+><I
+>%u</I
+></TT
+>, which expands into
+ the UNIX user name to create.</P
+><P
+>When the Windows user attempts to access the Samba server,
+ at login (session setup in the SMB protocol) time, <A
+HREF="smbd.8.html"
+TARGET="_top"
+> smbd</A
+> contacts the <TT
+CLASS="PARAMETER"
+><I
+>password server</I
+></TT
+> and
+ attempts to authenticate the given user with the given password. If the
+ authentication succeeds then <B
+CLASS="COMMAND"
+>smbd</B
+>
+ attempts to find a UNIX user in the UNIX password database to map the
+ Windows user into. If this lookup fails, and <TT
+CLASS="PARAMETER"
+><I
+>add user script
+ </I
+></TT
+> is set then <B
+CLASS="COMMAND"
+>smbd</B
+> will
+ call the specified script <I
+CLASS="EMPHASIS"
+>AS ROOT</I
+>, expanding
+ any <TT
+CLASS="PARAMETER"
+><I
+>%u</I
+></TT
+> argument to be the user name to create.</P
+><P
+>If this script successfully creates the user then <B
+CLASS="COMMAND"
+>smbd
+ </B
+> will continue on as though the UNIX user
+ already existed. In this way, UNIX users are dynamically created to
+ match existing Windows NT accounts.</P
+><P
+>See also <A
+HREF="#SECURITY"
+><TT
+CLASS="PARAMETER"
+><I
+> security</I
+></TT
+></A
+>, <A
+HREF="#PASSWORDSERVER"
+> <TT
+CLASS="PARAMETER"
+><I
+>password server</I
+></TT
+></A
+>,
+ <A
+HREF="#DELETEUSERSCRIPT"
+><TT
+CLASS="PARAMETER"
+><I
+>delete user
+ script</I
+></TT
+></A
+>.</P
+><P
+>Default: <B
+CLASS="COMMAND"
+>add user script = &lt;empty string&gt;
+ </B
+></P
+><P
+>Example: <B
+CLASS="COMMAND"
+>add user script = /usr/local/samba/bin/add_user
+ %u</B
+></P
+></DD
+><DT
+><A
NAME="ADDPRINTERCOMMAND"
></A
->add printer command (G)</DT
+>addprinter command (G)</DT
><DD
><P
>With the introduction of MS-RPC based printing
@@ -4224,11 +4334,10 @@ NAME="ADDPRINTERCOMMAND"
NT/2000 print server.</P
><P
>For a Samba host this means that the printer must be
- physically added to the underlying printing system. The <TT
+ physically added to underlying printing system. The <TT
CLASS="PARAMETER"
><I
->add
- printer command</I
+> addprinter command</I
></TT
> defines a script to be run which
will perform the necessary operations for adding the printer
@@ -4250,7 +4359,7 @@ CLASS="COMMAND"
>The <TT
CLASS="PARAMETER"
><I
->add printer command</I
+>addprinter command</I
></TT
> is
automatically invoked with the following parameter (in
@@ -4324,7 +4433,7 @@ CLASS="PARAMETER"
>Once the <TT
CLASS="PARAMETER"
><I
->add printer command</I
+>addprinter command</I
></TT
> has
been executed, <B
@@ -4345,7 +4454,7 @@ HREF="#DELETEPRINTERCOMMAND"
><TT
CLASS="PARAMETER"
><I
-> delete printer command</I
+> deleteprinter command</I
></TT
></A
>, <A
@@ -4368,8 +4477,9 @@ CLASS="PARAMETER"
></A
></P
><P
->Default: <EM
->none</EM
+>Default: <I
+CLASS="EMPHASIS"
+>none</I
></P
><P
>Example: <B
@@ -4380,290 +4490,6 @@ CLASS="COMMAND"
></DD
><DT
><A
-NAME="ADDSHARECOMMAND"
-></A
->add share command (G)</DT
-><DD
-><P
->Samba 2.2.0 introduced the ability to dynamically
- add and delete shares via the Windows NT 4.0 Server Manager. The
- <TT
-CLASS="PARAMETER"
-><I
->add share command</I
-></TT
-> is used to define an
- external program or script which will add a new service definition
- to <TT
-CLASS="FILENAME"
->smb.conf</TT
->. In order to successfully
- execute the <TT
-CLASS="PARAMETER"
-><I
->add share command</I
-></TT
->, <B
-CLASS="COMMAND"
->smbd</B
->
- requires that the administrator be connected using a root account (i.e.
- uid == 0).
- </P
-><P
-> When executed, <B
-CLASS="COMMAND"
->smbd</B
-> will automatically invoke the
- <TT
-CLASS="PARAMETER"
-><I
->add share command</I
-></TT
-> with four parameters.
- </P
-><P
-></P
-><UL
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->configFile</I
-></TT
-> - the location
- of the global <TT
-CLASS="FILENAME"
->smb.conf</TT
-> file.
- </P
-></LI
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->shareName</I
-></TT
-> - the name of the new
- share.
- </P
-></LI
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->pathName</I
-></TT
-> - path to an **existing**
- directory on disk.
- </P
-></LI
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->comment</I
-></TT
-> - comment string to associate
- with the new share.
- </P
-></LI
-></UL
-><P
-> This parameter is only used for add file shares. To add printer shares,
- see the <A
-HREF="#ADDPRINTERCOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
->add printer
- command</I
-></TT
-></A
->.
- </P
-><P
-> See also <A
-HREF="#CHANGESHARECOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
->change share
- command</I
-></TT
-></A
->, <A
-HREF="#DELETESHARECOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
->delete share
- command</I
-></TT
-></A
->.
- </P
-><P
->Default: <EM
->none</EM
-></P
-><P
->Example: <B
-CLASS="COMMAND"
->add share command = /usr/local/bin/addshare</B
-></P
-></DD
-><DT
-><A
-NAME="ADDUSERSCRIPT"
-></A
->add user script (G)</DT
-><DD
-><P
->This is the full pathname to a script that will
- be run <EM
->AS ROOT</EM
-> by <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd(8)
- </A
-> under special circumstances described below.</P
-><P
->Normally, a Samba server requires that UNIX users are
- created for all users accessing files on this server. For sites
- that use Windows NT account databases as their primary user database
- creating these users and keeping the user list in sync with the
- Windows NT PDC is an onerous task. This option allows <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
-> to create the required UNIX users
- <EM
->ON DEMAND</EM
-> when a user accesses the Samba server.</P
-><P
->In order to use this option, <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
->
- must be set to <TT
-CLASS="PARAMETER"
-><I
->security=server</I
-></TT
-> or <TT
-CLASS="PARAMETER"
-><I
-> security=domain</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->add user script</I
-></TT
->
- must be set to a full pathname for a script that will create a UNIX
- user given one argument of <TT
-CLASS="PARAMETER"
-><I
->%u</I
-></TT
->, which expands into
- the UNIX user name to create.</P
-><P
->When the Windows user attempts to access the Samba server,
- at login (session setup in the SMB protocol) time, <A
-HREF="smbd.8.html"
-TARGET="_top"
-> smbd</A
-> contacts the <TT
-CLASS="PARAMETER"
-><I
->password server</I
-></TT
-> and
- attempts to authenticate the given user with the given password. If the
- authentication succeeds then <B
-CLASS="COMMAND"
->smbd</B
->
- attempts to find a UNIX user in the UNIX password database to map the
- Windows user into. If this lookup fails, and <TT
-CLASS="PARAMETER"
-><I
->add user script
- </I
-></TT
-> is set then <B
-CLASS="COMMAND"
->smbd</B
-> will
- call the specified script <EM
->AS ROOT</EM
->, expanding
- any <TT
-CLASS="PARAMETER"
-><I
->%u</I
-></TT
-> argument to be the user name to create.</P
-><P
->If this script successfully creates the user then <B
-CLASS="COMMAND"
->smbd
- </B
-> will continue on as though the UNIX user
- already existed. In this way, UNIX users are dynamically created to
- match existing Windows NT accounts.</P
-><P
->See also <A
-HREF="#SECURITY"
-><TT
-CLASS="PARAMETER"
-><I
-> security</I
-></TT
-></A
->, <A
-HREF="#PASSWORDSERVER"
-> <TT
-CLASS="PARAMETER"
-><I
->password server</I
-></TT
-></A
->,
- <A
-HREF="#DELETEUSERSCRIPT"
-><TT
-CLASS="PARAMETER"
-><I
->delete user
- script</I
-></TT
-></A
->.</P
-><P
->Default: <B
-CLASS="COMMAND"
->add user script = &#60;empty string&#62;
- </B
-></P
-><P
->Example: <B
-CLASS="COMMAND"
->add user script = /usr/local/samba/bin/add_user
- %u</B
-></P
-></DD
-><DT
-><A
NAME="ADMINUSERS"
></A
>admin users (S)</DT
@@ -4677,8 +4503,9 @@ NAME="ADMINUSERS"
this list will be able to do anything they like on the share,
irrespective of file permissions.</P
><P
->Default: <EM
->no admin users</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no admin users</I
></P
><P
>Example: <B
@@ -4727,11 +4554,7 @@ CLASS="CONSTANT"
>domain</TT
>.
If it is set to no, then attempts to connect to a resource from
- a domain or workgroup other than the one which <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
-> is running
+ a domain or workgroup other than the one which smbd is running
in will fail, even if that domain is trusted by the remote server
doing the authentication.</P
><P
@@ -4789,7 +4612,7 @@ CLASS="COMMAND"
><A
NAME="ANNOUNCEVERSION"
></A
->announce version (G)</DT
+>annouce version (G)</DT
><DD
><P
>This specifies the major and minor version numbers
@@ -4837,8 +4660,9 @@ CLASS="PARAMETER"
><I
>available = no</I
></TT
->, then <EM
->ALL</EM
+>, then <I
+CLASS="EMPHASIS"
+>ALL</I
>
attempts to connect to the service will fail. Such failures are
logged.</P
@@ -4856,7 +4680,7 @@ NAME="BINDINTERFACESONLY"
><DD
><P
>This global parameter allows the Samba admin
- to limit what interfaces on a machine will serve SMB requests. If
+ to limit what interfaces on a machine will serve smb requests. If
affects file service <A
HREF="smbd.8.html"
TARGET="_top"
@@ -4945,8 +4769,9 @@ CLASS="PARAMETER"
>bind interfaces only</I
></TT
> is set then
- unless the network address <EM
->127.0.0.1</EM
+ unless the network address <I
+CLASS="EMPHASIS"
+>127.0.0.1</I
> is added
to the <TT
CLASS="PARAMETER"
@@ -4975,8 +4800,9 @@ CLASS="COMMAND"
CLASS="COMMAND"
>smbpasswd</B
>
- by default connects to the <EM
->localhost - 127.0.0.1</EM
+ by default connects to the <I
+CLASS="EMPHASIS"
+>localhost - 127.0.0.1</I
>
address as an SMB client to issue the password change request. If
<TT
@@ -4985,8 +4811,9 @@ CLASS="PARAMETER"
>bind interfaces only</I
></TT
> is set then unless the
- network address <EM
->127.0.0.1</EM
+ network address <I
+CLASS="EMPHASIS"
+>127.0.0.1</I
> is added to the
<TT
CLASS="PARAMETER"
@@ -5035,11 +4862,13 @@ CLASS="COMMAND"
CLASS="COMMAND"
>nmbd</B
> at the address
- <EM
->127.0.0.1</EM
+ <I
+CLASS="EMPHASIS"
+>127.0.0.1</I
> to determine if they are running.
- Not adding <EM
->127.0.0.1</EM
+ Not adding <I
+CLASS="EMPHASIS"
+>127.0.0.1</I
> will cause <B
CLASS="COMMAND"
> smbd</B
@@ -5086,7 +4915,7 @@ TARGET="_top"
><P
>If this parameter is set to <TT
CLASS="CONSTANT"
->false</TT
+>False</TT
>, then
Samba 2.2 will behave as previous versions of Samba would and
will fail the lock request immediately if the lock range
@@ -5229,146 +5058,12 @@ CLASS="COMMAND"
></DD
><DT
><A
-NAME="CHANGESHARECOMMAND"
-></A
->change share command (G)</DT
-><DD
-><P
->Samba 2.2.0 introduced the ability to dynamically
- add and delete shares via the Windows NT 4.0 Server Manager. The
- <TT
-CLASS="PARAMETER"
-><I
->change share command</I
-></TT
-> is used to define an
- external program or script which will modify an existing service definition
- in <TT
-CLASS="FILENAME"
->smb.conf</TT
->. In order to successfully
- execute the <TT
-CLASS="PARAMETER"
-><I
->change share command</I
-></TT
->, <B
-CLASS="COMMAND"
->smbd</B
->
- requires that the administrator be connected using a root account (i.e.
- uid == 0).
- </P
-><P
-> When executed, <B
-CLASS="COMMAND"
->smbd</B
-> will automatically invoke the
- <TT
-CLASS="PARAMETER"
-><I
->change share command</I
-></TT
-> with four parameters.
- </P
-><P
-></P
-><UL
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->configFile</I
-></TT
-> - the location
- of the global <TT
-CLASS="FILENAME"
->smb.conf</TT
-> file.
- </P
-></LI
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->shareName</I
-></TT
-> - the name of the new
- share.
- </P
-></LI
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->pathName</I
-></TT
-> - path to an **existing**
- directory on disk.
- </P
-></LI
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->comment</I
-></TT
-> - comment string to associate
- with the new share.
- </P
-></LI
-></UL
-><P
-> This parameter is only used modify existing file shares definitions. To modify
- printer shares, use the "Printers..." folder as seen when browsing the Samba host.
- </P
-><P
-> See also <A
-HREF="#ADDSHARECOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
->add share
- command</I
-></TT
-></A
->, <A
-HREF="#DELETESHARECOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
->delete
- share command</I
-></TT
-></A
->.
- </P
-><P
->Default: <EM
->none</EM
-></P
-><P
->Example: <B
-CLASS="COMMAND"
->change share command = /usr/local/bin/addshare</B
-></P
-></DD
-><DT
-><A
NAME="CHARACTERSET"
></A
>character set (G)</DT
><DD
><P
->This allows <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
-> to map incoming filenames
+>This allows a smbd to map incoming filenames
from a DOS Code page (see the <A
HREF="#CLIENTCODEPAGE"
>client
@@ -5390,8 +5085,9 @@ CLASS="PARAMETER"
>client code page</I
></TT
>
- <EM
->MUST</EM
+ <I
+CLASS="EMPHASIS"
+>MUST</I
> be set to code page 850 if the
<TT
CLASS="PARAMETER"
@@ -5417,8 +5113,9 @@ CLASS="PARAMETER"
>client code page
</I
></TT
-> <EM
->MUST</EM
+> <I
+CLASS="EMPHASIS"
+>MUST</I
> be set to code page 852 if
the <TT
CLASS="PARAMETER"
@@ -5444,8 +5141,9 @@ CLASS="PARAMETER"
>client code page
</I
></TT
-> <EM
->MUST</EM
+> <I
+CLASS="EMPHASIS"
+>MUST</I
> be set to code page
866 if the <TT
CLASS="PARAMETER"
@@ -5471,8 +5169,9 @@ CLASS="PARAMETER"
>client code page
</I
></TT
-> <EM
->MUST</EM
+> <I
+CLASS="EMPHASIS"
+>MUST</I
> be set to code page
737 if the <TT
CLASS="PARAMETER"
@@ -5498,8 +5197,9 @@ CLASS="PARAMETER"
><I
>client code page</I
></TT
-> <EM
->MUST</EM
+> <I
+CLASS="EMPHASIS"
+>MUST</I
>
be set to code page 866 if the <TT
CLASS="PARAMETER"
@@ -5515,8 +5215,9 @@ CLASS="CONSTANT"
></LI
></UL
><P
-><EM
->BUG</EM
+><I
+CLASS="EMPHASIS"
+>BUG</I
>. These MSDOS code page to UNIX character
set mappings should be dynamic, like the loading of MS DOS code pages,
not static.</P
@@ -5526,7 +5227,7 @@ CLASS="CONSTANT"
><P
>Default: <B
CLASS="COMMAND"
->character set = &#60;empty string&#62;</B
+>character set = &lt;empty string&gt;</B
></P
><P
>Example: <B
@@ -5655,8 +5356,9 @@ CLASS="PARAMETER"
>client code page</I
></TT
> parameter
- <EM
->MUST</EM
+ <I
+CLASS="EMPHASIS"
+>MUST</I
> be set before the <TT
CLASS="PARAMETER"
><I
@@ -5851,7 +5553,7 @@ CLASS="CONSTANT"
><P
>Default: <B
CLASS="COMMAND"
->coding system = &#60;empty value&#62;</B
+>coding system = &lt;empty value&gt;</B
>
</P
></DD
@@ -5881,8 +5583,9 @@ CLASS="PARAMETER"
></A
> parameter.</P
><P
->Default: <EM
->No comment string</EM
+>Default: <I
+CLASS="EMPHASIS"
+>No comment string</I
></P
><P
>Example: <B
@@ -5939,8 +5642,9 @@ NAME="COPY"
copied must occur earlier in the configuration file than the
service doing the copying.</P
><P
->Default: <EM
->no value</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no value</I
></P
><P
>Example: <B
@@ -5971,8 +5675,9 @@ CLASS="PARAMETER"
calculated according to the mapping from DOS modes to UNIX
permissions, and the resulting UNIX mode is then bit-wise 'AND'ed
with this parameter. This parameter may be thought of as a bit-wise
- MASK for the UNIX modes of a file. Any bit <EM
->not</EM
+ MASK for the UNIX modes of a file. Any bit <I
+CLASS="EMPHASIS"
+>not</I
>
set here will be removed from the modes set on a file when it is
created.</P
@@ -6033,18 +5738,6 @@ CLASS="PARAMETER"
></A
> parameter.</P
><P
->Note that this parameter does not apply to permissions
- set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
- a mask on access control lists also, they need to set the <A
-HREF="#SECURITYMASK"
-><TT
-CLASS="PARAMETER"
-><I
->security mask</I
-></TT
-></A
->.</P
-><P
>Default: <B
CLASS="COMMAND"
>create mask = 0744</B
@@ -6143,11 +5836,7 @@ NAME="DEBUGPID"
><DD
><P
>When using only one log file for more then one
- forked <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
->-process there may be hard to follow which process
+ forked smbd-process there may be hard to follow which process
outputs which message. This boolean parameter is adds the process-id
to the timestamp message headers in the logfile when turned on.</P
><P
@@ -6227,15 +5916,21 @@ NAME="DEBUGLEVEL"
>debuglevel (G)</DT
><DD
><P
->Synonym for <A
-HREF="#LOGLEVEL"
-><TT
-CLASS="PARAMETER"
-><I
-> log level</I
-></TT
-></A
->.</P
+>The value of the parameter (an integer) allows
+ the debug level (logging level) to be specified in the
+ <TT
+CLASS="FILENAME"
+>smb.conf</TT
+> file. This is to give greater
+ flexibility in the configuration of the system.</P
+><P
+>The default will be the debug level specified on
+ the command line or level zero if none was specified.</P
+><P
+>Example: <B
+CLASS="COMMAND"
+>debug level = 3</B
+></P
></DD
><DT
><A
@@ -6288,8 +5983,9 @@ NAME="DEFAULTSERVICE"
><P
>This parameter specifies the name of a service
which will be connected to if the service actually requested cannot
- be found. Note that the square brackets are <EM
->NOT</EM
+ be found. Note that the square brackets are <I
+CLASS="EMPHASIS"
+>NOT</I
>
given in the parameter value (see example below).</P
><P
@@ -6331,12 +6027,6 @@ CLASS="PARAMETER"
><P
>Example:</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>[global]
@@ -6345,105 +6035,6 @@ CLASS="PROGRAMLISTING"
[pub]
path = /%S
</PRE
-></TD
-></TR
-></TABLE
-></P
-></DD
-><DT
-><A
-NAME="DELETEPRINTERCOMMAND"
-></A
->delete printer command (G)</DT
-><DD
-><P
->With the introduction of MS-RPC based printer
- support for Windows NT/2000 clients in Samba 2.2, it is now
- possible to delete printer at run time by issuing the
- DeletePrinter() RPC call.</P
-><P
->For a Samba host this means that the printer must be
- physically deleted from underlying printing system. The <TT
-CLASS="PARAMETER"
-><I
-> deleteprinter command</I
-></TT
-> defines a script to be run which
- will perform the necessary operations for removing the printer
- from the print system and from <TT
-CLASS="FILENAME"
->smb.conf</TT
->.
- </P
-><P
->The <TT
-CLASS="PARAMETER"
-><I
->delete printer command</I
-></TT
-> is
- automatically called with only one parameter: <TT
-CLASS="PARAMETER"
-><I
-> "printer name"</I
-></TT
->.</P
-><P
->Once the <TT
-CLASS="PARAMETER"
-><I
->delete printer command</I
-></TT
-> has
- been executed, <B
-CLASS="COMMAND"
->smbd</B
-> will reparse the <TT
-CLASS="FILENAME"
-> smb.conf</TT
-> to associated printer no longer exists.
- If the sharename is still valid, then <B
-CLASS="COMMAND"
->smbd
- </B
-> will return an ACCESS_DENIED error to the client.</P
-><P
->See also <A
-HREF="#ADDPRINTERCOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
-> add printer command</I
-></TT
-></A
->, <A
-HREF="#PRINTING"
-><TT
-CLASS="PARAMETER"
-><I
->printing</I
-></TT
-></A
->,
- <A
-HREF="#SHOWADDPRINTERWIZARD"
-><TT
-CLASS="PARAMETER"
-><I
->show add
- printer wizard</I
-></TT
-></A
-></P
-><P
->Default: <EM
->none</EM
-></P
-><P
->Example: <B
-CLASS="COMMAND"
->deleteprinter command = /usr/bin/removeprinter
- </B
></P
></DD
><DT
@@ -6467,131 +6058,15 @@ CLASS="COMMAND"
></DD
><DT
><A
-NAME="DELETESHARECOMMAND"
-></A
->delete share command (G)</DT
-><DD
-><P
->Samba 2.2.0 introduced the ability to dynamically
- add and delete shares via the Windows NT 4.0 Server Manager. The
- <TT
-CLASS="PARAMETER"
-><I
->delete share command</I
-></TT
-> is used to define an
- external program or script which will remove an existing service
- definition from <TT
-CLASS="FILENAME"
->smb.conf</TT
->. In order to successfully
- execute the <TT
-CLASS="PARAMETER"
-><I
->delete share command</I
-></TT
->, <B
-CLASS="COMMAND"
->smbd</B
->
- requires that the administrator be connected using a root account (i.e.
- uid == 0).
- </P
-><P
-> When executed, <B
-CLASS="COMMAND"
->smbd</B
-> will automatically invoke the
- <TT
-CLASS="PARAMETER"
-><I
->delete share command</I
-></TT
-> with two parameters.
- </P
-><P
-></P
-><UL
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->configFile</I
-></TT
-> - the location
- of the global <TT
-CLASS="FILENAME"
->smb.conf</TT
-> file.
- </P
-></LI
-><LI
-><P
-><TT
-CLASS="PARAMETER"
-><I
->shareName</I
-></TT
-> - the name of
- the existing service.
- </P
-></LI
-></UL
-><P
-> This parameter is only used to remove file shares. To delete printer shares,
- see the <A
-HREF="#DELETEPRINTERCOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
->delete printer
- command</I
-></TT
-></A
->.
- </P
-><P
-> See also <A
-HREF="#ADDSHARECOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
->delete share
- command</I
-></TT
-></A
->, <A
-HREF="#CHANGESHARECOMMAND"
-><TT
-CLASS="PARAMETER"
-><I
->change
- share</I
-></TT
-></A
->.
- </P
-><P
->Default: <EM
->none</EM
-></P
-><P
->Example: <B
-CLASS="COMMAND"
->delete share command = /usr/local/bin/delshare</B
-></P
-></DD
-><DT
-><A
NAME="DELETEUSERSCRIPT"
></A
>delete user script (G)</DT
><DD
><P
>This is the full pathname to a script that will
- be run <EM
->AS ROOT</EM
+ be run <I
+CLASS="EMPHASIS"
+>AS ROOT</I
> by <A
HREF="smbd.8.html"
TARGET="_top"
@@ -6609,9 +6084,10 @@ CLASS="COMMAND"
Windows NT PDC is an onerous task. This option allows <B
CLASS="COMMAND"
> smbd</B
-> to delete the required UNIX users <EM
+> to delete the required UNIX users <I
+CLASS="EMPHASIS"
>ON
- DEMAND</EM
+ DEMAND</I
> when a user accesses the Samba server and the
Windows NT user no longer exists.</P
><P
@@ -6638,8 +6114,9 @@ CLASS="PARAMETER"
</I
></TT
>, which expands into the UNIX user name to delete.
- <EM
->NOTE</EM
+ <I
+CLASS="EMPHASIS"
+>NOTE</I
> that this is different to the <A
HREF="#ADDUSERSCRIPT"
><TT
@@ -6673,8 +6150,9 @@ CLASS="PARAMETER"
the user in this circumstance would not be a good idea.</P
><P
>When the Windows user attempts to access the Samba server,
- at <EM
->login</EM
+ at <I
+CLASS="EMPHASIS"
+>login</I
> (session setup in the SMB protocol)
time, <B
CLASS="COMMAND"
@@ -6705,8 +6183,9 @@ CLASS="PARAMETER"
CLASS="COMMAND"
>smbd</B
> will all the specified script
- <EM
->AS ROOT</EM
+ <I
+CLASS="EMPHASIS"
+>AS ROOT</I
>, expanding any <TT
CLASS="PARAMETER"
><I
@@ -6745,7 +6224,7 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->delete user script = &#60;empty string&#62;
+>delete user script = &lt;empty string&gt;
</B
></P
><P
@@ -6757,6 +6236,103 @@ CLASS="COMMAND"
></DD
><DT
><A
+NAME="DELETEPRINTERCOMMAND"
+></A
+>deleteprinter command (G)</DT
+><DD
+><P
+>With the introduction of MS-RPC based printer
+ support for Windows NT/2000 clients in Samba 2.2, it is now
+ possible to delete printer at run time by issuing the
+ DeletePrinter() RPC call.</P
+><P
+>For a Samba host this means that the printer must be
+ physically deleted from underlying printing system. The <TT
+CLASS="PARAMETER"
+><I
+> deleteprinter command</I
+></TT
+> defines a script to be run which
+ will perform the necessary operations for removing the printer
+ from the print system and from <TT
+CLASS="FILENAME"
+>smb.conf</TT
+>.
+ </P
+><P
+>The <TT
+CLASS="PARAMETER"
+><I
+>deleteprinter command</I
+></TT
+> is
+ automatically called with only one parameter: <TT
+CLASS="PARAMETER"
+><I
+> "printer name"</I
+></TT
+>.</P
+><P
+>Once the <TT
+CLASS="PARAMETER"
+><I
+>deleteprinter command</I
+></TT
+> has
+ been executed, <B
+CLASS="COMMAND"
+>smbd</B
+> will reparse the <TT
+CLASS="FILENAME"
+> smb.conf</TT
+> to associated printer no longer exists.
+ If the sharename is still valid, then <B
+CLASS="COMMAND"
+>smbd
+ </B
+> will return an ACCESS_DENIED error to the client.</P
+><P
+>See also <A
+HREF="#ADDPRINTERCOMMAND"
+><TT
+CLASS="PARAMETER"
+><I
+> addprinter command</I
+></TT
+></A
+>, <A
+HREF="#PRINTING"
+><TT
+CLASS="PARAMETER"
+><I
+>printing</I
+></TT
+></A
+>,
+ <A
+HREF="#SHOWADDPRINTERWIZARD"
+><TT
+CLASS="PARAMETER"
+><I
+>show add
+ printer wizard</I
+></TT
+></A
+></P
+><P
+>Default: <I
+CLASS="EMPHASIS"
+>none</I
+></P
+><P
+>Example: <B
+CLASS="COMMAND"
+>deleteprinter command = /usr/bin/removeprinter
+ </B
+></P
+></DD
+><DT
+><A
NAME="DELETEVETOFILES"
></A
>delete veto files (S)</DT
@@ -6773,16 +6349,13 @@ CLASS="PARAMETER"
></TT
></A
>
- option). If this option is set to <TT
-CLASS="CONSTANT"
->false</TT
-> (the default) then if a vetoed
+ option). If this option is set to False (the default) then if a vetoed
directory contains any non-vetoed files or directories then the
directory delete will fail. This is usually what you want.</P
><P
>If this option is set to <TT
CLASS="CONSTANT"
->true</TT
+>True</TT
>, then Samba
will attempt to recursively delete any files and directories within
the vetoed directory. This can be useful for integration with file
@@ -6869,15 +6442,17 @@ CLASS="FILENAME"
third return value can give the block size in bytes. The default
blocksize is 1024 bytes.</P
><P
->Note: Your script should <EM
->NOT</EM
+>Note: Your script should <I
+CLASS="EMPHASIS"
+>NOT</I
> be setuid or
setgid and should be owned by (and writeable only by) root!</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>By default internal routines for
determining the disk capacity and remaining space will be used.
- </EM
+ </I
></P
><P
>Example: <B
@@ -6888,40 +6463,22 @@ CLASS="COMMAND"
><P
>Where the script dfree (which must be made executable) could be:</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>
#!/bin/sh
df $1 | tail -1 | awk '{print $2" "$4}'
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>or perhaps (on Sys V based systems):</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>
#!/bin/sh
/usr/bin/df -k $1 | tail -1 | awk '{print $3" "$5}'
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>Note that you may have to replace the command names
@@ -6960,8 +6517,9 @@ NAME="DIRECTORYMASK"
calculated according to the mapping from DOS modes to UNIX permissions,
and the resulting UNIX mode is then bit-wise 'AND'ed with this
parameter. This parameter may be thought of as a bit-wise MASK for
- the UNIX modes of a directory. Any bit <EM
->not</EM
+ the UNIX modes of a directory. Any bit <I
+CLASS="EMPHASIS"
+>not</I
> set
here will be removed from the modes set on a directory when it is
created.</P
@@ -6983,18 +6541,6 @@ CLASS="PARAMETER"
> parameter. This parameter is set to 000 by
default (i.e. no extra mode bits are added).</P
><P
->Note that this parameter does not apply to permissions
- set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
- a mask on access control lists also, they need to set the <A
-HREF="#DIRECTORYSECURITYMASK"
-><TT
-CLASS="PARAMETER"
-><I
->directory security mask</I
-></TT
-></A
->.</P
-><P
>See the <A
HREF="#FORCEDIRECTORYMODE"
><TT
@@ -7083,20 +6629,28 @@ NAME="DIRECTORYSECURITYMASK"
mask may be treated as a set of bits the user is not allowed
to change.</P
><P
->If not set explicitly this parameter is set to 0777
- meaning a user is allowed to modify all the user/group/world
- permissions on a directory.</P
+>If not set explicitly this parameter is set to the same
+ value as the <A
+HREF="#DIRECTORYMASK"
+><TT
+CLASS="PARAMETER"
+><I
+>directory
+ mask</I
+></TT
+></A
+> parameter. To allow a user to
+ modify all the user/group/world permissions on a directory, set
+ this parameter to 0777.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that users who can access the
Samba server through other means can easily bypass this restriction,
so it is primarily useful for standalone "appliance" systems.
- Administrators of most normal systems will probably want to leave
- it as the default of <TT
-CLASS="CONSTANT"
->0777</TT
->.</P
+ Administrators of most normal systems will probably want to set
+ it to 0777.</P
><P
>See also the <A
HREF="#FORCEDIRECTORYSECURITYMODE"
@@ -7128,12 +6682,13 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->directory security mask = 0777</B
+>directory security mask = &lt;same as
+ directory mask&gt;</B
></P
><P
>Example: <B
CLASS="COMMAND"
->directory security mask = 0700</B
+>directory security mask = 0777</B
></P
></DD
><DT
@@ -7186,47 +6741,73 @@ NAME="DOMAINADMINGROUP"
>domain admin group (G)</DT
><DD
><P
->This parameter is intended as a temporary solution
- to enable users to be a member of the "Domain Admins" group when
- a Samba host is acting as a PDC. A complete solution will be provided
- by a system for mapping Windows NT/2000 groups onto UNIX groups.
- Please note that this parameter has a somewhat confusing name. It
- accepts a list of usernames and of group names in standard
- <TT
-CLASS="FILENAME"
->smb.conf</TT
-> notation.
- </P
-><P
->See also <A
-HREF="#DOMAINGUESTGROUP"
-><TT
-CLASS="PARAMETER"
-><I
->domain
- guest group</I
-></TT
-></A
->, <A
-HREF="#DOMAINLOGONS"
-><TT
-CLASS="PARAMETER"
-><I
->domain
- logons</I
-></TT
+>This is an <I
+CLASS="EMPHASIS"
+>EXPERIMENTAL</I
+> parameter
+ that is part of the unfinished Samba NT Domain Controller Code. It may
+ be removed in a later release. To work with the latest code builds
+ that may have more support for Samba NT Domain Controller functionality
+ please subscribe to the mailing list <A
+HREF="mailto:samba-ntdom@samba.org"
+TARGET="_top"
+>samba-ntdom</A
+> available by
+ visiting the web page at <A
+HREF="http://lists.samba.org/"
+TARGET="_top"
+> http://lists.samba.org/</A
+>.</P
+></DD
+><DT
+><A
+NAME="DOMAINADMINUSERS"
></A
->
- </P
+>domain admin users (G)</DT
+><DD
><P
->Default: <EM
->no domain administrators</EM
-></P
+>This is an <I
+CLASS="EMPHASIS"
+>EXPERIMENTAL</I
+> parameter
+ that is part of the unfinished Samba NT Domain Controller Code. It may
+ be removed in a later release. To work with the latest code builds
+ that may have more support for Samba NT Domain Controller functionality
+ please subscribe to the mailing list <A
+HREF="mailto:samba-ntdom@samba.org"
+TARGET="_top"
+>samba-ntdom</A
+> available by
+ visiting the web page at <A
+HREF="http://lists.samba.org/"
+TARGET="_top"
+> http://lists.samba.org/</A
+>.</P
+></DD
+><DT
+><A
+NAME="DOMAINGROUPS"
+></A
+>domain groups (G)</DT
+><DD
><P
->Example: <B
-CLASS="COMMAND"
->domain admin group = root @wheel</B
-></P
+>This is an <I
+CLASS="EMPHASIS"
+>EXPERIMENTAL</I
+> parameter
+ that is part of the unfinished Samba NT Domain Controller Code. It may
+ be removed in a later release. To work with the latest code builds
+ that may have more support for Samba NT Domain Controller functionality
+ please subscribe to the mailing list <A
+HREF="mailto:samba-ntdom@samba.org"
+TARGET="_top"
+>samba-ntdom</A
+> available by
+ visiting the web page at <A
+HREF="http://lists.samba.org/"
+TARGET="_top"
+> http://lists.samba.org/</A
+>.</P
></DD
><DT
><A
@@ -7235,47 +6816,48 @@ NAME="DOMAINGUESTGROUP"
>domain guest group (G)</DT
><DD
><P
->This parameter is intended as a temporary solution
- to enable users to be a member of the "Domain Guests" group when
- a Samba host is acting as a PDC. A complete solution will be provided
- by a system for mapping Windows NT/2000 groups onto UNIX groups.
- Please note that this parameter has a somewhat confusing name. It
- accepts a list of usernames and of group names in standard
- <TT
-CLASS="FILENAME"
->smb.conf</TT
-> notation.
- </P
-><P
->See also <A
-HREF="#DOMAINADMINGROUP"
-><TT
-CLASS="PARAMETER"
-><I
->domain
- admin group</I
-></TT
-></A
->, <A
-HREF="#DOMAINLOGONS"
-><TT
-CLASS="PARAMETER"
-><I
->domain
- logons</I
-></TT
+>This is an <I
+CLASS="EMPHASIS"
+>EXPERIMENTAL</I
+> parameter
+ that is part of the unfinished Samba NT Domain Controller Code. It may
+ be removed in a later release. To work with the latest code builds
+ that may have more support for Samba NT Domain Controller functionality
+ please subscribe to the mailing list <A
+HREF="mailto:samba-ntdom@samba.org"
+TARGET="_top"
+>samba-ntdom</A
+> available by
+ visiting the web page at <A
+HREF="http://lists.samba.org/"
+TARGET="_top"
+> http://lists.samba.org/</A
+>.</P
+></DD
+><DT
+><A
+NAME="DOMAINGUESTUSERS"
></A
->
- </P
-><P
->Default: <EM
->no domain guests</EM
-></P
+>domain guest users (G)</DT
+><DD
><P
->Example: <B
-CLASS="COMMAND"
->domain guest group = nobody @guest</B
-></P
+>This is an <I
+CLASS="EMPHASIS"
+>EXPERIMENTAL</I
+> parameter
+ that is part of the unfinished Samba NT Domain Controller Code. It may
+ be removed in a later release. To work with the latest code builds
+ that may have more support for Samba NT Domain Controller functionality
+ please subscribe to the mailing list <A
+HREF="mailto:samba-ntdom@samba.org"
+TARGET="_top"
+>samba-ntdom</A
+> available by
+ visiting the web page at <A
+HREF="http://lists.samba.org/"
+TARGET="_top"
+> http://lists.samba.org/</A
+>.</P
></DD
><DT
><A
@@ -7284,10 +6866,7 @@ NAME="DOMAINLOGONS"
>domain logons (G)</DT
><DD
><P
->If set to <TT
-CLASS="CONSTANT"
->true</TT
->, the Samba server will serve
+>If set to true, the Samba server will serve
Windows 95/98 Domain logons for the <A
HREF="#WORKGROUP"
> <TT
@@ -7448,9 +7027,10 @@ CLASS="FILENAME"
>.
Experimentation is the best policy :-) </P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>none (i.e., all directories are OK
- to descend)</EM
+ to descend)</I
></P
><P
>Example: <B
@@ -7466,7 +7046,7 @@ NAME="DOSFILEMODE"
><DD
><P
> The default behavior in Samba is to provide
- UNIX-like behavior where only the owner of a file/directory is
+ UNIX-like behavor where only the owner of a file/directory is
able to change the permissions on it. However, this behavior
is often confusing to DOS/Windows users. Enabling this parameter
allows a user who has write access to the file (by whatever
@@ -7535,12 +7115,8 @@ CLASS="COMMAND"
> is acting
on behalf of is not the file owner. Setting this option to <TT
CLASS="CONSTANT"
-> true</TT
-> allows DOS semantics and <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
-> will change the file
+> True</TT
+> allows DOS semantics and smbd will change the file
timestamp as DOS requires.</P
><P
>Default: <B
@@ -7592,7 +7168,7 @@ CLASS="COMMAND"
> program for information on how to set up
and maintain this file), or set the <A
HREF="#SECURITY"
->security=[server|domain]</A
+>security=[serve|domain]</A
> parameter which
causes <B
CLASS="COMMAND"
@@ -7613,18 +7189,19 @@ NAME="ENHANCEDBROWSING"
><DD
><P
>This option enables a couple of enhancements to
- cross-subnet browse propagation that have been added in Samba
+ cross-subnet browse propogation that have been added in Samba
but which are not standard in Microsoft implementations.
- <EM
+ <I
+CLASS="EMPHASIS"
>These enhancements are currently only available in
- the HEAD Samba CVS tree (not Samba 2.2.x).</EM
+ the HEAD Samba CVS tree (not Samba 2.2.x).</I
></P
><P
->The first enhancement to browse propagation consists of a regular
+>The first enhancement to browse propogation consists of a regular
wildcard query to a Samba WINS server for all Domain Master Browsers,
- followed by a browse synchronization with each of the returned
+ followed by a browse synchronisation with each of the returned
DMBs. The second enhancement consists of a regular randomised browse
- synchronization with all currently known DMBs.</P
+ synchronisation with all currently known DMBs.</P
><P
>You may wish to disable this option if you have a problem with empty
workgroups not disappearing from browse lists. Due to the restrictions
@@ -7632,7 +7209,7 @@ NAME="ENHANCEDBROWSING"
to stay around forever which can be annoying.</P
><P
>In general you should leave this option enabled as it makes
- cross-subnet browse propagation much more reliable.</P
+ cross-subnet browse propogation much more reliable.</P
><P
>Default: <B
CLASS="COMMAND"
@@ -7675,8 +7252,9 @@ CLASS="PARAMETER"
to standard output. This listing will then be used in response
to the level 1 and 2 EnumPorts() RPC.</P
><P
->Default: <EM
->no enumports command</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no enumports command</I
></P
><P
>Example: <B
@@ -7729,7 +7307,7 @@ NAME="FAKEDIRECTORYCREATETIMES"
reported by Samba will be updated whenever a file is created or
or deleted in the directory. NMAKE finds all object files in
the object directory. The timestamp of the last one built is then
- compared to the timestamp of the object directory. If the
+ compared to the timestamp of the object dircetory. If the
directory's timestamp if newer, then all object files
will be rebuilt. Enabling this option
ensures directories always predate their contents and an NMAKE build
@@ -7842,8 +7420,9 @@ NAME="FORCECREATEMODE"
><DD
><P
>This parameter specifies a set of UNIX mode bit
- permissions that will <EM
->always</EM
+ permissions that will <I
+CLASS="EMPHASIS"
+>always</I
> be set on a
file created by Samba. This is done by bitwise 'OR'ing these bits onto
the mode bits of a file that is being created or having its
@@ -7857,22 +7436,6 @@ CLASS="PARAMETER"
>
parameter is applied.</P
><P
->Note that by default this parameter does not apply to permissions
- set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
- this mask on access control lists also, they need to set the <A
-HREF="#RESTRICTACLWITHMASK"
-><TT
-CLASS="PARAMETER"
-><I
->restrict acl with
- mask</I
-></TT
-></A
-> to <TT
-CLASS="CONSTANT"
->true</TT
->.</P
-><P
>See also the parameter <A
HREF="#CREATEMASK"
><TT
@@ -7917,8 +7480,9 @@ NAME="FORCEDIRECTORYMODE"
><DD
><P
>This parameter specifies a set of UNIX mode bit
- permissions that will <EM
->always</EM
+ permissions that will <I
+CLASS="EMPHASIS"
+>always</I
> be set on a directory
created by Samba. This is done by bitwise 'OR'ing these bits onto the
mode bits of a directory that is being created. The default for this
@@ -7932,22 +7496,6 @@ CLASS="PARAMETER"
> is
applied.</P
><P
->Note that by default this parameter does not apply to permissions
- set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
- this mask on access control lists also, they need to set the <A
-HREF="#RESTRICTACLWITHMASK"
-><TT
-CLASS="PARAMETER"
-><I
->restrict acl with
- mask</I
-></TT
-></A
-> to <TT
-CLASS="CONSTANT"
->true</TT
->.</P
-><P
>See also the parameter <A
HREF="#DIRECTORYMASK"
><TT
@@ -8001,17 +7549,28 @@ NAME="FORCEDIRECTORYSECURITYMODE"
mask may be treated as a set of bits that, when modifying security
on a directory, the user has always set to be 'on'.</P
><P
->If not set explicitly this parameter is 000, which
- allows a user to modify all the user/group/world permissions on a
- directory without restrictions.</P
+>If not set explicitly this parameter is set to the same
+ value as the <A
+HREF="#FORCEDIRECTORYMODE"
+><TT
+CLASS="PARAMETER"
+><I
+>force
+ directory mode</I
+></TT
+></A
+> parameter. To allow
+ a user to modify all the user/group/world permissions on a
+ directory without restrictions, set this parameter to 000.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that users who can access the
Samba server through other means can easily bypass this restriction,
so it is primarily useful for standalone "appliance" systems.
- Administrators of most normal systems will probably want to leave
- it set as 0000.</P
+ Administrators of most normal systems will probably want to set
+ it to 0000.</P
><P
>See also the <A
HREF="#DIRECTORYSECURITYMASK"
@@ -8043,12 +7602,13 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->force directory security mode = 0</B
+>force directory security mode = &lt;same as
+ force directory mode&gt;</B
></P
><P
>Example: <B
CLASS="COMMAND"
->force directory security mode = 700</B
+>force directory security mode = 0</B
></P
></DD
><DT
@@ -8116,8 +7676,9 @@ CLASS="PARAMETER"
></A
>.</P
><P
->Default: <EM
->no forced group</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no forced group</I
></P
><P
>Example: <B
@@ -8143,17 +7704,28 @@ NAME="FORCESECURITYMODE"
mask may be treated as a set of bits that, when modifying security
on a file, the user has always set to be 'on'.</P
><P
->If not set explicitly this parameter is set to 0,
- and allows a user to modify all the user/group/world permissions on a file,
- with no restrictions.</P
+>If not set explicitly this parameter is set to the same
+ value as the <A
+HREF="#FORCECREATEMODE"
+><TT
+CLASS="PARAMETER"
+><I
+>force
+ create mode</I
+></TT
+></A
+> parameter. To allow a user to
+ modify all the user/group/world permissions on a file, with no
+ restrictions set this parameter to 000.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that users who can access
the Samba server through other means can easily bypass this restriction,
so it is primarily useful for standalone "appliance" systems.
- Administrators of most normal systems will probably want to leave
- this set to 0000.</P
+ Administrators of most normal systems will probably want to set
+ it to 0000.</P
><P
>See also the <A
HREF="#FORCEDIRECTORYSECURITYMODE"
@@ -8185,12 +7757,13 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->force security mode = 0</B
+>force security mode = &lt;same as force
+ create mode&gt;</B
></P
><P
>Example: <B
CLASS="COMMAND"
->force security mode = 700</B
+>force security mode = 0</B
></P
></DD
><DT
@@ -8227,8 +7800,9 @@ CLASS="PARAMETER"
></A
></P
><P
->Default: <EM
->no forced user</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no forced user</I
></P
><P
>Example: <B
@@ -8299,7 +7873,7 @@ CLASS="PARAMETER"
</A
>parameter is set to <TT
CLASS="CONSTANT"
->false</TT
+>False</TT
>.</P
><P
>Default: <B
@@ -8363,9 +7937,10 @@ CLASS="COMMAND"
> lp(1)</B
>.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>specified at compile time, usually
- "nobody"</EM
+ "nobody"</I
></P
><P
>Example: <B
@@ -8517,8 +8092,9 @@ CLASS="PARAMETER"
></A
>.</P
><P
->Default: <EM
->no file are hidden</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no file are hidden</I
></P
><P
>Example: <B
@@ -8569,7 +8145,7 @@ CLASS="PARAMETER"
></A
> is <TT
CLASS="CONSTANT"
->true</TT
+>True</TT
>, and <A
HREF="smbd.8.html"
TARGET="_top"
@@ -8598,8 +8174,9 @@ CLASS="COMMAND"
that copes with different map formats and also Amd (another
automounter) maps.</P
><P
-><EM
->NOTE :</EM
+><I
+CLASS="EMPHASIS"
+>NOTE :</I
>A working NIS client is required on
the system for this option to work.</P
><P
@@ -8625,7 +8202,7 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->homedir map = &#60;empty string&#62;</B
+>homedir map = &lt;empty string&gt;</B
></P
><P
>Example: <B
@@ -8722,8 +8299,9 @@ CLASS="PARAMETER"
><P
>You can also specify hosts by network/netmask pairs and
by netgroup names if your system supports netgroups. The
- <EM
->EXCEPT</EM
+ <I
+CLASS="EMPHASIS"
+>EXCEPT</I
> keyword can also be used to limit a
wildcard list. The following examples may provide some help:</P
><P
@@ -8774,9 +8352,10 @@ CLASS="COMMAND"
> for a way of testing your host access to see if it does
what you expect.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>none (i.e., all hosts permitted access)
- </EM
+ </I
></P
><P
>Example: <B
@@ -8798,8 +8377,9 @@ CLASS="PARAMETER"
>hosts allow</I
></TT
>
- - hosts listed here are <EM
->NOT</EM
+ - hosts listed here are <I
+CLASS="EMPHASIS"
+>NOT</I
> permitted access to
services unless the specific services have their own lists to override
this one. Where the lists conflict, the <TT
@@ -8810,9 +8390,10 @@ CLASS="PARAMETER"
>
list takes precedence.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>none (i.e., no hosts specifically excluded)
- </EM
+ </I
></P
><P
>Example: <B
@@ -8848,10 +8429,11 @@ CLASS="PARAMETER"
> hosts equiv</I
></TT
> may be useful for NT clients which will
- not supply passwords to Samba.</P
+ not supply passwords to samba.</P
><P
-><EM
->NOTE :</EM
+><I
+CLASS="EMPHASIS"
+>NOTE :</I
> The use of <TT
CLASS="PARAMETER"
><I
@@ -8868,13 +8450,15 @@ CLASS="PARAMETER"
></TT
> option be only used if you really
know what you are doing, or perhaps on a home network where you trust
- your spouse and kids. And only if you <EM
->really</EM
+ your spouse and kids. And only if you <I
+CLASS="EMPHASIS"
+>really</I
> trust
them :-).</P
><P
->Default: <EM
->no host equivalences</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no host equivalences</I
></P
><P
>Example: <B
@@ -8912,8 +8496,9 @@ CLASS="PARAMETER"
>.
</P
><P
->Default: <EM
->no file included</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no file included</I
></P
><P
>Example: <B
@@ -9001,13 +8586,14 @@ CLASS="PARAMETER"
</A
> as usual.</P
><P
->Note that the setuid bit is <EM
->never</EM
+>Note that the setuid bit is <I
+CLASS="EMPHASIS"
+>never</I
> set via
inheritance (the code explicitly prohibits this).</P
><P
>This can be particularly useful on large systems with
- many users, perhaps several thousand, to allow a single [homes]
+ many users, perhaps several thousand,to allow a single [homes]
share to be used flexibly by each user.</P
><P
>See also <A
@@ -9122,9 +8708,10 @@ CLASS="PARAMETER"
></A
>.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>all active interfaces except 127.0.0.1
- that are broadcast capable</EM
+ that are broadcast capable</I
></P
></DD
><DT
@@ -9135,8 +8722,9 @@ NAME="INVALIDUSERS"
><DD
><P
>This is a list of users that should not be allowed
- to login to this service. This is really a <EM
->paranoid</EM
+ to login to this service. This is really a <I
+CLASS="EMPHASIS"
+>paranoid</I
>
check to absolutely ensure an improper setting does not breach
your security.</P
@@ -9153,7 +8741,7 @@ NAME="INVALIDUSERS"
so the value <TT
CLASS="PARAMETER"
><I
->+&#38;group</I
+>+&amp;group</I
></TT
> means check the
UNIX group database, followed by the NIS netgroup database, and
@@ -9185,8 +8773,9 @@ CLASS="PARAMETER"
></A
>.</P
><P
->Default: <EM
->no invalid users</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no invalid users</I
></P
><P
>Example: <B
@@ -9270,8 +8859,9 @@ CLASS="COMMAND"
>
</A
> has oplocked. This allows complete data consistency between
- SMB/CIFS, NFS and local file access (and is a <EM
->very</EM
+ SMB/CIFS, NFS and local file access (and is a <I
+CLASS="EMPHASIS"
+>very</I
>
cool feature :-).</P
><P
@@ -9317,12 +8907,8 @@ NAME="LANMANAUTH"
>lanman auth (G)</DT
><DD
><P
->This parameter determines whether or not <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
-> will
- attempt to authenticate users using the LANMAN password hash.
+>This parameter determines whether or not smbd will
+ attempt to authentication users using the LANMAN password hash.
If disabled, only clients which support NT password hashes (e.g. Windows
NT/2000 clients, smbclient, etc... but not Windows 95/98 or the MS DOS
network client) will be able to connect to the Samba host.</P
@@ -9385,10 +8971,7 @@ CLASS="PARAMETER"
></TT
>
</A
-> parameter must be set to <TT
-CLASS="CONSTANT"
->true</TT
-> on this share in order for
+> parameter must be set to "true" on this share in order for
this parameter to have any effect.</P
><P
>See also the <A
@@ -9581,38 +9164,32 @@ CLASS="COMMAND"
> to try and become a local master browser
on a subnet. If set to <TT
CLASS="CONSTANT"
->false</TT
+>False</TT
> then <B
CLASS="COMMAND"
> nmbd</B
> will not attempt to become a local master browser
on a subnet and will also lose in all browsing elections. By
- default this value is set to <TT
-CLASS="CONSTANT"
->true</TT
->. Setting this value to <TT
-CLASS="CONSTANT"
->true</TT
-> doesn't
- mean that Samba will <EM
->become</EM
+ default this value is set to true. Setting this value to true doesn't
+ mean that Samba will <I
+CLASS="EMPHASIS"
+>become</I
> the local master
browser on a subnet, just that <B
CLASS="COMMAND"
>nmbd</B
-> will <EM
-> participate</EM
+> will <I
+CLASS="EMPHASIS"
+> participate</I
> in elections for local master browser.</P
><P
->Setting this value to <TT
-CLASS="CONSTANT"
->false</TT
-> will cause <B
+>Setting this value to False will cause <B
CLASS="COMMAND"
>nmbd</B
>
- <EM
->never</EM
+ <I
+CLASS="EMPHASIS"
+>never</I
> to become a local master browser.</P
><P
>Default: <B
@@ -9692,13 +9269,15 @@ CLASS="COMMAND"
>, real locking will be performed
by the server.</P
><P
->This option <EM
->may</EM
+>This option <I
+CLASS="EMPHASIS"
+>may</I
> be useful for read-only
- filesystems which <EM
->may</EM
+ filesystems which <I
+CLASS="EMPHASIS"
+>may</I
> not need locking (such as
- CDROM drives), although setting this parameter of <TT
+ cdrom drives), although setting this parameter of <TT
CLASS="CONSTANT"
>no</TT
>
@@ -9739,21 +9318,15 @@ NAME="LOGLEVEL"
>log level (G)</DT
><DD
><P
->The value of the parameter (an integer) allows
- the debug level (logging level) to be specified in the
- <TT
-CLASS="FILENAME"
->smb.conf</TT
-> file. This is to give greater
- flexibility in the configuration of the system.</P
-><P
->The default will be the log level specified on
- the command line or level zero if none was specified.</P
-><P
->Example: <B
-CLASS="COMMAND"
->log level = 3</B
-></P
+>Synonym for <A
+HREF="#DEBUGLEVEL"
+><TT
+CLASS="PARAMETER"
+><I
+> debug level</I
+></TT
+></A
+>.</P
></DD
><DT
><A
@@ -9911,15 +9484,16 @@ CLASS="FILENAME"
><P
>The share and the path must be readable by the user for
the preferences and directories to be loaded onto the Windows NT
- client. The share must be writeable when the user logs in for the first
+ client. The share must be writeable when the logs in for the first
time, in order that the Windows NT client can create the NTuser.dat
and other directories.</P
><P
>Thereafter, the directories and any of the contents can,
if required, be made read-only. It is not advisable that the
NTuser.dat file be made read-only - rename it to NTuser.man to
- achieve the desired effect (a <EM
->MAN</EM
+ achieve the desired effect (a <I
+CLASS="EMPHASIS"
+>MAN</I
>datory
profile). </P
><P
@@ -9955,7 +9529,7 @@ NAME="LOGONSCRIPT"
>This parameter specifies the batch file (.bat) or
NT command file (.cmd) to be downloaded and run on a machine when
a user successfully logs in. The file must contain the DOS
- style CR/LF line endings. Using a DOS-style editor to create the
+ style cr/lf line endings. Using a DOS-style editor to create the
file is recommended.</P
><P
>The script must be a relative path to the [netlogon]
@@ -9982,7 +9556,7 @@ CLASS="FILENAME"
>/usr/local/samba/netlogon/STARTUP.BAT</TT
></P
><P
->The contents of the batch file are entirely your choice. A
+>The contents of the batch file is entirely your choice. A
suggested command would be to add <B
CLASS="COMMAND"
>NET TIME \\SERVER /SET
@@ -10009,8 +9583,9 @@ CLASS="COMMAND"
>This option is only useful if Samba is set up as a logon
server.</P
><P
->Default: <EM
->no logon script defined</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no logon script defined</I
></P
><P
>Example: <B
@@ -10039,7 +9614,7 @@ CLASS="PARAMETER"
><I
>%p</I
></TT
-> is given then the printer name
+> is given then the printername
is put in its place. A <TT
CLASS="PARAMETER"
><I
@@ -10220,7 +9795,7 @@ CLASS="PARAMETER"
><I
>%p</I
></TT
-> is given then the printer name
+> is given then the printername
is put in its place. Otherwise it is placed at the end of the
command.</P
><P
@@ -10247,13 +9822,14 @@ CLASS="PARAMETER"
></A
> parameter.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>depends on the setting of <TT
CLASS="PARAMETER"
><I
> printing</I
></TT
-></EM
+></I
></P
><P
>Example: <B
@@ -10290,7 +9866,7 @@ CLASS="PARAMETER"
><I
>%p</I
></TT
-> is given then the printer name
+> is given then the printername
is put in its place. A <TT
CLASS="PARAMETER"
><I
@@ -10376,7 +9952,7 @@ CLASS="PARAMETER"
><I
>%p</I
></TT
-> is given then the printer name
+> is given then the printername
is put in its place. A <TT
CLASS="PARAMETER"
><I
@@ -10405,14 +9981,15 @@ CLASS="PARAMETER"
></A
> parameter.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>depends on the setting of <TT
CLASS="PARAMETER"
><I
>printing
</I
></TT
-></EM
+></I
></P
><P
>Example 1: <B
@@ -10434,7 +10011,7 @@ NAME="MACHINEPASSWORDTIMEOUT"
>machine password timeout (G)</DT
><DD
><P
->If a Samba server is a member of a Windows
+>If a Samba server is a member of an Windows
NT Domain (see the <A
HREF="#SECURITYEQUALSDOMAIN"
>security=domain</A
@@ -10501,7 +10078,7 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->magic output = &#60;magic script name&#62;.out
+>magic output = &lt;magic script name&gt;.out
</B
></P
><P
@@ -10523,8 +10100,8 @@ NAME="MAGICSCRIPT"
executed on behalf of the connected user.</P
><P
>Scripts executed in this way will be deleted upon
- completion assuming that the user has the appropriate level
- of privilege and the file permissions allow the deletion.</P
+ completion assuming that the user has the appripriate level
+ of priviledge and the ile permissions allow the deletion.</P
><P
>If the script generates output, output will be sent to
the file specified by the <A
@@ -10540,20 +10117,24 @@ CLASS="PARAMETER"
>Note that some shells are unable to interpret scripts
containing CR/LF instead of CR as
the end-of-line marker. Magic scripts must be executable
- <EM
->as is</EM
+ <I
+CLASS="EMPHASIS"
+>as is</I
> on the host, which for some hosts and
some shells will require filtering at the DOS end.</P
><P
->Magic scripts are <EM
->EXPERIMENTAL</EM
+>Magic scripts are <I
+CLASS="EMPHASIS"
+>EXPERIMENTAL</I
> and
- should <EM
->NOT</EM
+ should <I
+CLASS="EMPHASIS"
+>NOT</I
> be relied upon.</P
><P
->Default: <EM
->None. Magic scripts disabled.</EM
+>Default: <I
+CLASS="EMPHASIS"
+>None. Magic scripts disabled.</I
></P
><P
>Example: <B
@@ -10586,7 +10167,7 @@ NAME="MANGLEDMAP"
><DD
><P
>This is for those who want to directly map UNIX
- file names which cannot be represented on Windows/DOS. The mangling
+ file names which can not be represented on Windows/DOS. The mangling
of names is not always what is needed. In particular you may have
documents with file extensions that differ between DOS and UNIX.
For example, under UNIX it is common to use <TT
@@ -10617,11 +10198,12 @@ CLASS="COMMAND"
CLASS="FILENAME"
>;1
</TT
-> off the ends of filenames on some CDROMs (only visible
+> off the ends of filenames on some CDROMS (only visible
under some UNIXes). To do this use a map of (*;1 *;).</P
><P
->Default: <EM
->no mangled map</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no mangled map</I
></P
><P
>Example: <B
@@ -10734,12 +10316,12 @@ TARGET="_top"
><P
>The larger this value, the more likely it is that mangled
names can be successfully converted to correct long UNIX names.
- However, large stack sizes will slow most directory accesses. Smaller
+ However, large stack sizes will slow most directory access. Smaller
stacks save memory in the server (each stack element costs 256 bytes).
</P
><P
>It is not possible to absolutely guarantee correct long
- filenames, so be prepared for some surprises!</P
+ file names, so be prepared for some surprises!</P
><P
>Default: <B
CLASS="COMMAND"
@@ -10759,8 +10341,9 @@ NAME="MANGLINGCHAR"
><DD
><P
>This controls what character is used as
- the <EM
->magic</EM
+ the <I
+CLASS="EMPHASIS"
+>magic</I
> character in <A
HREF="#AEN201"
>name mangling</A
@@ -10961,8 +10544,9 @@ HREF="#GUESTACCOUNT"
will not know the reason they cannot access files they think
they should - there will have been no message given to them
that they got their password wrong. Helpdesk services will
- <EM
->hate</EM
+ <I
+CLASS="EMPHASIS"
+>hate</I
> you if you set the <TT
CLASS="PARAMETER"
><I
@@ -10981,8 +10565,9 @@ CLASS="PARAMETER"
></TT
> modes other than
share. This is because in these modes the name of the resource being
- requested is <EM
->not</EM
+ requested is <I
+CLASS="EMPHASIS"
+>not</I
> sent to the server until after
the server has successfully authenticated the client so the server
cannot make authentication decisions at the correct time (connection
@@ -11124,7 +10709,7 @@ NAME="MAXMUX"
><DD
><P
>This option controls the maximum number of
- outstanding simultaneous SMB operations that Samba tells the client
+ outstanding simultaneous SMB operations that samba tells the client
it will allow. You should never need to set this parameter.</P
><P
>Default: <B
@@ -11232,8 +10817,9 @@ CLASS="CONSTANT"
><TT
CLASS="CONSTANT"
>LANMAN1</TT
->: First <EM
-> modern</EM
+>: First <I
+CLASS="EMPHASIS"
+> modern</I
> version of the protocol. Long filename
support.</P
></LI
@@ -11297,14 +10883,10 @@ CLASS="COMMAND"
></A
>
processes concurrently running on a system and is intended
- as a stopgap to prevent degrading service to clients in the event
+ as a stop gap to prevent degrading service to clients in the event
that the server has insufficient resources to handle more than this
number of connections. Remember that under normal operating
- conditions, each user will have an <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
-> associated with him or her
+ conditions, each user will have an smbd associated with him or her
to handle connections to all shares from a given host.
</P
><P
@@ -11436,13 +11018,14 @@ CLASS="COMMAND"
CLASS="COMMAND"
>xedit</B
>, then
- removes it afterwards. <EM
+ removes it afterwards. <I
+CLASS="EMPHASIS"
>NOTE THAT IT IS VERY IMPORTANT
- THAT THIS COMMAND RETURN IMMEDIATELY</EM
+ THAT THIS COMMAND RETURN IMMEDIATELY</I
>. That's why I
have the '&#38;' on the end. If it doesn't return immediately then
your PCs may freeze when sending messages (they should recover
- after 30 seconds, hopefully).</P
+ after 30secs, hopefully).</P
><P
>All messages are delivered as the global guest user.
The command takes the standard substitutions, although <TT
@@ -11504,7 +11087,7 @@ CLASS="PARAMETER"
><B
CLASS="COMMAND"
>message command = /bin/mail -s 'message from %f on
- %m' root &#60; %s; rm %s</B
+ %m' root &lt; %s; rm %s</B
></P
><P
>If you don't have a message command then the message
@@ -11520,8 +11103,9 @@ CLASS="COMMAND"
>message command = rm %s</B
></P
><P
->Default: <EM
->no message command</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no message command</I
></P
><P
>Example: <B
@@ -11891,8 +11475,9 @@ CLASS="PARAMETER"
></A
>.</P
><P
->Default: <EM
->empty string (no additional names)</EM
+>Default: <I
+CLASS="EMPHASIS"
+>empty string (no additional names)</I
></P
><P
>Example: <B
@@ -11925,8 +11510,9 @@ CLASS="PARAMETER"
></A
>.</P
><P
->Default: <EM
->machine DNS name</EM
+>Default: <I
+CLASS="EMPHASIS"
+>machine DNS name</I
></P
><P
>Example: <B
@@ -12091,36 +11677,6 @@ CLASS="COMMAND"
></DD
><DT
><A
-NAME="OBEYPAMRESTRICTIONS"
-></A
->obey pam restrictions (G)</DT
-><DD
-><P
->When Samba 2.2 is configure 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
- and to ignore any account or session management. Note that Samba
- always ignores PAM for authentication in the case of <A
-HREF="#ENCRYPTPASSWORDS"
-><TT
-CLASS="PARAMETER"
-><I
->encrypt passwords = yes</I
-></TT
->
- </A
->. The reason is that PAM modules cannot support the challenge/response
- authentication mechanism needed in the presence of SMB password encryption.
- </P
-><P
->Default: <B
-CLASS="COMMAND"
->obey pam restrictions = no</B
-></P
-></DD
-><DT
-><A
NAME="ONLYUSER"
></A
>only user (S)</DT
@@ -12181,6 +11737,30 @@ CLASS="COMMAND"
></DD
><DT
><A
+NAME="OLELOCKINGCOMPATIBILITY"
+></A
+>ole locking compatibility (G)</DT
+><DD
+><P
+>This parameter allows an administrator to turn
+ off the byte range lock manipulation that is done within Samba to
+ give compatibility for OLE applications. Windows OLE applications
+ use byte range locking as a form of inter-process communication, by
+ locking ranges of bytes around the 2^32 region of a file range. This
+ can cause certain UNIX lock managers to crash or otherwise cause
+ problems. Setting this parameter to <TT
+CLASS="CONSTANT"
+>no</TT
+> means you
+ trust your UNIX lock manager to handle such cases correctly.</P
+><P
+>Default: <B
+CLASS="COMMAND"
+>ole locking compatibility = yes</B
+></P
+></DD
+><DT
+><A
NAME="ONLYGUEST"
></A
>only guest (S)</DT
@@ -12211,9 +11791,10 @@ NAME="OPLOCKBREAKWAITTIME"
is the amount of time Samba will wait before sending an oplock break
request to such (broken) clients.</P
><P
-><EM
+><I
+CLASS="EMPHASIS"
>DO NOT CHANGE THIS PARAMETER UNLESS YOU HAVE READ
- AND UNDERSTOOD THE SAMBA OPLOCK CODE</EM
+ AND UNDERSTOOD THE SAMBA OPLOCK CODE</I
>.</P
><P
>Default: <B
@@ -12228,8 +11809,9 @@ NAME="OPLOCKCONTENTIONLIMIT"
>oplock contention limit (S)</DT
><DD
><P
->This is a <EM
->very</EM
+>This is a <I
+CLASS="EMPHASIS"
+>very</I
> advanced
<A
HREF="smbd.8.html"
@@ -12239,11 +11821,7 @@ TARGET="_top"
improve the efficiency of the granting of oplocks under multiple
client contention for the same file.</P
><P
->In brief it specifies a number, which causes <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
-> not to
+>In brief it specifies a number, which causes smbd not to
grant an oplock even when requested if the approximate number of
clients contending for an oplock on the same file goes over this
limit. This causes <B
@@ -12252,9 +11830,10 @@ CLASS="COMMAND"
> to behave in a similar
way to Windows NT.</P
><P
-><EM
+><I
+CLASS="EMPHASIS"
>DO NOT CHANGE THIS PARAMETER UNLESS YOU HAVE READ
- AND UNDERSTOOD THE SAMBA OPLOCK CODE</EM
+ AND UNDERSTOOD THE SAMBA OPLOCK CODE</I
>.</P
><P
>Default: <B
@@ -12269,10 +11848,7 @@ NAME="OPLOCKS"
>oplocks (S)</DT
><DD
><P
->This boolean option tells <B
-CLASS="COMMAND"
->smbd</B
-> whether to
+>This boolean option tells smbd whether to
issue oplocks (opportunistic locks) to file open requests on this
share. The oplock code can dramatically (approx. 30% or more) improve
the speed of access to files on Samba servers. It allows the clients
@@ -12353,8 +11929,9 @@ CLASS="PARAMETER"
></TT
> in the local broadcast area.</P
><P
-><EM
->Note :</EM
+><I
+CLASS="EMPHASIS"
+>Note :</I
>By default, Samba will win
a local master browsing election over all Microsoft operating
systems except a Windows NT 4.0/2000 Domain Controller. This
@@ -12390,11 +11967,11 @@ NAME="OS2DRIVERMAP"
path to a file containing a mapping of Windows NT printer driver
names to OS/2 printer driver names. The format is:</P
><P
->&#60;nt driver name&#62; = &#60;os2 driver
- name&#62;.&#60;device name&#62;</P
+>&lt;nt driver name&gt; = &lt;os2 driver
+ name&gt;.&lt;device name&gt;</P
><P
>For example, a valid entry using the HP LaserJet 5
- printer driver would appear as <B
+ printer driver woudl appear as <B
CLASS="COMMAND"
>HP LaserJet 5L = LASERJET.HP
LaserJet 5L</B
@@ -12416,39 +11993,12 @@ TARGET="_top"
><P
>Default: <B
CLASS="COMMAND"
->os2 driver map = &#60;empty string&#62;
+>os2 driver map = &lt;empty string&gt;
</B
></P
></DD
><DT
><A
-NAME="PAMPASSWORDCHANGE"
-></A
->pam password change (G)</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, and the <A
-HREF="#PASSWDCHAT"
-><TT
-CLASS="PARAMETER"
-><I
->passwd chat</I
-></TT
-></A
-> must be
- be changed to work with the PAM prompts.
- </P
-><P
->Default: <B
-CLASS="COMMAND"
->pam password change = no</B
-></P
-></DD
-><DT
-><A
NAME="PANICACTION"
></A
>panic action (G)</DT
@@ -12469,7 +12019,7 @@ TARGET="_top"
><P
>Default: <B
CLASS="COMMAND"
->panic action = &#60;empty string&#62;</B
+>panic action = &lt;empty string&gt;</B
></P
><P
>Example: <B
@@ -12484,15 +12034,16 @@ NAME="PASSWDCHAT"
>passwd chat (G)</DT
><DD
><P
->This string controls the <EM
->"chat"</EM
+>This string controls the <I
+CLASS="EMPHASIS"
+>"chat"</I
>
conversation that takes places between <A
HREF="smbd.8.html"
TARGET="_top"
>smbd</A
> and the local password changing
- program to change the user's password. The string describes a
+ program to change the users password. The string describes a
sequence of response-receive pairs that <A
HREF="smbd.8.html"
TARGET="_top"
@@ -12549,8 +12100,8 @@ CLASS="CONSTANT"
in them into a single string.</P
><P
>If the send string in any part of the chat sequence
- is a full stop ".", then no string is sent. Similarly,
- if the expect string is a full stop then no string is expected.</P
+ is a fullstop ".", then no string is sent. Similarly,
+ if the expect string is a fullstop then no string is expected.</P
><P
>Note that if the <A
HREF="#UNIXPASSWORDSYNC"
@@ -12561,38 +12112,15 @@ CLASS="PARAMETER"
password sync</I
></TT
></A
-> parameter is set to <TT
-CLASS="CONSTANT"
->true</TT
->, then this
- sequence is called <EM
->AS ROOT</EM
+> parameter is set to true, then this
+ sequence is called <I
+CLASS="EMPHASIS"
+>AS ROOT</I
> when the SMB password
in the smbpasswd file is being changed, without access to the old
password cleartext. In this case the old password cleartext is set
to "" (the empty string).</P
><P
->Also, if the <A
-HREF="#PAMPASSWORDCHANGE"
-><TT
-CLASS="PARAMETER"
-><I
->pam
- password change</I
-></TT
-></A
-> parameter is set to <TT
-CLASS="CONSTANT"
->true</TT
->, then the
- chat sequence should consist of three elements. The first element should
- match the PAM prompt for the old password, the second element should match
- the PAM prompt for the first request for the new password, and the final
- element should match the PAM prompt for the second request for the new password.
- These matches are done case insensitively. Under most conditions this change
- is done as root so the prompt for the old password will never be matched.
- </P
-><P
>See also <A
HREF="#UNIXPASSWORDSYNC"
><TT
@@ -12610,7 +12138,7 @@ CLASS="PARAMETER"
> passwd program</I
></TT
></A
-> ,<A
+> and <A
HREF="#PASSWDCHATDEBUG"
> <TT
CLASS="PARAMETER"
@@ -12618,14 +12146,6 @@ CLASS="PARAMETER"
>passwd chat debug</I
></TT
></A
-> and <A
-HREF="#PAMPASSWORDCHANGE"
-> <TT
-CLASS="PARAMETER"
-><I
->pam password change</I
-></TT
-></A
>.</P
><P
>Default: <B
@@ -12649,8 +12169,9 @@ NAME="PASSWDCHATDEBUG"
><DD
><P
>This boolean specifies if the passwd chat script
- parameter is run in <EM
->debug</EM
+ parameter is run in <I
+CLASS="EMPHASIS"
+>debug</I
> mode. In this mode the
strings passed to and received from the passwd chat are printed
in the <A
@@ -12729,16 +12250,18 @@ CLASS="PARAMETER"
will be replaced with the user name. The user name is checked for
existence before calling the password changing program.</P
><P
->Also note that many passwd programs insist in <EM
+>Also note that many passwd programs insist in <I
+CLASS="EMPHASIS"
>reasonable
- </EM
+ </I
> passwords, such as a minimum length, or the inclusion
of mixed case chars and digits. This can pose a problem as some clients
(such as Windows for Workgroups) uppercase the password before sending
it.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that if the <TT
CLASS="PARAMETER"
><I
@@ -12747,10 +12270,11 @@ CLASS="PARAMETER"
></TT
> parameter is set to <TT
CLASS="CONSTANT"
->true
+>True
</TT
-> then this program is called <EM
->AS ROOT</EM
+> then this program is called <I
+CLASS="EMPHASIS"
+>AS ROOT</I
>
before the SMB password in the <A
HREF="smbpasswd.5.html"
@@ -12770,11 +12294,13 @@ CLASS="PARAMETER"
>unix password sync</I
></TT
> parameter
- is set this parameter <EM
->MUST USE ABSOLUTE PATHS</EM
+ is set this parameter <I
+CLASS="EMPHASIS"
+>MUST USE ABSOLUTE PATHS</I
>
- for <EM
->ALL</EM
+ for <I
+CLASS="EMPHASIS"
+>ALL</I
> programs called, and must be examined
for security implications. Note that by default <TT
CLASS="PARAMETER"
@@ -12784,7 +12310,7 @@ CLASS="PARAMETER"
></TT
> is set to <TT
CLASS="CONSTANT"
->false</TT
+>False</TT
>.</P
><P
>See also <A
@@ -12913,13 +12439,15 @@ CLASS="PARAMETER"
the "LM1.2X002" or the "NT LM 0.12" protocol, and it must be in
user level security mode.</P
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> Using a password server
means your UNIX box (running Samba) is only as secure as your
- password server. <EM
+ password server. <I
+CLASS="EMPHASIS"
>DO NOT CHOOSE A PASSWORD SERVER THAT
- YOU DON'T COMPLETELY TRUST</EM
+ YOU DON'T COMPLETELY TRUST</I
>.</P
><P
>Never point a Samba server at itself for password
@@ -12976,7 +12504,7 @@ CLASS="PARAMETER"
Primary or Backup Domain controllers to authenticate against by
doing a query for the name <TT
CLASS="CONSTANT"
->WORKGROUP&#60;1C&#62;</TT
+>WORKGROUP&lt;1C&gt;</TT
>
and then contacting each server returned in the list of IP
addresses from the name resolution source. </P
@@ -13031,7 +12559,7 @@ CLASS="COMMAND"
CLASS="COMMAND"
> security=server</B
> mode the network logon will appear to
- come from there rather than from the user's workstation.</P
+ come from there rather than from the users workstation.</P
></LI
></UL
><P
@@ -13048,7 +12576,7 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->password server = &#60;empty string&#62;</B
+>password server = &lt;empty string&gt;</B
>
</P
><P
@@ -13108,8 +12636,9 @@ CLASS="PARAMETER"
></A
> if one was specified.</P
><P
->Default: <EM
->none</EM
+>Default: <I
+CLASS="EMPHASIS"
+>none</I
></P
><P
>Example: <B
@@ -13156,7 +12685,7 @@ NAME="POSTEXEC"
substitutions. The command may be run as the root on some
systems.</P
><P
->An interesting example may be to unmount server
+>An interesting example may be do unmount server
resources:</P
><P
><B
@@ -13175,15 +12704,16 @@ CLASS="PARAMETER"
</A
>.</P
><P
->Default: <EM
->none (no command executed)</EM
+>Default: <I
+CLASS="EMPHASIS"
+>none (no command executed)</I
>
</P
><P
>Example: <B
CLASS="COMMAND"
>postexec = echo \"%u disconnected from %S
- from %m (%I)\" &#62;&#62; /tmp/log</B
+ from %m (%I)\" &gt;&gt; /tmp/log</B
></P
></DD
><DT
@@ -13194,7 +12724,7 @@ NAME="POSTSCRIPT"
><DD
><P
>This parameter forces a printer to interpret
- the print files as PostScript. This is done by adding a <TT
+ the print files as postscript. This is done by adding a <TT
CLASS="CONSTANT"
>%!
</TT
@@ -13251,14 +12781,15 @@ CLASS="PARAMETER"
></A
>.</P
><P
->Default: <EM
->none (no command executed)</EM
+>Default: <I
+CLASS="EMPHASIS"
+>none (no command executed)</I
></P
><P
>Example: <B
CLASS="COMMAND"
>preexec = echo \"%u connected to %S from %m
- (%I)\" &#62;&#62; /tmp/log</B
+ (%I)\" &gt;&gt; /tmp/log</B
></P
></DD
><DT
@@ -13299,10 +12830,7 @@ TARGET="_top"
> is a preferred master browser
for its workgroup.</P
><P
->If this is set to <TT
-CLASS="CONSTANT"
->true</TT
->, on startup, <B
+>If this is set to true, on startup, <B
CLASS="COMMAND"
>nmbd</B
>
@@ -13387,8 +12915,9 @@ CLASS="PARAMETER"
></A
> option is easier.</P
><P
->Default: <EM
->no preloaded services</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no preloaded services</I
></P
><P
>Example: <B
@@ -13469,8 +12998,9 @@ CLASS="PARAMETER"
spool file name is generated automatically by the server, the printer
name is discussed below.</P
><P
->The print command <EM
->MUST</EM
+>The print command <I
+CLASS="EMPHASIS"
+>MUST</I
> contain at least
one occurrence of <TT
CLASS="PARAMETER"
@@ -13528,7 +13058,7 @@ CLASS="PARAMETER"
><P
><B
CLASS="COMMAND"
->print command = echo Printing %s &#62;&#62;
+>print command = echo Printing %s &gt;&gt;
/tmp/print.log; lpr -P %p %s; rm %s</B
></P
><P
@@ -13692,12 +13222,6 @@ CLASS="COMMAND"
><P
>A minimal printcap file would look something like this:</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
> print1|My Printer 1
@@ -13706,17 +13230,15 @@ CLASS="PROGRAMLISTING"
print4|My Printer 4
print5|My Printer 5
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>where the '|' separates aliases of a printer. The fact
that the second alias has a space in it gives a hint to Samba
that it's a comment.</P
><P
-><EM
->NOTE</EM
+><I
+CLASS="EMPHASIS"
+>NOTE</I
>: Under AIX the default printcap
name is <TT
CLASS="FILENAME"
@@ -13755,7 +13277,7 @@ NAME="PRINTERADMIN"
><P
>Default: <B
CLASS="COMMAND"
->printer admin = &#60;empty string&#62;</B
+>printer admin = &lt;empty string&gt;</B
>
</P
><P
@@ -13771,17 +13293,20 @@ NAME="PRINTERDRIVER"
>printer driver (S)</DT
><DD
><P
-><EM
->Note :</EM
->This is a deprecated
+><I
+CLASS="EMPHASIS"
+>Note :</I
+>This is a depreciated
parameter and will be removed in the next major release
following version 2.2. Please see the instructions in
- the <A
-HREF="printer_driver2.html"
-TARGET="_top"
->Samba 2.2. Printing
- HOWTO</A
-> for more information
+ <TT
+CLASS="FILENAME"
+>PRINTER_DRIVER2.txt</TT
+> in the <TT
+CLASS="FILENAME"
+>docs
+ </TT
+> of the Samba distribution for more information
on the new method of loading printer drivers onto a Samba server.
</P
><P
@@ -13829,17 +13354,20 @@ NAME="PRINTERDRIVERFILE"
>printer driver file (G)</DT
><DD
><P
-><EM
->Note :</EM
->This is a deprecated
+><I
+CLASS="EMPHASIS"
+>Note :</I
+>This is a depreciated
parameter and will be removed in the next major release
following version 2.2. Please see the instructions in
- the <A
-HREF="printer_driver2.html"
-TARGET="_top"
->Samba 2.2. Printing
- HOWTO</A
-> for more information
+ <TT
+CLASS="FILENAME"
+>PRINTER_DRIVER2.txt</TT
+> in the <TT
+CLASS="FILENAME"
+>docs
+ </TT
+> of the Samba distribution for more information
on the new method of loading printer drivers onto a Samba server.
</P
><P
@@ -13864,7 +13392,7 @@ CLASS="FILENAME"
</TT
> files found on the Windows 95 client system. For more
details on setting up serving of printer drivers to Windows 95
- clients, see the outdated documentation file in the <TT
+ clients, see the documentation file in the <TT
CLASS="FILENAME"
>docs/</TT
>
@@ -13883,8 +13411,9 @@ CLASS="PARAMETER"
></A
>.</P
><P
->Default: <EM
->None (set in compile).</EM
+>Default: <I
+CLASS="EMPHASIS"
+>None (set in compile).</I
></P
><P
>Example: <B
@@ -13900,17 +13429,20 @@ NAME="PRINTERDRIVERLOCATION"
>printer driver location (S)</DT
><DD
><P
-><EM
->Note :</EM
->This is a deprecated
+><I
+CLASS="EMPHASIS"
+>Note :</I
+>This is a depreciated
parameter and will be removed in the next major release
following version 2.2. Please see the instructions in
- the <A
-HREF="printer_driver2.html"
-TARGET="_top"
->Samba 2.2. Printing
- HOWTO</A
-> for more information
+ <TT
+CLASS="FILENAME"
+>PRINTER_DRIVER2.txt</TT
+> in the <TT
+CLASS="FILENAME"
+>docs
+ </TT
+> of the Samba distribution for more information
on the new method of loading printer drivers onto a Samba server.
</P
><P
@@ -13926,7 +13458,7 @@ CLASS="COMMAND"
><P
>Where MACHINE is the NetBIOS name of your Samba server,
and PRINTER$ is a share you set up for serving printer driver
- files. For more details on setting this up see the outdated documentation
+ files. For more details on setting this up see the documentation
file in the <TT
CLASS="FILENAME"
>docs/</TT
@@ -13970,12 +13502,13 @@ NAME="PRINTERNAME"
name given will be used for any printable service that does
not have its own printer name specified.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>none (but may be <TT
CLASS="CONSTANT"
>lp</TT
>
- on many systems)</EM
+ on many systems)</I
></P
><P
>Example: <B
@@ -14038,7 +13571,7 @@ CLASS="PARAMETER"
>lprm command</I
></TT
> if specified in the
- [global] section.</P
+ [global]f&#62; section.</P
><P
>Currently eight printing styles are supported. They are
<TT
@@ -14131,14 +13664,14 @@ NAME="QUEUEPAUSECOMMAND"
><DD
><P
>This parameter specifies the command to be
- executed on the server host in order to pause the printer queue.</P
+ executed on the server host in order to pause the printerqueue.</P
><P
>This command should be a program or script which takes
- a printer name as its only parameter and stops the printer queue,
+ a printer name as its only parameter and stops the printerqueue,
such that no longer jobs are submitted to the printer.</P
><P
>This command is not supported by Windows for Workgroups,
- but can be issued from the Printers window under Windows 95
+ but can be issued from the Printer's window under Windows 95
and NT.</P
><P
>If a <TT
@@ -14146,7 +13679,7 @@ CLASS="PARAMETER"
><I
>%p</I
></TT
-> is given then the printer name
+> is given then the printername
is put in its place. Otherwise it is placed at the end of the command.
</P
><P
@@ -14154,14 +13687,15 @@ CLASS="PARAMETER"
path in the command as the PATH may not be available to the
server.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>depends on the setting of <TT
CLASS="PARAMETER"
><I
>printing
</I
></TT
-></EM
+></I
></P
><P
>Example: <B
@@ -14177,7 +13711,7 @@ NAME="QUEUERESUMECOMMAND"
><DD
><P
>This parameter specifies the command to be
- executed on the server host in order to resume the printer queue. It
+ executed on the server host in order to resume the printerqueue. It
is the command to undo the behavior that is caused by the
previous parameter (<A
HREF="#QUEUEPAUSECOMMAND"
@@ -14190,11 +13724,11 @@ CLASS="PARAMETER"
>).</P
><P
>This command should be a program or script which takes
- a printer name as its only parameter and resumes the printer queue,
+ a printer name as its only parameter and resumes the printerqueue,
such that queued jobs are resubmitted to the printer.</P
><P
>This command is not supported by Windows for Workgroups,
- but can be issued from the Printers window under Windows 95
+ but can be issued from the Printer's window under Windows 95
and NT.</P
><P
>If a <TT
@@ -14202,7 +13736,7 @@ CLASS="PARAMETER"
><I
>%p</I
></TT
-> is given then the printer name
+> is given then the printername
is put in its place. Otherwise it is placed at the end of the
command.</P
><P
@@ -14210,7 +13744,8 @@ CLASS="PARAMETER"
path in the command as the PATH may not be available to the
server.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>depends on the setting of <A
HREF="#PRINTING"
><TT
@@ -14219,7 +13754,7 @@ CLASS="PARAMETER"
>printing</I
></TT
></A
-></EM
+></I
>
</P
><P
@@ -14303,7 +13838,7 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->read list = &#60;empty string&#62;</B
+>read list = &lt;empty string&gt;</B
></P
><P
>Example: <B
@@ -14431,10 +13966,7 @@ CLASS="COMMAND"
192.168.4.255/STAFF</B
></P
><P
->the above line would cause <B
-CLASS="COMMAND"
->nmbd</B
-> to announce itself
+>the above line would cause nmbd to announce itself
to the two given IP addresses using the given workgroup names.
If you leave out the workgroup name then the one given in
the <A
@@ -14463,7 +13995,7 @@ CLASS="FILENAME"
><P
>Default: <B
CLASS="COMMAND"
->remote announce = &#60;empty string&#62;
+>remote announce = &lt;empty string&gt;
</B
></P
></DD
@@ -14479,10 +14011,10 @@ HREF="nmbd.8.html"
TARGET="_top"
>nmbd(8)</A
> to periodically request
- synchronization of browse lists with the master browser of a Samba
+ synchronization of browse lists with the master browser of a samba
server that is on a remote segment. This option will allow you to
gain browse lists for multiple workgroups across routed networks. This
- is done in a manner that does not work with any non-Samba servers.</P
+ is done in a manner that does not work with any non-samba servers.</P
><P
>This is useful if you want your Samba server and all local
clients to appear in a remote workgroup for which the normal browse
@@ -14509,133 +14041,25 @@ CLASS="COMMAND"
of known browse masters if your network config is that stable. If
a machine IP address is given Samba makes NO attempt to validate
that the remote machine is available, is listening, nor that it
- is in fact the browse master on its segment.</P
+ is in fact the browse master on it's segment.</P
><P
>Default: <B
CLASS="COMMAND"
->remote browse sync = &#60;empty string&#62;
+>remote browse sync = &lt;empty string&gt;
</B
></P
></DD
><DT
><A
-NAME="RESTRICTACLWITHMASK"
-></A
->restrict acl with mask (S)</DT
-><DD
-><P
->This is a boolean parameter. If set to <TT
-CLASS="CONSTANT"
->false</TT
-> (default), then
- creation of files with access control lists (ACLS) and modification of ACLs
- using the Windows NT/2000 ACL editor will be applied directly to the file
- or directory.</P
-><P
->If set to <TT
-CLASS="CONSTANT"
->true</TT
->, then all requests to set an ACL on a file will have the
- parameters <A
-HREF="#CREATEMASK"
-><TT
-CLASS="PARAMETER"
-><I
->create mask</I
-></TT
-></A
->,
- <A
-HREF="#FORCECREATEMODE"
-><TT
-CLASS="PARAMETER"
-><I
->force create mode</I
-></TT
-></A
->
- applied before setting the ACL, and all requests to set an ACL on a directory will
- have the parameters <A
-HREF="#DIRECTORYMASK"
-><TT
-CLASS="PARAMETER"
-><I
->directory
- mask</I
-></TT
-></A
->, <A
-HREF="#FORCEDIRECTORYMODE"
-><TT
-CLASS="PARAMETER"
-><I
->force
- directory mode</I
-></TT
-></A
-> applied before setting the ACL.
- </P
-><P
->See also <A
-HREF="#CREATEMASK"
-><TT
-CLASS="PARAMETER"
-><I
->create mask</I
-></TT
-></A
->,
- <A
-HREF="#FORCECREATEMODE"
-><TT
-CLASS="PARAMETER"
-><I
->force create mode</I
-></TT
-></A
->,
- <A
-HREF="#DIRECTORYMASK"
-><TT
-CLASS="PARAMETER"
-><I
->directory mask</I
-></TT
-></A
->,
- <A
-HREF="#FORCEDIRECTORYMODE"
-><TT
-CLASS="PARAMETER"
-><I
->force directory mode</I
-></TT
-></A
->
- </P
-><P
->Default: <B
-CLASS="COMMAND"
->restrict acl with mask = no</B
-></P
-></DD
-><DT
-><A
NAME="RESTRICTANONYMOUS"
></A
>restrict anonymous (G)</DT
><DD
><P
->This is a boolean parameter. If it is <TT
-CLASS="CONSTANT"
->true</TT
->, then
+>This is a boolean parameter. If it is true, then
anonymous access to the server will be restricted, namely in the
case where the server is expecting the client to send a username,
- but it doesn't. Setting it to <TT
-CLASS="CONSTANT"
->true</TT
-> will force these anonymous
+ but it doesn't. Setting it to true will force these anonymous
connections to be denied, and the client will be required to always
supply a username and password when connecting. Use of this parameter
is only recommended for homogeneous NT client environments.</P
@@ -14645,13 +14069,10 @@ CLASS="CONSTANT"
likes to use anonymous connections when refreshing the share list,
and this is a way to work around that.</P
><P
->When restrict anonymous is <TT
-CLASS="CONSTANT"
->true</TT
->, all anonymous connections
+>When restrict anonymous is true, all anonymous connections
are denied no matter what they are for. This can effect the ability
- of a machine to access the Samba Primary Domain Controller to revalidate
- its machine account after someone else has logged on the client
+ of a machine to access the samba Primary Domain Controller to revalidate
+ it's machine account after someone else has logged on the client
interactively. The NT client will display a message saying that
the machine's account in the domain doesn't exist or the password is
bad. The best way to deal with this is to reboot NT client machines
@@ -14708,7 +14129,7 @@ NAME="ROOTDIRECTORY"
CLASS="COMMAND"
>chroot()</B
> (i.e.
- Change its root directory) to this directory on startup. This is
+ Change it's root directory) to this directory on startup. This is
not strictly necessary for secure operation. Even without it the
server will deny access to files not in one of the service entries.
It may also check for, and deny access to, soft links to other
@@ -14738,8 +14159,9 @@ CLASS="PARAMETER"
>root directory</I
></TT
>
- option, <EM
->including</EM
+ option, <I
+CLASS="EMPHASIS"
+>including</I
> some files needed for
complete operation of the server. To maintain full operability
of the server you will need to mirror some system files
@@ -14782,7 +14204,7 @@ CLASS="PARAMETER"
>
parameter except that the command is run as root. This
is useful for unmounting filesystems
- (such as CDROMs) after a connection is closed.</P
+ (such as cdroms) after a connection is closed.</P
><P
>See also <A
HREF="#POSTEXEC"
@@ -14796,7 +14218,7 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->root postexec = &#60;empty string&#62;
+>root postexec = &lt;empty string&gt;
</B
></P
></DD
@@ -14814,8 +14236,8 @@ CLASS="PARAMETER"
></TT
>
parameter except that the command is run as root. This
- is useful for mounting filesystems (such as CDROMs) when a
- connection is opened.</P
+ is useful for mounting filesystems (such as cdroms) after a
+ connection is closed.</P
><P
>See also <A
HREF="#PREEXEC"
@@ -14837,7 +14259,7 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->root preexec = &#60;empty string&#62;
+>root preexec = &lt;empty string&gt;
</B
></P
></DD
@@ -14972,8 +14394,9 @@ CLASS="PARAMETER"
>It is possible to use <B
CLASS="COMMAND"
>smbd</B
-> in a <EM
-> hybrid mode</EM
+> in a <I
+CLASS="EMPHASIS"
+> hybrid mode</I
> where it is offers both user and share
level security under different <A
HREF="#NETBIOSALIASES"
@@ -14990,12 +14413,13 @@ CLASS="PARAMETER"
><A
NAME="SECURITYEQUALSSHARE"
></A
-><EM
+><I
+CLASS="EMPHASIS"
>SECURITY = SHARE
- </EM
+ </I
></P
><P
->When clients connect to a share level security server they
+>When clients connect to a share level security server then
need not log onto the server with a valid username and password before
attempting to connect to a shared resource (although modern clients
such as Windows 95/98 and Windows NT will send a logon request with
@@ -15010,8 +14434,9 @@ CLASS="COMMAND"
>Note that <B
CLASS="COMMAND"
>smbd</B
-> <EM
->ALWAYS</EM
+> <I
+CLASS="EMPHASIS"
+>ALWAYS</I
>
uses a valid UNIX user to act on behalf of the client, even in
<B
@@ -15071,9 +14496,10 @@ CLASS="PARAMETER"
></LI
><LI
><P
->If the client did a previous <EM
+>If the client did a previous <I
+CLASS="EMPHASIS"
>logon
- </EM
+ </I
> request (the SessionSetup SMB call) then the
username sent in this SMB will be added as a potential username.
</P
@@ -15128,8 +14554,9 @@ CLASS="PARAMETER"
>, then this
guest user will be used, otherwise access is denied.</P
><P
->Note that it can be <EM
->very</EM
+>Note that it can be <I
+CLASS="EMPHASIS"
+>very</I
> confusing
in share-level security as to which UNIX username will eventually
be used in granting access.</P
@@ -15142,9 +14569,10 @@ HREF="#AEN234"
><A
NAME="SECURITYEQUALSUSER"
></A
-><EM
+><I
+CLASS="EMPHASIS"
>SECURIYT = USER
- </EM
+ </I
></P
><P
>This is the default security setting in Samba 2.2.
@@ -15187,11 +14615,13 @@ CLASS="PARAMETER"
may change the UNIX user to use on this connection, but only after
the user has been successfully authenticated.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that the name of the resource being
- requested is <EM
->not</EM
+ requested is <I
+CLASS="EMPHASIS"
+>not</I
> sent to the server until after
the server has successfully authenticated the client. This is why
guest shares don't work in user level security without allowing
@@ -15223,9 +14653,10 @@ HREF="#AEN234"
><A
NAME="SECURITYEQUALSSERVER"
></A
-><EM
+><I
+CLASS="EMPHASIS"
>SECURITY = SERVER
- </EM
+ </I
></P
><P
>In this mode Samba will try to validate the username/password
@@ -15250,9 +14681,10 @@ CLASS="FILENAME"
> for details on how to set this
up.</P
><P
-><EM
->Note</EM
-> that from the client's point of
+><I
+CLASS="EMPHASIS"
+>Note</I
+> that from the clients point of
view <B
CLASS="COMMAND"
>security = server</B
@@ -15263,11 +14695,13 @@ CLASS="COMMAND"
with the authentication, it does not in any way affect what the
client sees.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that the name of the resource being
- requested is <EM
->not</EM
+ requested is <I
+CLASS="EMPHASIS"
+>not</I
> sent to the server until after
the server has successfully authenticated the client. This is why
guest shares don't work in user level security without allowing
@@ -15319,9 +14753,10 @@ CLASS="PARAMETER"
><A
NAME="SECURITYEQUALSDOMAIN"
></A
-><EM
+><I
+CLASS="EMPHASIS"
>SECURITY = DOMAIN
- </EM
+ </I
></P
><P
>This mode will only work correctly if <A
@@ -15346,15 +14781,17 @@ CLASS="CONSTANT"
it to a Windows NT Primary or Backup Domain Controller, in exactly
the same way that a Windows NT Server would do.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that a valid UNIX user must still
exist as well as the account on the Domain Controller to allow
Samba to have a valid UNIX account to map file access to.</P
><P
-><EM
->Note</EM
-> that from the client's point
+><I
+CLASS="EMPHASIS"
+>Note</I
+> that from the clients point
of view <B
CLASS="COMMAND"
>security = domain</B
@@ -15365,11 +14802,13 @@ CLASS="COMMAND"
>. It only affects how the server deals with the authentication,
it does not in any way affect what the client sees.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that the name of the resource being
- requested is <EM
->not</EM
+ requested is <I
+CLASS="EMPHASIS"
+>not</I
> sent to the server until after
the server has successfully authenticated the client. This is why
guest shares don't work in user level security without allowing
@@ -15393,8 +14832,9 @@ CLASS="PARAMETER"
</A
> parameter for details on doing this.</P
><P
-><EM
->BUG:</EM
+><I
+CLASS="EMPHASIS"
+>BUG:</I
> There is currently a bug in the
implementation of <B
CLASS="COMMAND"
@@ -15459,20 +14899,28 @@ NAME="SECURITYMASK"
mask may be treated as a set of bits the user is not allowed
to change.</P
><P
->If not set explicitly this parameter is 0777, allowing
- a user to modify all the user/group/world permissions on a file.
- </P
+>If not set explicitly this parameter is set to the same
+ value as the <A
+HREF="#CREATEMASK"
+><TT
+CLASS="PARAMETER"
+><I
+>create mask
+ </I
+></TT
+></A
+> parameter. To allow a user to modify all the
+ user/group/world permissions on a file, set this parameter to
+ 0777.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that users who can access the
Samba server through other means can easily bypass this
restriction, so it is primarily useful for standalone
"appliance" systems. Administrators of most normal systems will
- probably want to leave it set to <TT
-CLASS="CONSTANT"
->0777</TT
->.</P
+ probably want to set it to 0777.</P
><P
>See also the <A
HREF="#FORCEDIRECTORYSECURITYMODE"
@@ -15504,12 +14952,13 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->security mask = 0777</B
+>security mask = &lt;same as create mask&gt;
+ </B
></P
><P
>Example: <B
CLASS="COMMAND"
->security mask = 0770</B
+>security mask = 0777</B
></P
></DD
><DT
@@ -15523,7 +14972,7 @@ NAME="SERVERSTRING"
printer comment box in print manager and next to the IPC connection
in <B
CLASS="COMMAND"
->net view</B
+>net view"</B
>. It can be any string that you wish
to show to your users.</P
><P
@@ -15631,8 +15080,9 @@ CLASS="CONSTANT"
>This option gives full share compatibility and enabled
by default.</P
><P
->You should <EM
->NEVER</EM
+>You should <I
+CLASS="EMPHASIS"
+>NEVER</I
> turn this parameter
off as many Windows applications will break if you do so.</P
><P
@@ -15704,7 +15154,7 @@ CLASS="PARAMETER"
>printer admin</I
></TT
> group), the OpenPrinterEx()
- call fails and the client makes another open call with a request for
+ call fails and the clients another open call with a request for
a lower privilege level. This should succeed, however the APW
icon will not be displayed.</P
><P
@@ -15715,8 +15165,9 @@ CLASS="PARAMETER"
></TT
>
parameter will always cause the OpenPrinterEx() on the server
- to fail. Thus the APW icon will never be displayed. <EM
-> Note :</EM
+ to fail. Thus the APW icon will never be displayed. <I
+CLASS="EMPHASIS"
+> Note :</I
>This does not prevent the same user from having
administrative privilege on an individual printer.</P
><P
@@ -15787,7 +15238,7 @@ NAME="SOCKETADDRESS"
support multiple virtual interfaces on the one server, each
with a different configuration.</P
><P
->By default Samba will accept connections on any
+>By default samba will accept connections on any
address.</P
><P
>Example: <B
@@ -15881,8 +15332,9 @@ TARGET="_top"
></LI
></UL
><P
->Those marked with a <EM
->'*'</EM
+>Those marked with a <I
+CLASS="EMPHASIS"
+>'*'</I
> take an integer
argument. The others can optionally take a 1 or 0 argument to enable
or disable the option, by default they will be enabled if you
@@ -15954,8 +15406,9 @@ CLASS="COMMAND"
>SAMBA_NETBIOS_NAME=myhostname</B
></P
><P
->Default: <EM
->No default value</EM
+>Default: <I
+CLASS="EMPHASIS"
+>No default value</I
></P
><P
>Examples: <B
@@ -15985,11 +15438,13 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
@@ -15997,8 +15452,8 @@ CLASS="COMMAND"
it is set to <TT
CLASS="CONSTANT"
>no</TT
->, the SSL-enabled Samba behaves
- exactly like the non-SSL Samba. If set to <TT
+>, the SSL enabled samba behaves
+ exactly like the non-SSL samba. If set to <TT
CLASS="CONSTANT"
>yes</TT
>,
@@ -16041,17 +15496,19 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
>This variable defines where to look up the Certification
Authorities. The given directory should contain one file for
- each CA that Samba will trust. The file name must be the hash
+ each CA that samba will trust. The file name must be the hash
value over the "Distinguished Name" of the CA. How this directory
is set up is explained later in this document. All files within the
directory that don't fit into this naming scheme are ignored. You
@@ -16078,11 +15535,13 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
@@ -16116,11 +15575,13 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
@@ -16143,11 +15604,13 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
@@ -16182,11 +15645,13 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
@@ -16221,11 +15686,13 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
@@ -16271,16 +15738,18 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
->These two variables define whether Samba will go
- into SSL mode or not. If none of them is defined, Samba will
+>These two variables define whether samba will go
+ into SSL mode or not. If none of them is defined, samba will
allow only SSL connections. If the <A
HREF="#SSLHOSTS"
> <TT
@@ -16297,9 +15766,7 @@ CLASS="PARAMETER"
> ssl hosts resign</I
></TT
> variable lists hosts, only these
- hosts will <EM
->NOT</EM
-> be forced into SSL mode. The syntax for these two
+ hosts will NOT be forced into SSL mode. The syntax for these two
variables is the same as for the <A
HREF="#HOSTSALLOW"
><TT
@@ -16325,12 +15792,12 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->ssl hosts = &#60;empty string&#62;</B
+>ssl hosts = &lt;empty string&gt;</B
></P
><P
><B
CLASS="COMMAND"
->ssl hosts resign = &#60;empty string&#62;</B
+>ssl hosts resign = &lt;empty string&gt;</B
></P
><P
>Example: <B
@@ -16353,11 +15820,13 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
@@ -16391,8 +15860,9 @@ CLASS="PARAMETER"
CLASS="CONSTANT"
>no</TT
>, clients don't need certificates.
- Contrary to web applications you really <EM
->should</EM
+ Contrary to web applications you really <I
+CLASS="EMPHASIS"
+>should</I
>
require client certificates. In the web environment the client's
data is sensitive (credit card numbers) and the server must prove
@@ -16419,11 +15889,13 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
@@ -16472,24 +15944,27 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
>This is the file containing the server's certificate.
- The server <EM
->must</EM
+ The server <I
+CLASS="EMPHASIS"
+>must</I
> have a certificate. The
file may also contain the server's private key. See later for
how certificates and private keys are created.</P
><P
>Default: <B
CLASS="COMMAND"
->ssl server cert = &#60;empty string&#62;
+>ssl server cert = &lt;empty string&gt;
</B
></P
></DD
@@ -16508,28 +15983,32 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
>This file contains the private key of the server. If
this variable is not defined, the key is looked up in the
certificate file (it may be appended to the certificate).
- The server <EM
->must</EM
+ The server <I
+CLASS="EMPHASIS"
+>must</I
> have a private key
- and the certificate <EM
->must</EM
+ and the certificate <I
+CLASS="EMPHASIS"
+>must</I
>
match this private key.</P
><P
>Default: <B
CLASS="COMMAND"
->ssl server key = &#60;empty string&#62;
+>ssl server key = &lt;empty string&gt;
</B
></P
></DD
@@ -16548,11 +16027,13 @@ CLASS="COMMAND"
> was
given at configure time.</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that for export control reasons
- this code is <EM
->NOT</EM
+ this code is <I
+CLASS="EMPHASIS"
+>NOT</I
> enabled by default in any
current binary version of Samba.</P
><P
@@ -16669,7 +16150,7 @@ CLASS="CONSTANT"
> the server does file
lock checks only when the client explicitly asks for them.</P
><P
->Well-behaved clients always ask for lock checks when it
+>Well behaved clients always ask for lock checks when it
is important, so in the vast majority of cases <B
CLASS="COMMAND"
>strict
@@ -16698,11 +16179,7 @@ NAME="STRICTSYNC"
CLASS="CONSTANT"
>no</TT
> (the
- default) means that <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
-> ignores the Windows applications requests for
+ default) means that smbd ignores the Windows applications requests for
a sync call. There is only a possibility of losing data if the
operating system itself that Samba is running on crashes, so there is
little danger in this default setting. In addition, this fixes many
@@ -16750,16 +16227,10 @@ NAME="SYNCALWAYS"
><P
>This is a boolean parameter that controls
whether writes will always be written to stable storage before
- the write call returns. If this is <TT
-CLASS="CONSTANT"
->false</TT
-> then the server will be
+ the write call returns. If this is false then the server will be
guided by the client's request in each write call (clients can
set a bit indicating that a particular write should be synchronous).
- If this is <TT
-CLASS="CONSTANT"
->true</TT
-> then every write will be followed by a <B
+ If this is true then every write will be followed by a <B
CLASS="COMMAND"
>fsync()
</B
@@ -16850,8 +16321,9 @@ NAME="TEMPLATEHOMEDIR"
>template homedir (G)</DT
><DD
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> this parameter is
only available in Samba 3.0.</P
><P
@@ -16889,8 +16361,9 @@ NAME="TEMPLATESHELL"
>template shell (G)</DT
><DD
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> this parameter is
only available in Samba 3.0.</P
><P
@@ -16976,11 +16449,7 @@ NAME="TOTALPRINTJOBS"
>This parameter accepts an integer value which defines
a limit on the maximum number of print jobs that will be accepted
system wide at any given time. If a print job is submitted
- by a client which will exceed this number, then <A
-HREF="smbd.8.html"
-TARGET="_top"
->smbd</A
-> will return an
+ by a client which will exceed this number, then smbd will return an
error indicating that no space is available on the server. The
default value of 0 means that no such limit exists. This parameter
can be used to prevent a server from exceeding its capacity and is
@@ -17016,20 +16485,18 @@ NAME="UNIXPASSWORDSYNC"
>This boolean parameter controls whether Samba
attempts to synchronize the UNIX password with the SMB password
when the encrypted SMB password in the smbpasswd file is changed.
- If this is set to <TT
-CLASS="CONSTANT"
->true</TT
-> the program specified in the <TT
+ If this is set to true the program specified in the <TT
CLASS="PARAMETER"
><I
>passwd
program</I
></TT
->parameter is called <EM
->AS ROOT</EM
+>parameter is called <I
+CLASS="EMPHASIS"
+>AS ROOT</I
> -
to allow the new UNIX password to be set without access to the
- old UNIX password (as the SMB password change code has no
+ old UNIX password (as the SMB password has change code has no
access to the old password cleartext, only the new).</P
><P
>See also <A
@@ -17058,6 +16525,23 @@ CLASS="COMMAND"
></DD
><DT
><A
+NAME="UNIXREALNAME"
+></A
+>unix realname (G)</DT
+><DD
+><P
+>This boolean parameter when set causes samba
+ to supply the real name field from the unix password file to
+ the client. This is useful for setting up mail clients and WWW
+ browsers on systems used by more than one person.</P
+><P
+>Default: <B
+CLASS="COMMAND"
+>unix realname = yes</B
+></P
+></DD
+><DT
+><A
NAME="UPDATEENCRYPTED"
></A
>update encrypted (G)</DT
@@ -17118,19 +16602,17 @@ NAME="USERHOSTS"
>use rhosts (G)</DT
><DD
><P
->If this global parameter is <TT
-CLASS="CONSTANT"
->true</TT
->, it specifies
- that the UNIX user's <TT
+>If this global parameter is a true, it specifies
+ that the UNIX users <TT
CLASS="FILENAME"
>.rhosts</TT
> file in their home directory
will be read to find the names of hosts and users who will be allowed
access without specifying a password.</P
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> The use of <TT
CLASS="PARAMETER"
><I
@@ -17247,7 +16729,7 @@ CLASS="PARAMETER"
> parameter.</P
><P
>If any of the usernames begin with a '@' then the name
- will be looked up first in the NIS netgroups list (if Samba
+ will be looked up first in the yp netgroups list (if Samba
is compiled with netgroup support), followed by a lookup in
the UNIX groups database and will expand to a list of all users
in the group of that name.</P
@@ -17257,7 +16739,7 @@ CLASS="PARAMETER"
expand to a list of all users in the group of that name.</P
><P
>If any of the usernames begin with a '&#38;'then the name
- will be looked up only in the NIS netgroups database (if Samba
+ will be looked up only in the yp netgroups database (if Samba
is compiled with netgroup support) and will expand to a list
of all users in the netgroup group of that name.</P
><P
@@ -17275,7 +16757,7 @@ HREF="#AEN234"
>Default: <B
CLASS="COMMAND"
>The guest account if a guest service,
- else &#60;empty string&#62;.</B
+ else &lt;empty string&gt;.</B
></P
><P
>Examples:<B
@@ -17412,20 +16894,11 @@ CLASS="COMMAND"
'!' to tell Samba to stop processing if it gets a match on
that line.</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
> !sys = mary fred
guest = *
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>Note that the remapping is applied to all occurrences
@@ -17462,8 +16935,9 @@ CLASS="PARAMETER"
trouble deleting print jobs as PrintManager under WfWg will think
they don't own the print job.</P
><P
->Default: <EM
->no username map</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no username map</I
></P
><P
>Example: <B
@@ -17483,10 +16957,7 @@ NAME="UTMP"
Samba has been configured and compiled with the option <B
CLASS="COMMAND"
> --with-utmp</B
->. If set to <TT
-CLASS="CONSTANT"
->true</TT
-> then Samba will attempt
+>. If set to True then Samba will attempt
to add utmp or utmpx records (depending on the UNIX system) whenever a
connection is made to a Samba server. Sites may use this to record the
user connecting to a Samba share.</P
@@ -17535,8 +17006,9 @@ CLASS="FILENAME"
>/var/run/utmp</TT
> on Linux).</P
><P
->Default: <EM
->no utmp directory</EM
+>Default: <I
+CLASS="EMPHASIS"
+>no utmp directory</I
></P
></DD
><DT
@@ -17565,28 +17037,20 @@ NAME="VALIDCHARS"
(which is a pointless thing to do as it's already there) you could
do one of the following</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
> valid chars = Z
valid chars = z:Z
valid chars = 0132:0172
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>The last two examples above actually add two characters,
and alter the uppercase and lowercase mappings appropriately.</P
><P
->Note that you <EM
->MUST</EM
+>Note that you <I
+CLASS="EMPHASIS"
+>MUST</I
> specify this parameter
after the <TT
CLASS="PARAMETER"
@@ -17624,9 +17088,10 @@ CLASS="PARAMETER"
></A
> parameter.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>Samba defaults to using a reasonable set
- of valid characters for English systems</EM
+ of valid characters for English systems</I
></P
><P
>Example: <B
@@ -17638,8 +17103,9 @@ CLASS="COMMAND"
>The above example allows filenames to have the Swedish
characters in them.</P
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> It is actually quite difficult to
correctly produce a <TT
CLASS="PARAMETER"
@@ -17714,9 +17180,10 @@ CLASS="PARAMETER"
></A
></P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>No valid users list (anyone can login)
- </EM
+ </I
></P
><P
>Example: <B
@@ -17738,8 +17205,9 @@ NAME="VETOFILES"
or directories as in DOS wildcards.</P
><P
>Each entry must be a unix path, not a DOS path and
- must <EM
->not</EM
+ must <I
+CLASS="EMPHASIS"
+>not</I
> include the unix directory
separator '/'.</P
><P
@@ -17755,8 +17223,9 @@ CLASS="PARAMETER"
to be aware of, is that if a directory contains nothing but files
that match the veto files parameter (which means that Windows/DOS
clients cannot ever see them) is deleted, the veto files within
- that directory <EM
->are automatically deleted</EM
+ that directory <I
+CLASS="EMPHASIS"
+>are automatically deleted</I
> along
with it, if the user has UNIX permissions to do so.</P
><P
@@ -17783,18 +17252,13 @@ CLASS="PARAMETER"
></A
>.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>No files or directories are vetoed.
- </EM
+ </I
></P
><P
->Examples:<TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
-><PRE
+>Examples:<PRE
CLASS="PROGRAMLISTING"
> ; Veto any files containing the word Security,
; any ending in .tmp, and any directory containing the
@@ -17805,9 +17269,6 @@ CLASS="PROGRAMLISTING"
; creates.
veto files = /.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/
</PRE
-></TD
-></TR
-></TABLE
></P
></DD
><DT
@@ -17840,9 +17301,10 @@ CLASS="PARAMETER"
>
parameter.</P
><P
->Default: <EM
+>Default: <I
+CLASS="EMPHASIS"
>No files are vetoed for oplock
- grants</EM
+ grants</I
></P
><P
>You might want to do this on files that you know will
@@ -17875,8 +17337,9 @@ NAME="VFSOBJECT"
with a VFS object. The Samba VFS layer is new to Samba 2.2 and
must be enabled at compile time with --with-vfs.</P
><P
->Default : <EM
->no value</EM
+>Default : <I
+CLASS="EMPHASIS"
+>no value</I
></P
></DD
><DT
@@ -17887,7 +17350,7 @@ NAME="VFSOPTIONS"
><DD
><P
>This parameter allows parameters to be passed
- to the vfs layer at initialization time. The Samba VFS layer
+ to the vfs layer at initialisation time. The Samba VFS layer
is new to Samba 2.2 and must be enabled at compile time
with --with-vfs. See also <A
HREF="#VFSOBJECT"
@@ -17899,8 +17362,9 @@ CLASS="PARAMETER"
></A
>.</P
><P
->Default : <EM
->no value</EM
+>Default : <I
+CLASS="EMPHASIS"
+>no value</I
></P
></DD
><DT
@@ -17914,8 +17378,9 @@ NAME="VOLUME"
returned for a share. Useful for CDROMs with installation programs
that insist on a particular volume label.</P
><P
->Default: <EM
->the name of the share</EM
+>Default: <I
+CLASS="EMPHASIS"
+>the name of the share</I
></P
></DD
><DT
@@ -17947,8 +17412,9 @@ NAME="WINBINDCACHETIME"
>winbind cache time</DT
><DD
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> this parameter is only
available in Samba 3.0.</P
><P
@@ -17973,8 +17439,9 @@ NAME="WINBINDGID"
>winbind gid</DT
><DD
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> this parameter is only
available in Samba 3.0.</P
><P
@@ -17984,12 +17451,12 @@ HREF="winbindd.8.html"
TARGET="_top"
> winbindd(8)</A
> daemon. This range of group ids should have no
- existing local or NIS groups within it as strange conflicts can
+ existing local or nis groups within it as strange conflicts can
occur otherwise.</P
><P
>Default: <B
CLASS="COMMAND"
->winbind gid = &#60;empty string&#62;
+>winbind gid = &lt;empty string&gt;
</B
></P
><P
@@ -18005,8 +17472,9 @@ NAME="WINBINDSEPARATOR"
>winbind separator</DT
><DD
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> this parameter is only
available in Samba 3.0.</P
><P
@@ -18050,8 +17518,9 @@ NAME="WINBINDUID"
>winbind uid</DT
><DD
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> this parameter is only
available in Samba 3.0.</P
><P
@@ -18061,12 +17530,12 @@ HREF="winbindd.8.html"
TARGET="_top"
> winbindd(8)</A
> daemon. This range of ids should have no
- existing local or NIS users within it as strange conflicts can
+ existing local or nis users within it as strange conflicts can
occur otherwise.</P
><P
>Default: <B
CLASS="COMMAND"
->winbind uid = &#60;empty string&#62;
+>winbind uid = &lt;empty string&gt;
</B
></P
><P
@@ -18110,14 +17579,14 @@ CLASS="COMMAND"
></LI
><LI
><P
->The second argument is the NetBIOS name. If the
+>The second argument is the netbios name. If the
name is not a legal name then the wins hook is not called.
Legal names contain only letters, digits, hyphens, underscores
and periods.</P
></LI
><LI
><P
->The third argument is the NetBIOS name
+>The third argument is the netbios name
type as a 2 digit hexadecimal number. </P
></LI
><LI
@@ -18181,8 +17650,9 @@ TARGET="_top"
>You should point this at your WINS server if you have a
multi-subnetted network.</P
><P
-><EM
->NOTE</EM
+><I
+CLASS="EMPHASIS"
+>NOTE</I
>. You need to set up Samba to point
to a WINS server if you have multiple subnets and wish cross-subnet
browsing to work correctly.</P
@@ -18193,8 +17663,9 @@ CLASS="FILENAME"
>
in the docs/ directory of your Samba source distribution.</P
><P
->Default: <EM
->not enabled</EM
+>Default: <I
+CLASS="EMPHASIS"
+>not enabled</I
></P
><P
>Example: <B
@@ -18215,20 +17686,15 @@ TARGET="_top"
>
nmbd(8)</A
> process in Samba will act as a WINS server. You should
- not set this to <TT
-CLASS="CONSTANT"
->true</TT
-> unless you have a multi-subnetted network and
+ not set this to true unless you have a multi-subnetted network and
you wish a particular <B
CLASS="COMMAND"
>nmbd</B
> to be your WINS server.
- Note that you should <EM
->NEVER</EM
-> set this to <TT
-CLASS="CONSTANT"
->true</TT
->
+ Note that you should <I
+CLASS="EMPHASIS"
+>NEVER</I
+> set this to true
on more than one machine in your network.</P
><P
>Default: <B
@@ -18254,8 +17720,9 @@ CLASS="COMMAND"
>
setting.</P
><P
->Default: <EM
->set at compile time to WORKGROUP</EM
+>Default: <I
+CLASS="EMPHASIS"
+>set at compile time to WORKGROUP</I
></P
><P
>Example: <B
@@ -18289,8 +17756,9 @@ NAME="WRITECACHESIZE"
><P
>If this integer parameter is set to non-zero value,
Samba will create an in-memory cache for each oplocked file
- (it does <EM
->not</EM
+ (it does <I
+CLASS="EMPHASIS"
+>not</I
> do this for
non-oplocked files). All writes that the client does not request
to be flushed directly to disk will be stored in this cache if possible.
@@ -18300,7 +17768,7 @@ NAME="WRITECACHESIZE"
within it.</P
><P
>This cache allows Samba to batch client writes into a more
- efficient write size for RAID disks (i.e. writes may be tuned to
+ efficient write size for RAID disks (ie. writes may be tuned to
be the RAID stripe size) and can improve performance on systems
where the disk subsystem is a bottleneck but there is free
memory for userspace programs.</P
@@ -18357,7 +17825,7 @@ CLASS="PARAMETER"
><P
>Default: <B
CLASS="COMMAND"
->write list = &#60;empty string&#62;
+>write list = &lt;empty string&gt;
</B
></P
><P
@@ -18392,7 +17860,7 @@ NAME="WRITERAW"
><DD
><P
>This parameter controls whether or not the server
- will support raw write SMB's when transferring data from clients.
+ will support raw writes SMB's when transferring data from clients.
You should never need to change this parameter.</P
><P
>Default: <B
@@ -18428,8 +17896,9 @@ CLASS="CONSTANT"
CLASS="COMMAND"
>printable = yes</B
>)
- will <EM
->ALWAYS</EM
+ will <I
+CLASS="EMPHASIS"
+>ALWAYS</I
> allow writing to the directory
(user privileges permitting), but only via spooling operations.</P
><P
@@ -18444,7 +17913,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN5825"
+NAME="AEN5654"
></A
><H2
>WARNINGS</H2
@@ -18474,7 +17943,7 @@ TARGET="_top"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN5831"
+NAME="AEN5660"
></A
><H2
>VERSION</H2
@@ -18485,7 +17954,7 @@ NAME="AEN5831"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN5834"
+NAME="AEN5663"
></A
><H2
>SEE ALSO</H2
@@ -18564,7 +18033,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN5854"
+NAME="AEN5683"
></A
><H2
>AUTHOR</H2
diff --git a/docs/htmldocs/smbcacls.1.html b/docs/htmldocs/smbcacls.1.html
index 637720fa6ba..36f570f2a0a 100644
--- a/docs/htmldocs/smbcacls.1.html
+++ b/docs/htmldocs/smbcacls.1.html
@@ -35,7 +35,7 @@ NAME="AEN8"
><P
><B
CLASS="COMMAND"
->smbcacls</B
+>nmblookup</B
> {//server/share} {filename} [-U username] [-A acls] [-M acls] [-D acls] [-S acls] [-C name] [-G name] [-n] [-h]</P
></DIV
><DIV
@@ -52,24 +52,18 @@ TARGET="_top"
> Samba</A
> suite.</P
><P
->The <B
-CLASS="COMMAND"
->smbcacls</B
-> program manipulates NT Access Control Lists
+>The smbcacls program manipulates NT Access Control Lists
(ACLs) on SMB file shares. </P
></DIV
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN28"
+NAME="AEN27"
></A
><H2
>OPTIONS</H2
><P
->The following options are available to the <B
-CLASS="COMMAND"
->smbcacls</B
-> program.
+>The following options are available to the smbcacls program.
The format of ACLs is described in the section ACL FORMAT </P
><P
></P
@@ -96,7 +90,7 @@ CLASS="VARIABLELIST"
>-D acls</DT
><DD
><P
->Delete any ACLs specified on the command line.
+>Delete any ACLs specfied on the command line.
An error will be printed for each ACL specified that was not
already present in the ACL list. </P
></DD
@@ -181,7 +175,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN75"
+NAME="AEN73"
></A
><H2
>ACL FORMAT</H2
@@ -189,23 +183,14 @@ NAME="AEN75"
>The format of an ACL is one or more ACL entries separated by
either commas or newlines. An ACL entry is one of the following: </P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>
-REVISION:&#60;revision number&#62;
-OWNER:&#60;sid or name&#62;
-GROUP:&#60;sid or name&#62;
-ACL:&#60;sid or name&#62;:&#60;type&#62;/&#60;flags&#62;/&#60;mask&#62;
+REVISION:&lt;revision number&gt;
+OWNER:&lt;sid or name&gt;
+GROUP:&lt;sid or name&gt;
+ACL:&lt;sid or name&gt;:&lt;type&gt;/&lt;flags&gt;/&lt;mask&gt;
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>The revision of the ACL specifies the internal Windows
@@ -262,38 +247,44 @@ ACL:&#60;sid or name&#62;:&#60;type&#62;/&#60;flags&#62;/&#60;mask&#62;
><UL
><LI
><P
-><EM
->R</EM
+><I
+CLASS="EMPHASIS"
+>R</I
> - Allow read access </P
></LI
><LI
><P
-><EM
->W</EM
+><I
+CLASS="EMPHASIS"
+>W</I
> - Allow write access</P
></LI
><LI
><P
-><EM
->X</EM
+><I
+CLASS="EMPHASIS"
+>X</I
> - Execute permission on the object</P
></LI
><LI
><P
-><EM
->D</EM
+><I
+CLASS="EMPHASIS"
+>D</I
> - Delete the object</P
></LI
><LI
><P
-><EM
->P</EM
+><I
+CLASS="EMPHASIS"
+>P</I
> - Change permissions</P
></LI
><LI
><P
-><EM
->O</EM
+><I
+CLASS="EMPHASIS"
+>O</I
> - Take ownership</P
></LI
></UL
@@ -304,22 +295,25 @@ ACL:&#60;sid or name&#62;:&#60;type&#62;/&#60;flags&#62;/&#60;mask&#62;
><UL
><LI
><P
-><EM
->READ</EM
+><I
+CLASS="EMPHASIS"
+>READ</I
> - Equivalent to 'RX'
permissions</P
></LI
><LI
><P
-><EM
->CHANGE</EM
+><I
+CLASS="EMPHASIS"
+>CHANGE</I
> - Equivalent to 'RXWD' permissions
</P
></LI
><LI
><P
-><EM
->FULL</EM
+><I
+CLASS="EMPHASIS"
+>FULL</I
> - Equivalent to 'RWXDPO'
permissions</P
></LI
@@ -328,7 +322,7 @@ ACL:&#60;sid or name&#62;:&#60;type&#62;/&#60;flags&#62;/&#60;mask&#62;
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN125"
+NAME="AEN123"
></A
><H2
>EXIT STATUS</H2
@@ -340,11 +334,8 @@ CLASS="COMMAND"
depending on the success or otherwise of the operations performed.
The exit status may be one of the following values. </P
><P
->If the operation succeeded, smbcacls returns and exit
- status of 0. If <B
-CLASS="COMMAND"
->smbcacls</B
-> couldn't connect to the specified server,
+>If the operation succeded, smbcacls returns and exit
+ status of 0. If smbcacls couldn't connect to the specified server,
or there was an error getting or setting the ACLs, an exit status
of 1 is returned. If there was an error parsing any command line
arguments, an exit status of 2 is returned. </P
@@ -352,7 +343,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN131"
+NAME="AEN128"
></A
><H2
>VERSION</H2
@@ -363,7 +354,7 @@ NAME="AEN131"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN134"
+NAME="AEN131"
></A
><H2
>AUTHOR</H2
diff --git a/docs/htmldocs/smbclient.1.html b/docs/htmldocs/smbclient.1.html
index f38ae269951..f9cc6085d8d 100644
--- a/docs/htmldocs/smbclient.1.html
+++ b/docs/htmldocs/smbclient.1.html
@@ -37,7 +37,7 @@ NAME="AEN8"
><B
CLASS="COMMAND"
>smbclient</B
-> {servicename} [password] [-b &#60;buffer size&#62;] [-d debuglevel] [-D Directory] [-S server] [-U username] [-W workgroup] [-M &#60;netbios name&#62;] [-m maxprotocol] [-A authfile] [-N] [-l logfile] [-L &#60;netbios name&#62;] [-I destinationIP] [-E &#60;terminal code&#62;] [-c &#60;command string&#62;] [-i scope] [-O &#60;socket options&#62;] [-p port] [-R &#60;name resolve order&#62;] [-s &#60;smb config file&#62;] [-T&#60;c|x&#62;IXFqgbNan]</P
+> {servicename} [password] [-b &lt;buffer size&gt;] [-d debuglevel] [-D Directory] [-S server] [-U username] [-W workgroup] [-M &lt;netbios name&gt;] [-m maxprotocol] [-A authfile] [-N] [-l logfile] [-L &lt;netbios name&gt;] [-I destinationIP] [-E &lt;terminal code&gt;] [-c &lt;command string&gt;] [-i scope] [-O &lt;socket options&gt;] [-p port] [-R &lt;name resolve order&gt;] [-s &lt;smb config file&gt;] [-T&lt;c|x&gt;IXFqgbNan]</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -121,14 +121,8 @@ CLASS="PARAMETER"
><I
>-R</I
></TT
-> parameter to <B
-CLASS="COMMAND"
->smbclient</B
-> or
- using the name resolve order parameter in the <TT
-CLASS="FILENAME"
->smb.conf</TT
-> file,
+> parameter to smbclient or
+ using the name resolve order parameter in the smb.conf file,
allowing an administrator to change the order and methods
by which server names are looked up. </P
></DD
@@ -195,12 +189,12 @@ CLASS="FILENAME"
options. </P
></DD
><DT
->-R &#60;name resolve order&#62;</DT
+>-R &lt;name resolve order&gt;</DT
><DD
><P
>This option is used by the programs in the Samba
suite to determine what naming services and in what order to resolve
- host names to IP addresses. The option takes a space-separated
+ host names to IP addresses. The option takes a space separated
string of different name resolution options.</P
><P
>The options are :"lmhosts", "host", "wins" and "bcast". They
@@ -233,7 +227,7 @@ CLASS="FILENAME"
>/etc/hosts
</TT
>, NIS, or DNS lookups. This method of name resolution
- is operating system dependent, for instance on IRIX or Solaris this
+ is operating system depended for instance on IRIX or Solaris this
may be controlled by the <TT
CLASS="FILENAME"
>/etc/nsswitch.conf</TT
@@ -290,10 +284,7 @@ CLASS="PARAMETER"
>name resolve order
</I
></TT
-> parameter of the <TT
-CLASS="FILENAME"
->smb.conf</TT
-> file the name resolution
+> parameter of the smb.conf file the name resolution
methods will be attempted in this order. </P
></DD
><DT
@@ -348,8 +339,9 @@ CLASS="FILENAME"
> for a description of how to handle incoming
WinPopup messages in Samba. </P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
>: Copy WinPopup into the startup group
on your WfWg PCs if you want them to always be able to receive
messages. </P
@@ -360,15 +352,10 @@ CLASS="FILENAME"
><P
>This specifies a NetBIOS scope that smbclient will
use to communicate with when generating NetBIOS names. For details
- on the use of NetBIOS scopes, see <TT
-CLASS="FILENAME"
->rfc1001.txt</TT
-> and <TT
-CLASS="FILENAME"
->rfc1002.txt</TT
->.
- NetBIOS scopes are <EM
->very</EM
+ on the use of NetBIOS scopes, see rfc1001.txt and rfc1002.txt.
+ NetBIOS scopes are <I
+CLASS="EMPHASIS"
+>very</I
> rarely used, only set
this parameter if you are the system administrator in charge of all
the NetBIOS systems you communicate with. </P
@@ -398,12 +385,7 @@ CLASS="FILENAME"
>-d debuglevel</DT
><DD
><P
-><TT
-CLASS="REPLACEABLE"
-><I
->debuglevel</I
-></TT
-> is an integer from 0 to 10, or
+>debuglevel is an integer from 0 to 10, or
the letter 'A'. </P
><P
>The default value if this parameter is not specified
@@ -420,24 +402,21 @@ CLASS="REPLACEABLE"
data, and should only be used when investigating a problem.
Levels above 3 are designed for use only by developers and
generate HUGE amounts of log data, most of which is extremely
- cryptic. If <TT
-CLASS="REPLACEABLE"
-><I
->debuglevel</I
-></TT
-> is set to the letter 'A', then <EM
+ cryptic. If debuglevel is set to the letter 'A', then <I
+CLASS="EMPHASIS"
>all
- </EM
+ </I
> debug messages will be printed. This setting
- is for developers only (and people who <EM
->really</EM
+ is for developers only (and people who <I
+CLASS="EMPHASIS"
+>really</I
> want
to know how the code works internally). </P
><P
>Note that specifying this parameter here will override
- the log level parameter in the <TT
-CLASS="FILENAME"
->smb.conf (5)</TT
+ the log level parameter in the <B
+CLASS="COMMAND"
+>smb.conf (5)</B
>
file. </P
></DD
@@ -454,12 +433,7 @@ CLASS="FILENAME"
>-l logfilename</DT
><DD
><P
->If specified, <TT
-CLASS="REPLACEABLE"
-><I
->logfilename</I
-></TT
-> specifies a base filename
+>If specified, logfilename specifies a base filename
into which operational data from the running client will be
logged. </P
><P
@@ -485,12 +459,7 @@ CLASS="FILENAME"
>-I IP-address</DT
><DD
><P
-><TT
-CLASS="REPLACEABLE"
-><I
->IP address</I
-></TT
-> is the address of the server to connect to.
+>IP address is the address of the server to connect to.
It should be specified in standard "a.b.c.d" notation. </P
><P
>Normally the client would attempt to locate a named
@@ -527,37 +496,35 @@ CLASS="PARAMETER"
><P
>Sets the SMB username or username and password.
If %pass is not specified, The user will be prompted. The client
- will first check the <TT
-CLASS="ENVAR"
->USER</TT
-> environment variable, then the
+ will first check the USER environment variable, then the
<TT
-CLASS="ENVAR"
->LOGNAME</TT
-> variable and if either exists, the
+CLASS="PARAMETER"
+><I
+>$LOGNAME</I
+></TT
+> variable and if either exist, the
string is uppercased. Anything in these variables following a '%'
- sign will be treated as the password. If these environment
+ sign will be treated as the password. If these environmental
variables are not found, the username <TT
CLASS="CONSTANT"
>GUEST</TT
>
is used. </P
><P
->If the password is not included in these environment
- variables (using the %pass syntax), <B
-CLASS="COMMAND"
->rpcclient</B
-> will look for
+>If the password is not included in these environment
+ variables (using the %pass syntax), rpcclient will look for
a <TT
-CLASS="ENVAR"
->PASSWD</TT
+CLASS="PARAMETER"
+><I
+>$PASSWD</I
+></TT
> environment variable from which
to read the password. </P
><P
>A third option is to use a credentials file which
contains the plaintext of the username and password. This
option is mainly provided for scripts where the admin doesn't
- wish to pass the credentials on the command line or via environment
+ desire to pass the credentials on the command line or via environment
variables. If this method is used, make certain that the permissions
on the file restrict access from unwanted users. See the
<TT
@@ -569,8 +536,10 @@ CLASS="PARAMETER"
><P
>Be cautious about including passwords in scripts or in
the <TT
-CLASS="ENVAR"
->PASSWD</TT
+CLASS="PARAMETER"
+><I
+>$PASSWD</I
+></TT
> environment variable. Also, on
many systems the command line of a running process may be seen
via the <B
@@ -592,20 +561,11 @@ CLASS="COMMAND"
password used in the connection. The format of the file is
</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
->username = &#60;value&#62;
-password = &#60;value&#62;
+>username = &lt;value&gt;
+password = &lt;value&gt;
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>Make certain that the permissions on the file restrict
@@ -627,23 +587,22 @@ CLASS="PARAMETER"
</I
></TT
> option may be useful if your NetBIOS names don't
- match your TCP/IP DNS host names or if you are trying to reach a
+ match your tcp/ip dns host names or if you are trying to reach a
host on another network. </P
></DD
><DT
>-t terminal code</DT
><DD
><P
->This option tells <B
-CLASS="COMMAND"
->smbclient</B
-> how to interpret
+>This option tells smbclient how to interpret
filenames coming from the remote server. Usually Asian language
multibyte UNIX implementations use different character sets than
- SMB/CIFS servers (<EM
->EUC</EM
-> instead of <EM
-> SJIS</EM
+ SMB/CIFS servers (<I
+CLASS="EMPHASIS"
+>EUC</I
+> instead of <I
+CLASS="EMPHASIS"
+> SJIS</I
> for example). Setting this parameter will let
<B
CLASS="COMMAND"
@@ -809,7 +768,7 @@ CLASS="PARAMETER"
>r</I
></TT
> - Regular expression include
- or exclude. Uses regular expression matching for
+ or exclude. Uses regular regular expression matching for
excluding or excluding files if compiled with HAVE_REGEX_H.
However this mode can be very slow. If not compiled with
HAVE_REGEX_H, does a limited wildcard match on '*' and '?'.
@@ -857,8 +816,9 @@ CLASS="PARAMETER"
></LI
></UL
><P
-><EM
->Tar Long File Names</EM
+><I
+CLASS="EMPHASIS"
+>Tar Long File Names</I
></P
><P
><B
@@ -867,34 +827,30 @@ CLASS="COMMAND"
>'s tar option now supports long
file names both on backup and restore. However, the full path
name of the file must be less than 1024 bytes. Also, when
- a tar archive is created, <B
-CLASS="COMMAND"
->smbclient</B
->'s tar option places all
+ a tar archive is created, smbclient's tar option places all
files in the archive with relative names, not absolute names.
</P
><P
-><EM
->Tar Filenames</EM
+><I
+CLASS="EMPHASIS"
+>Tar Filenames</I
></P
><P
>All file names can be given as DOS path names (with '\'
as the component separator) or as UNIX path names (with '/' as
the component separator). </P
><P
-><EM
->Examples</EM
+><I
+CLASS="EMPHASIS"
+>Examples</I
></P
><P
->Restore from tar file <TT
-CLASS="FILENAME"
->backup.tar</TT
-> into myshare on mypc
+>Restore from tar file backup.tar into myshare on mypc
(no password on share). </P
><P
><B
CLASS="COMMAND"
->smbclient //mypc/yshare "" -N -Tx backup.tar
+>smbclient //mypc/myshare "" -N -Tx backup.tar
</B
></P
><P
@@ -950,7 +906,7 @@ CLASS="COMMAND"
>-c command string</DT
><DD
><P
->command string is a semicolon-separated list of
+>command string is a semicolon separated list of
commands to be executed instead of prompting from stdin. <TT
CLASS="PARAMETER"
><I
@@ -975,7 +931,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN311"
+NAME="AEN297"
></A
><H2
>OPERATIONS</H2
@@ -985,7 +941,7 @@ NAME="AEN311"
><P
><TT
CLASS="PROMPT"
->smb:\&#62; </TT
+>smb:\&gt; </TT
></P
><P
>The backslash ("\") indicates the current working directory
@@ -1005,7 +961,7 @@ CLASS="PROMPT"
><P
>Parameters shown in square brackets (e.g., "[parameter]") are
optional. If not given, the command will use suitable defaults. Parameters
- shown in angle brackets (e.g., "&#60;parameter&#62;") are required.
+ shown in angle brackets (e.g., "&lt;parameter&gt;") are required.
</P
><P
>Note that all commands operating on the server are actually
@@ -1023,12 +979,7 @@ CLASS="VARIABLELIST"
>? [command]</DT
><DD
><P
->If <TT
-CLASS="REPLACEABLE"
-><I
->command</I
-></TT
-> is specified, the ? command will display
+>If "command" is specified, the ? command will display
a brief informative message about the specified command. If no
command is specified, a list of available commands will
be displayed. </P
@@ -1037,12 +988,7 @@ CLASS="REPLACEABLE"
>! [shell command]</DT
><DD
><P
->If <TT
-CLASS="REPLACEABLE"
-><I
->shell command</I
-></TT
-> is specified, the !
+>If "shell command" is specified, the !
command will execute a shell locally and run the specified shell
command. If no command is specified, a local shell will be run.
</P
@@ -1060,28 +1006,18 @@ CLASS="REPLACEABLE"
directory on the server will be reported. </P
></DD
><DT
->del &#60;mask&#62;</DT
+>del &lt;mask&gt;</DT
><DD
><P
>The client will request that the server attempt
- to delete all files matching <TT
-CLASS="REPLACEABLE"
-><I
->mask</I
-></TT
-> from the current working
+ to delete all files matching "mask" from the current working
directory on the server. </P
></DD
><DT
->dir &#60;mask&#62;</DT
+>dir &lt;mask&gt;</DT
><DD
><P
->A list of the files matching <TT
-CLASS="REPLACEABLE"
-><I
->mask</I
-></TT
-> in the current
+>A list of the files matching "mask" in the current
working directory on the server will be retrieved from the server
and displayed. </P
></DD
@@ -1093,18 +1029,12 @@ CLASS="REPLACEABLE"
from the program. </P
></DD
><DT
->get &#60;remote file name&#62; [local file name]</DT
+>get &lt;remote file name&gt; [local file name]</DT
><DD
><P
->Copy the file called <TT
-CLASS="FILENAME"
->remote file name</TT
-> from
+>Copy the file called "remote file name" from
the server to the machine running the client. If specified, name
- the local copy <TT
-CLASS="FILENAME"
->local file name</TT
->. Note that all transfers in
+ the local copy "local file name". Note that all transfers in
<B
CLASS="COMMAND"
>smbclient</B
@@ -1121,12 +1051,7 @@ CLASS="COMMAND"
>lcd [directory name]</DT
><DD
><P
->If <TT
-CLASS="REPLACEABLE"
-><I
->directory name</I
-></TT
-> is specified, the current
+>If "directory name" is specified, the current
working directory on the local machine will be changed to
the directory specified. This operation will fail if for any
reason the specified directory is inaccessible. </P
@@ -1148,13 +1073,13 @@ CLASS="REPLACEABLE"
lowercase filenames are the norm on UNIX systems. </P
></DD
><DT
->ls &#60;mask&#62;</DT
+>ls &lt;mask&gt;</DT
><DD
><P
>See the dir command above. </P
></DD
><DT
->mask &#60;mask&#62;</DT
+>mask &lt;mask&gt;</DT
><DD
><P
>This command allows the user to set up a mask
@@ -1180,71 +1105,45 @@ CLASS="REPLACEABLE"
mask back to "*" after using the mget or mput commands. </P
></DD
><DT
->md &#60;directory name&#62;</DT
+>md &lt;directory name&gt;</DT
><DD
><P
>See the mkdir command. </P
></DD
><DT
->mget &#60;mask&#62;</DT
+>mget &lt;mask&gt;</DT
><DD
><P
->Copy all files matching <TT
-CLASS="REPLACEABLE"
-><I
->mask</I
-></TT
-> from the server to
+>Copy all files matching mask from the server to
the machine running the client. </P
><P
->Note that <TT
-CLASS="REPLACEABLE"
-><I
->mask</I
-></TT
-> is interpreted differently during recursive
+>Note that mask is interpreted differently during recursive
operation and non-recursive operation - refer to the recurse and
mask commands for more information. Note that all transfers in
- <B
-CLASS="COMMAND"
->smbclient</B
-> are binary. See also the lowercase command. </P
+ smbclient are binary. See also the lowercase command. </P
></DD
><DT
->mkdir &#60;directory name&#62;</DT
+>mkdir &lt;directory name&gt;</DT
><DD
><P
>Create a new directory on the server (user access
privileges permitting) with the specified name. </P
></DD
><DT
->mput &#60;mask&#62;</DT
+>mput &lt;mask&gt;</DT
><DD
><P
->Copy all files matching <TT
-CLASS="REPLACEABLE"
-><I
->mask</I
-></TT
-> in the current working
+>Copy all files matching mask in the current working
directory on the local machine to the current working directory on
the server. </P
><P
->Note that <TT
-CLASS="REPLACEABLE"
-><I
->mask</I
-></TT
-> is interpreted differently during recursive
+>Note that mask is interpreted differently during recursive
operation and non-recursive operation - refer to the recurse and mask
- commands for more information. Note that all transfers in <B
-CLASS="COMMAND"
->smbclient</B
->
+ commands for more information. Note that all transfers in smbclient
are binary. </P
></DD
><DT
->print &#60;file name&#62;</DT
+>print &lt;file name&gt;</DT
><DD
><P
>Print the specified file from the local machine
@@ -1253,7 +1152,7 @@ CLASS="COMMAND"
>See also the printmode command.</P
></DD
><DT
->printmode &#60;graphics or text&#62;</DT
+>printmode &lt;graphics or text&gt;</DT
><DD
><P
>Set the print mode to suit either binary data
@@ -1273,22 +1172,13 @@ CLASS="COMMAND"
</P
></DD
><DT
->put &#60;local file name&#62; [remote file name]</DT
+>put &lt;local file name&gt; [remote file name]</DT
><DD
><P
->Copy the file called <TT
-CLASS="FILENAME"
->local file name</TT
-> from the
+>Copy the file called "local file name" from the
machine running the client to the server. If specified,
- name the remote copy <TT
-CLASS="FILENAME"
->remote file name</TT
->. Note that all transfers
- in <B
-CLASS="COMMAND"
->smbclient</B
-> are binary. See also the lowercase command.
+ name the remote copy "remote file name". Note that all transfers
+ in smbclient are binary. See also the lowercase command.
</P
></DD
><DT
@@ -1305,7 +1195,7 @@ CLASS="COMMAND"
>See the exit command. </P
></DD
><DT
->rd &#60;directory name&#62;</DT
+>rd &lt;directory name&gt;</DT
><DD
><P
>See the rmdir command. </P
@@ -1330,26 +1220,21 @@ CLASS="COMMAND"
using the mask command will be ignored. </P
></DD
><DT
->rm &#60;mask&#62;</DT
+>rm &lt;mask&gt;</DT
><DD
><P
->Remove all files matching <TT
-CLASS="REPLACEABLE"
-><I
->mask</I
-></TT
-> from the current
+>Remove all files matching mask from the current
working directory on the server. </P
></DD
><DT
->rmdir &#60;directory name&#62;</DT
+>rmdir &lt;directory name&gt;</DT
><DD
><P
>Remove the specified directory (user access
privileges permitting) from the server. </P
></DD
><DT
->tar &#60;c|x&#62;[IXbgNa]</DT
+>tar &lt;c|x&gt;[IXbgNa]</DT
><DD
><P
>Performs a tar operation - see the <TT
@@ -1365,20 +1250,15 @@ CLASS="PARAMETER"
</P
></DD
><DT
->blocksize &#60;blocksize&#62;</DT
+>blocksize &lt;blocksize&gt;</DT
><DD
><P
>Blocksize. Must be followed by a valid (greater
than zero) blocksize. Causes tar file to be written out in
- <TT
-CLASS="REPLACEABLE"
-><I
->blocksize</I
-></TT
->*TBLOCK (usually 512 byte) blocks. </P
+ blocksize*TBLOCK (usually 512 byte) blocks. </P
></DD
><DT
->tarmode &#60;full|inc|reset|noreset&#62;</DT
+>tarmode &lt;full|inc|reset|noreset&gt;</DT
><DD
><P
>Changes tar's behavior with regard to archive
@@ -1389,7 +1269,7 @@ CLASS="REPLACEABLE"
read/write share). </P
></DD
><DT
->setmode &#60;filename&#62; &#60;perm=[+|\-]rsha&#62;</DT
+>setmode &lt;filename&gt; &lt;perm=[+|\-]rsha&gt;</DT
><DD
><P
>A version of the DOS attrib command to set
@@ -1408,7 +1288,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN478"
+NAME="AEN446"
></A
><H2
>NOTES</H2
@@ -1429,22 +1309,26 @@ NAME="AEN478"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN483"
+NAME="AEN451"
></A
><H2
>ENVIRONMENT VARIABLES</H2
><P
>The variable <TT
-CLASS="ENVAR"
->USER</TT
+CLASS="PARAMETER"
+><I
+>$USER</I
+></TT
> may contain the
username of the person using the client. This information is
used only if the protocol level is high enough to support
session-level passwords.</P
><P
>The variable <TT
-CLASS="ENVAR"
->PASSWD</TT
+CLASS="PARAMETER"
+><I
+>$PASSWD</I
+></TT
> may contain
the password of the person using the client. This information is
used only if the protocol level is high enough to support
@@ -1453,7 +1337,7 @@ CLASS="ENVAR"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN489"
+NAME="AEN457"
></A
><H2
>INSTALLATION</H2
@@ -1471,8 +1355,9 @@ CLASS="FILENAME"
> /usr/samba/bin/</TT
> directory, this directory readable
by all, writeable only by root. The client program itself should
- be executable by all. The client should <EM
->NOT</EM
+ be executable by all. The client should <I
+CLASS="EMPHASIS"
+>NOT</I
> be
setuid or setgid! </P
><P
@@ -1484,14 +1369,14 @@ CLASS="FILENAME"
CLASS="COMMAND"
>smbd(8)
</B
-> as an ordinary user - running that server as a daemon
+> an ordinary user - running that server as a daemon
on a user-accessible port (typically any port number over 1024)
would provide a suitable test server. </P
></DIV
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN499"
+NAME="AEN467"
></A
><H2
>DIAGNOSTICS</H2
@@ -1507,7 +1392,7 @@ NAME="AEN499"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN503"
+NAME="AEN471"
></A
><H2
>VERSION</H2
@@ -1518,7 +1403,7 @@ NAME="AEN503"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN506"
+NAME="AEN474"
></A
><H2
>AUTHOR</H2
diff --git a/docs/htmldocs/smbcontrol.1.html b/docs/htmldocs/smbcontrol.1.html
index 7136d3e981e..c8cb14ccd31 100644
--- a/docs/htmldocs/smbcontrol.1.html
+++ b/docs/htmldocs/smbcontrol.1.html
@@ -14,7 +14,7 @@ VLINK="#840084"
ALINK="#0000FF"
><H1
><A
-NAME="SMBCONTROL"
+NAME="FINDSMB"
>smbcontrol</A
></H1
><DIV
diff --git a/docs/htmldocs/smbd.8.html b/docs/htmldocs/smbd.8.html
index 7096dc205f7..33af0242e5d 100644
--- a/docs/htmldocs/smbd.8.html
+++ b/docs/htmldocs/smbd.8.html
@@ -36,7 +36,7 @@ NAME="AEN8"
><B
CLASS="COMMAND"
>smbd</B
-> [-D] [-a] [-o] [-P] [-h] [-V] [-d &#60;debug level&#62;] [-l &#60;log file&#62;] [-p &#60;port number&#62;] [-O &#60;socket option&#62;] [-s &#60;configuration file&#62;]</P
+> [-D] [-a] [-o] [-P] [-h] [-V] [-d &lt;debug level&gt;] [-l &lt;log file&gt;] [-p &lt;port number&gt;] [-O &lt;socket option&gt;] [-s &lt;configuration file&gt;]</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -98,15 +98,12 @@ CLASS="FILENAME"
can force a reload by sending a SIGHUP to the server. Reloading
the configuration file will not affect connections to any service
that is already established. Either the user will have to
- disconnect from the service, or <B
-CLASS="COMMAND"
->smbd</B
-> killed and restarted.</P
+ disconnect from the service, or smbd killed and restarted.</P
></DIV
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN36"
+NAME="AEN35"
></A
><H2
>OPTIONS</H2
@@ -123,12 +120,9 @@ CLASS="VARIABLELIST"
the server to operate as a daemon. That is, it detaches
itself and runs in the background, fielding requests
on the appropriate port. Operating the server as a
- daemon is the recommended way of running <B
-CLASS="COMMAND"
->smbd</B
-> for
+ daemon is the recommended way of running smbd for
servers that provide more than casual use file and
- print services. This switch is assumed if <B
+ print services. This switch is assumed is <B
CLASS="COMMAND"
>smbd
</B
@@ -159,10 +153,7 @@ CLASS="COMMAND"
>-P</DT
><DD
><P
->Passive option. Causes <B
-CLASS="COMMAND"
->smbd</B
-> not to
+>Passive option. Causes smbd not to
send any network traffic out. Used for debugging by
the developers only.</P
></DD
@@ -187,15 +178,10 @@ CLASS="COMMAND"
>.</P
></DD
><DT
->-d &#60;debug level&#62;</DT
+>-d &lt;debug level&gt;</DT
><DD
><P
-><TT
-CLASS="REPLACEABLE"
-><I
->debuglevel</I
-></TT
-> is an integer
+>debuglevel is an integer
from 0 to 10. The default value if this parameter is
not specified is zero.</P
><P
@@ -228,14 +214,12 @@ CLASS="FILENAME"
> file.</P
></DD
><DT
->-l &#60;log file&#62;</DT
+>-l &lt;log file&gt;</DT
><DD
><P
->If specified, <TT
-CLASS="REPLACEABLE"
-><I
+>If specified, <I
+CLASS="EMPHASIS"
>log file</I
-></TT
>
specifies a log filename into which informational and debug
messages from the running server will be logged. The log
@@ -256,7 +240,7 @@ CLASS="FILENAME"
file name is specified at compile time.</P
></DD
><DT
->-O &#60;socket options&#62;</DT
+>-O &lt;socket options&gt;</DT
><DD
><P
>See the <A
@@ -275,15 +259,10 @@ CLASS="FILENAME"
> file for details.</P
></DD
><DT
->-p &#60;port number&#62;</DT
+>-p &lt;port number&gt;</DT
><DD
><P
-><TT
-CLASS="REPLACEABLE"
-><I
->port number</I
-></TT
-> is a positive integer
+>port number is a positive integer
value. The default value if this parameter is not
specified is 139.</P
><P
@@ -306,7 +285,7 @@ CLASS="REPLACEABLE"
in the above situation.</P
></DD
><DT
->-s &#60;configuration file&#62;</DT
+>-s &lt;configuration file&gt;</DT
><DD
><P
>The file specified contains the
@@ -331,7 +310,7 @@ CLASS="FILENAME"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN109"
+NAME="AEN104"
></A
><H2
>FILES</H2
@@ -429,7 +408,7 @@ CLASS="FILENAME"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN142"
+NAME="AEN137"
></A
><H2
>LIMITATIONS</H2
@@ -448,7 +427,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN146"
+NAME="AEN141"
></A
><H2
>ENVIRONMENTVARIABLES</H2
@@ -458,18 +437,12 @@ NAME="AEN146"
CLASS="VARIABLELIST"
><DL
><DT
-><TT
-CLASS="ENVAR"
->PRINTER</TT
-></DT
+>PRINTER</DT
><DD
><P
>If no printer name is specified to
printable services, most systems will use the value of
- this variable (or <TT
-CLASS="CONSTANT"
->lp</TT
-> if this variable is
+ this variable (or lp if this variable is
not defined) as the name of the printer to use. This
is not specific to the server, however.</P
></DD
@@ -479,7 +452,7 @@ CLASS="CONSTANT"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN155"
+NAME="AEN148"
></A
><H2
>INSTALLATION</H2
@@ -497,16 +470,10 @@ CLASS="FILENAME"
program itself should be executable by all, as users may wish to
run the server themselves (in which case it will of course run
with their privileges). The server should NOT be setuid. On some
- systems it may be worthwhile to make <B
-CLASS="COMMAND"
->smbd</B
-> setgid to an empty group.
+ systems it may be worthwhile to make smbd setgid to an empty group.
This is because some systems may have a security hole where daemon
processes that become a user can be attached to with a debugger.
- Making the <B
-CLASS="COMMAND"
->smbd</B
-> file setgid to an empty group may prevent
+ Making the smbd file setgid to an empty group may prevent
this hole from being exploited. This security hole and the suggested
fix has only been confirmed on old versions (pre-kernel 2.0) of Linux
at the time this was written. It is possible that this hole only
@@ -601,18 +568,20 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN188"
+NAME="AEN179"
></A
><H2
>RUNNING THE SERVER AS A DAEMON</H2
><P
>To run the server as a daemon from the command
- line, simply put the <EM
->-D</EM
+ line, simply put the <I
+CLASS="EMPHASIS"
+>-D</I
> option on the
command line. There is no need to place an ampersand at
- the end of the command line - the <EM
->-D</EM
+ the end of the command line - the <I
+CLASS="EMPHASIS"
+>-D</I
>
option causes the server to detach itself from the tty
anyway.</P
@@ -648,15 +617,16 @@ CLASS="COMMAND"
as a single space or TAB character.)</P
><P
>If the options used at compile time are appropriate for
- your system, all parameters except <EM
->-D</EM
+ your system, all parameters except <I
+CLASS="EMPHASIS"
+>-D</I
> may
be omitted. See the section OPTIONS above.</P
></DIV
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN201"
+NAME="AEN192"
></A
><H2
>RUNNING THE SERVER ON REQUEST</H2
@@ -665,10 +635,7 @@ NAME="AEN201"
CLASS="COMMAND"
>inetd
</B
->, you can arrange to have the <B
-CLASS="COMMAND"
->smbd</B
-> server started
+>, you can arrange to have the smbd server started
whenever a process attempts to connect to it. This requires several
changes to the startup files on the host machine. If you are
experimenting as an ordinary user rather than as root, you will
@@ -760,12 +727,6 @@ CLASS="FILENAME"
>Lastly, edit the configuration file to provide suitable
services. To start with, the following two services should be
all you need:</P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="SCREEN"
> <TT
@@ -781,9 +742,6 @@ CLASS="COMPUTEROUTPUT"
</TT
>
</PRE
-></TD
-></TR
-></TABLE
><P
>This will allow you to connect to your home directory
and print to any printer supported by the host (user privileges
@@ -792,7 +750,7 @@ CLASS="COMPUTEROUTPUT"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN233"
+NAME="AEN223"
></A
><H2
>TESTING THE INSTALLATION</H2
@@ -806,18 +764,8 @@ CLASS="COMMAND"
> will reread their configuration
tables if they receive a HUP signal.</P
><P
->If your machine's name is <TT
-CLASS="REPLACEABLE"
-><I
->fred</I
-></TT
-> and your
- name is <TT
-CLASS="REPLACEABLE"
-><I
->mary</I
-></TT
->, you should now be able to connect
+>If your machine's name is fred and your
+ name is mary, you should now be able to connect
to the service <TT
CLASS="FILENAME"
>\\fred\mary</TT
@@ -850,7 +798,7 @@ CLASS="FILENAME"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN247"
+NAME="AEN235"
></A
><H2
>VERSION</H2
@@ -861,7 +809,7 @@ NAME="AEN247"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN250"
+NAME="AEN238"
></A
><H2
>DIAGNOSTICS</H2
@@ -884,63 +832,46 @@ NAME="AEN250"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN255"
+NAME="AEN243"
></A
><H2
>SIGNALS</H2
><P
->Sending the <B
-CLASS="COMMAND"
->smbd</B
-> a SIGHUP will cause it to
- reload its <TT
+>Sending the smbd a SIGHUP will cause it to
+ re-load its <TT
CLASS="FILENAME"
>smb.conf</TT
> configuration
file within a short period of time.</P
><P
->To shut down a user's <B
-CLASS="COMMAND"
->smbd</B
-> process it is recommended
+>To shut down a users smbd process it is recommended
that <B
CLASS="COMMAND"
>SIGKILL (-9)</B
-> <EM
->NOT</EM
+> <I
+CLASS="EMPHASIS"
+>NOT</I
>
be used, except as a last resort, as this may leave the shared
memory area in an inconsistent state. The safe way to terminate
- an <B
-CLASS="COMMAND"
->smbd</B
-> is to send it a SIGTERM (-15) signal and wait for
+ an smbd is to send it a SIGTERM (-15) signal and wait for
it to die on its own.</P
><P
->The debug log level of <B
-CLASS="COMMAND"
->smbd</B
-> may be raised by sending
+>The debug log level of smbd may be raised by sending
it a SIGUSR1 (<B
CLASS="COMMAND"
->kill -USR1 &#60;smbd-pid&#62;</B
+>kill -USR1 &lt;smbd-pid&gt;</B
>)
and lowered by sending it a SIGUSR2 (<B
CLASS="COMMAND"
->kill -USR2 &#60;smbd-pid&#62;
+>kill -USR2 &lt;smbd-pid&gt;
</B
>). This is to allow transient problems to be diagnosed,
whilst still running at a normally low log level.</P
><P
>Note that as the signal handlers send a debug write,
- they are not re-entrant in <B
-CLASS="COMMAND"
->smbd</B
->. This you should wait until
- <B
-CLASS="COMMAND"
->smbd</B
-> is in a state of waiting for an incoming SMB before
+ they are not re-entrant in smbd. This you should wait until
+ smbd is in a state of waiting for an incoming smb before
issuing them. It is possible to make the signal handlers safe
by un-blocking the signals before the select call and re-blocking
them after, however this would affect performance.</P
@@ -948,7 +879,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN272"
+NAME="AEN254"
></A
><H2
>SEE ALSO</H2
@@ -1014,7 +945,7 @@ TARGET="_top"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN289"
+NAME="AEN271"
></A
><H2
>AUTHOR</H2
diff --git a/docs/htmldocs/smbmnt.8.html b/docs/htmldocs/smbmnt.8.html
index 6546b7c7070..88a28b8a696 100644
--- a/docs/htmldocs/smbmnt.8.html
+++ b/docs/htmldocs/smbmnt.8.html
@@ -36,7 +36,7 @@ NAME="AEN8"
><B
CLASS="COMMAND"
>smbmnt</B
-> {mount-point} [-s &#60;share&#62;] [-r] [-u &#60;uid&#62;] [-g &#60;gid&#62;] [-f &#60;mask&#62;] [-d &#60;mask&#62;] [-o &#60;options&#62;]</P
+> {mount-point} [-s &lt;share&gt;] [-r] [-u &lt;uid&gt;] [-g &lt;gid&gt;] [-f &lt;mask&gt;] [-d &lt;mask&gt;] [-o &lt;options&gt;]</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -55,7 +55,7 @@ CLASS="COMMAND"
CLASS="COMMAND"
>smbmnt</B
> is meant to be installed setuid root
- so that normal users can mount their SMB shares. It checks
+ so that normal users can mount their smb shares. It checks
whether the user has write permissions on the mount point and
then mounts the directory.</P
><P
@@ -125,7 +125,7 @@ CLASS="VARIABLELIST"
><DD
><P
> list of options that are passed as-is to smbfs, if this
- command is run on a 2.4 or higher Linux kernel.
+ command is run on a 2.4 or higher linux kernel.
</P
></DD
></DL
diff --git a/docs/htmldocs/smbmount.8.html b/docs/htmldocs/smbmount.8.html
index 721397312ae..ba07f08ed47 100644
--- a/docs/htmldocs/smbmount.8.html
+++ b/docs/htmldocs/smbmount.8.html
@@ -60,32 +60,21 @@ CLASS="COMMAND"
> command when using the
"-t smb" option. The kernel must support the smbfs filesystem. </P
><P
->Options to <B
-CLASS="COMMAND"
->smbmount</B
-> are specified as a comma-separated
+>Options to smbmount are specified as a comma separated
list of key=value pairs. It is possible to send options other
than those listed here, assuming that smbfs supports them. If
you get mount failures, check your kernel log for errors on
unknown options.</P
><P
-><B
-CLASS="COMMAND"
->smbmount</B
-> is a daemon. After mounting it keeps running until
+>smbmount is a daemon. After mounting it keeps running until
the mounted smbfs is umounted. It will log things that happen
when in daemon mode using the "machine name" smbmount, so
- typically this output will end up in <TT
-CLASS="FILENAME"
->log.smbmount</TT
->. The
- <B
-CLASS="COMMAND"
->smbmount</B
-> process may also be called mount.smbfs.</P
+ typically this output will end up in log.smbmount. The
+ smbmount process may also be called mount.smbfs.</P
><P
-><EM
->NOTE:</EM
+><I
+CLASS="EMPHASIS"
+>NOTE:</I
> <B
CLASS="COMMAND"
>smbmount</B
@@ -103,7 +92,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN31"
+NAME="AEN27"
></A
><H2
>OPTIONS</H2
@@ -113,7 +102,7 @@ NAME="AEN31"
CLASS="VARIABLELIST"
><DL
><DT
->username=&#60;arg&#62;</DT
+>username=&lt;arg&gt;</DT
><DD
><P
>specifies the username to connect as. If
@@ -126,7 +115,7 @@ CLASS="ENVAR"
to be specified as part of the username.</P
></DD
><DT
->password=&#60;arg&#62;</DT
+>password=&lt;arg&gt;</DT
><DD
><P
>specifies the SMB password. If this
@@ -141,55 +130,36 @@ CLASS="COMMAND"
> will prompt
for a passeword, unless the guest option is
given. </P
-><P
-> Note that password which contain the arguement delimiter
- character (i.e. a comma ',') will failed to be parsed correctly
- on the command line. However, the same password defined
- in the PASSWD environment variable or a credentials file (see
- below) will be read correctly.
- </P
></DD
><DT
->credentials=&#60;filename&#62;</DT
+>credentials=&lt;filename&gt;</DT
><DD
><P
>specifies a file that contains a username
and/or password. The format of the file is:</P
><P
-> <TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="90%"
-><TR
-><TD
-><PRE
+> <PRE
CLASS="PROGRAMLISTING"
-> username = &#60;value&#62;
- password = &#60;value&#62;
+> username = &lt;value&gt;
+ password = &lt;value&gt;
</PRE
-></TD
-></TR
-></TABLE
>
</P
><P
>This is preferred over having passwords in plaintext in a
- shared file, such as <TT
-CLASS="FILENAME"
->/etc/fstab</TT
->. Be sure to protect any
+ shared file, such as /etc/fstab. Be sure to protect any
credentials file properly.
</P
></DD
><DT
->netbiosname=&#60;arg&#62;</DT
+>netbiosname=&lt;arg&gt;</DT
><DD
><P
>sets the source NetBIOS name. It defaults
to the local hostname. </P
></DD
><DT
->uid=&#60;arg&#62;</DT
+>uid=&lt;arg&gt;</DT
><DD
><P
>sets the uid that will own all files on
@@ -198,7 +168,7 @@ CLASS="FILENAME"
</P
></DD
><DT
->gid=&#60;arg&#62;</DT
+>gid=&lt;arg&gt;</DT
><DD
><P
>sets the gid that will own all files on
@@ -207,14 +177,14 @@ CLASS="FILENAME"
gid. </P
></DD
><DT
->port=&#60;arg&#62;</DT
+>port=&lt;arg&gt;</DT
><DD
><P
>sets the remote SMB port number. The default
is 139. </P
></DD
><DT
->fmask=&#60;arg&#62;</DT
+>fmask=&lt;arg&gt;</DT
><DD
><P
>sets the file mask. This determines the
@@ -222,35 +192,35 @@ CLASS="FILENAME"
The default is based on the current umask. </P
></DD
><DT
->dmask=&#60;arg&#62;</DT
+>dmask=&lt;arg&gt;</DT
><DD
><P
->sets the directory mask. This determines the
+>sets the directory mask. This deterines the
permissions that remote directories have in the local filesystem.
The default is based on the current umask. </P
></DD
><DT
->debug=&#60;arg&#62;</DT
+>debug=&lt;arg&gt;</DT
><DD
><P
>sets the debug level. This is useful for
tracking down SMB connection problems. </P
></DD
><DT
->ip=&#60;arg&#62;</DT
+>ip=&lt;arg&gt;</DT
><DD
><P
>sets the destination host or IP address.
</P
></DD
><DT
->workgroup=&#60;arg&#62;</DT
+>workgroup=&lt;arg&gt;</DT
><DD
><P
>sets the workgroup on the destination </P
></DD
><DT
->sockopt=&#60;arg&#62;</DT
+>sockopt=&lt;arg&gt;</DT
><DD
><P
>sets the TCP socket options. See the <A
@@ -270,7 +240,7 @@ CLASS="PARAMETER"
</P
></DD
><DT
->scope=&#60;arg&#62;</DT
+>scope=&lt;arg&gt;</DT
><DD
><P
>sets the NetBIOS scope </P
@@ -294,17 +264,17 @@ CLASS="PARAMETER"
>mount read-write </P
></DD
><DT
->iocharset=&#60;arg&#62;</DT
+>iocharset=&lt;arg&gt;</DT
><DD
><P
-> sets the charset used by the Linux side for codepage
+> sets the charset used by the linux side for codepage
to charset translations (NLS). Argument should be the
name of a charset, like iso8859-1. (Note: only kernel
2.4.0 or later)
</P
></DD
><DT
->codepage=&#60;arg&#62;</DT
+>codepage=&lt;arg&gt;</DT
><DD
><P
> sets the codepage the server uses. See the iocharset
@@ -313,7 +283,7 @@ CLASS="PARAMETER"
</P
></DD
><DT
->ttl=&#60;arg&#62;</DT
+>ttl=&lt;arg&gt;</DT
><DD
><P
> how long a directory listing is cached in milliseconds
@@ -333,7 +303,7 @@ CLASS="PARAMETER"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN125"
+NAME="AEN119"
></A
><H2
>ENVIRONMENT VARIABLES</H2
@@ -360,12 +330,12 @@ CLASS="ENVAR"
>PASSWD_FILE</TT
> may contain the pathname of
a file to read the password from. A single line of input is
- read and used as the password.</P
+ read and used as password.</P
></DIV
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN133"
+NAME="AEN127"
></A
><H2
>BUGS</H2
@@ -385,7 +355,7 @@ NAME="AEN133"
></LI
></UL
><P
->Note that the typical response to a bug report is suggestion
+>Note that the typical response to a bugreport is suggestion
to try the latest version first. So please try doing that first,
and always include which versions you use of relevant software
when reporting bugs (minimum: samba, kernel, distribution)</P
@@ -393,7 +363,7 @@ NAME="AEN133"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN140"
+NAME="AEN134"
></A
><H2
>SEE ALSO</H2
@@ -404,7 +374,7 @@ NAME="AEN140"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN143"
+NAME="AEN137"
></A
><H2
>AUTHOR</H2
diff --git a/docs/htmldocs/smbpasswd.5.html b/docs/htmldocs/smbpasswd.5.html
index 1f862b66114..4ec7b7c86a3 100644
--- a/docs/htmldocs/smbpasswd.5.html
+++ b/docs/htmldocs/smbpasswd.5.html
@@ -101,9 +101,9 @@ CLASS="VARIABLELIST"
>Lanman Password Hash</DT
><DD
><P
->This is the LANMAN hash of the user's password,
+>This is the LANMAN hash of the users password,
encoded as 32 hex digits. The LANMAN hash is created by DES
- encrypting a well known string with the user's password as the
+ encrypting a well known string with the users password as the
DES key. This is the same password used by Windows 95/98 machines.
Note that this password hash is regarded as weak as it is
vulnerable to dictionary attacks and if two users choose the
@@ -111,24 +111,27 @@ CLASS="VARIABLELIST"
is not "salted" as the UNIX password is). If the user has a
null password this field will contain the characters "NO PASSWORD"
as the start of the hex string. If the hex string is equal to
- 32 'X' characters then the user's account is marked as
+ 32 'X' characters then the users account is marked as
<TT
CLASS="CONSTANT"
>disabled</TT
> and the user will not be able to
log onto the Samba server. </P
><P
-><EM
->WARNING !!</EM
+><I
+CLASS="EMPHASIS"
+>WARNING !!</I
> Note that, due to
the challenge-response nature of the SMB/CIFS authentication
protocol, anyone with a knowledge of this password hash will
be able to impersonate the user on the network. For this
- reason these hashes are known as <EM
+ reason these hashes are known as <I
+CLASS="EMPHASIS"
>plain text
- equivalents</EM
-> and must <EM
->NOT</EM
+ equivalents</I
+> and must <I
+CLASS="EMPHASIS"
+>NOT</I
> be made
available to anyone but the root user. To protect these passwords
the smbpasswd file is placed in a directory with read and
@@ -140,30 +143,33 @@ CLASS="CONSTANT"
>NT Password Hash</DT
><DD
><P
->This is the Windows NT hash of the user's
+>This is the Windows NT hash of the users
password, encoded as 32 hex digits. The Windows NT hash is
- created by taking the user's password as represented in
+ created by taking the users password as represented in
16-bit, little-endian UNICODE and then applying the MD4
(internet rfc1321) hashing algorithm to it. </P
><P
>This password hash is considered more secure than
- the LANMAN Password Hash as it preserves the case of the
+ the Lanman Password Hash as it preserves the case of the
password and uses a much higher quality hashing algorithm.
However, it is still the case that if two users choose the same
password this entry will be identical (i.e. the password is
not "salted" as the UNIX password is). </P
><P
-><EM
->WARNING !!</EM
+><I
+CLASS="EMPHASIS"
+>WARNING !!</I
>. Note that, due to
the challenge-response nature of the SMB/CIFS authentication
protocol, anyone with a knowledge of this password hash will
be able to impersonate the user on the network. For this
- reason these hashes are known as <EM
+ reason these hashes are known as <I
+CLASS="EMPHASIS"
>plain text
- equivalents</EM
-> and must <EM
->NOT</EM
+ equivalents</I
+> and must <I
+CLASS="EMPHASIS"
+>NOT</I
> be made
available to anyone but the root user. To protect these passwords
the smbpasswd file is placed in a directory with read and
@@ -186,8 +192,9 @@ CLASS="CONSTANT"
><UL
><LI
><P
-><EM
->U</EM
+><I
+CLASS="EMPHASIS"
+>U</I
> - This means
this is a "User" account, i.e. an ordinary user. Only User
and Workstation Trust accounts are currently supported
@@ -195,10 +202,11 @@ CLASS="CONSTANT"
></LI
><LI
><P
-><EM
->N</EM
+><I
+CLASS="EMPHASIS"
+>N</I
> - This means the
- account has no password (the passwords in the fields LANMAN
+ account has no password (the passwords in the fields Lanman
Password Hash and NT Password Hash are ignored). Note that this
will only allow users to log on with no password if the <TT
CLASS="PARAMETER"
@@ -217,16 +225,18 @@ CLASS="FILENAME"
></LI
><LI
><P
-><EM
->D</EM
+><I
+CLASS="EMPHASIS"
+>D</I
> - This means the account
is disabled and no SMB/CIFS logins will be allowed for
this user. </P
></LI
><LI
><P
-><EM
->W</EM
+><I
+CLASS="EMPHASIS"
+>W</I
> - This means this account
is a "Workstation Trust" account. This kind of account is used
in the Samba PDC code stream to allow Windows NT Workstations
diff --git a/docs/htmldocs/smbpasswd.8.html b/docs/htmldocs/smbpasswd.8.html
index f48754163b9..bb3eb7ca47d 100644
--- a/docs/htmldocs/smbpasswd.8.html
+++ b/docs/htmldocs/smbpasswd.8.html
@@ -24,7 +24,7 @@ NAME="AEN5"
></A
><H2
>Name</H2
->smbpasswd&nbsp;--&nbsp;change a user's SMB password</DIV
+>smbpasswd&nbsp;--&nbsp;change a users SMB password</DIV
><DIV
CLASS="REFSYNOPSISDIV"
><A
@@ -36,7 +36,7 @@ NAME="AEN8"
><B
CLASS="COMMAND"
>smbpasswd</B
-> [-a] [-x] [-d] [-e] [-D debuglevel] [-n] [-r &#60;remote machine&#62;] [-R &#60;name resolve order&#62;] [-m] [-j DOMAIN] [-U username] [-h] [-s] [username]</P
+> [-a] [-x] [-d] [-e] [-D debuglevel] [-n] [-r &lt;remote machine&gt;] [-R &lt;name resolve order&gt;] [-m] [-j DOMAIN] [-U username] [-h] [-s] [username]</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -53,15 +53,16 @@ TARGET="_top"
> suite.</P
><P
>The smbpasswd program has several different
- functions, depending on whether it is run by the <EM
->root</EM
+ functions, depending on whether it is run by the <I
+CLASS="EMPHASIS"
+>root</I
>
user or not. When run as a normal user it allows the user to change
the password used for their SMB sessions on any machines that store
SMB passwords. </P
><P
>By default (when run with no arguments) it will attempt to
- change the current user's SMB password on the local machine. This is
+ change the current users SMB password on the local machine. This is
similar to the way the <B
CLASS="COMMAND"
>passwd(1)</B
@@ -70,8 +71,9 @@ CLASS="COMMAND"
CLASS="COMMAND"
>smbpasswd</B
> differs from how the passwd program works
- however in that it is not <EM
->setuid root</EM
+ however in that it is not <I
+CLASS="EMPHASIS"
+>setuid root</I
> but works in
a client-server mode and communicates with a locally running
<B
@@ -86,12 +88,12 @@ CLASS="FILENAME"
> file. </P
><P
>When run by an ordinary user with no options. smbpasswd
- will prompt them for their old SMB password and then ask them
+ will prompt them for their old smb password and then ask them
for their new password twice, to ensure that the new password
was typed correctly. No passwords will be echoed on the screen
- whilst being typed. If you have a blank SMB password (specified by
+ whilst being typed. If you have a blank smb password (specified by
the string "NO PASSWORD" in the smbpasswd file) then just press
- the &#60;Enter&#62; key when asked for your old password. </P
+ the &lt;Enter&gt; key when asked for your old password. </P
><P
>smbpasswd can also be used by a normal user to change their
SMB password on remote machines, such as Windows NT Primary Domain
@@ -125,7 +127,7 @@ CLASS="VARIABLELIST"
><P
>This option specifies that the username
following should be added to the local smbpasswd file, with the
- new password typed (type &#60;Enter&#62; for the old password). This
+ new password typed (type &lt;Enter&gt; for the old password). This
option is ignored if the username following already exists in
the smbpasswd file and it is treated like a regular change
password command. Note that the user to be added must already exist
@@ -167,7 +169,7 @@ CLASS="CONSTANT"
will fail. </P
><P
>If the smbpasswd file is in the 'old' format (pre-Samba 2.0
- format) there is no space in the user's password entry to write
+ format) there is no space in the users password entry to write
this information and so the user is disabled by writing 'X' characters
into the password space in the smbpasswd file. See <B
CLASS="COMMAND"
@@ -217,7 +219,7 @@ CLASS="COMMAND"
><DD
><P
><TT
-CLASS="REPLACEABLE"
+CLASS="PARAMETER"
><I
>debuglevel</I
></TT
@@ -301,8 +303,9 @@ CLASS="PARAMETER"
copy of the user account database and will not allow the password
change).</P
><P
-><EM
->Note</EM
+><I
+CLASS="EMPHASIS"
+>Note</I
> that Windows 95/98 do not have
a real password database so it is not possible to change passwords
specifying a Win95/98 machine as remote machine target. </P
@@ -500,7 +503,7 @@ CLASS="COMMAND"
><DD
><P
>This option causes smbpasswd to be silent (i.e.
- not issue prompts) and to read its old and new passwords from
+ not issue prompts) and to read it's old and new passwords from
standard input, rather than from <TT
CLASS="FILENAME"
>/dev/tty</TT
@@ -516,8 +519,9 @@ CLASS="COMMAND"
><DD
><P
>This specifies the username for all of the
- <EM
->root only</EM
+ <I
+CLASS="EMPHASIS"
+>root only</I
> options to operate on. Only root
can specify this parameter as only root has the permission needed
to modify attributes directly in the local smbpasswd file.
diff --git a/docs/htmldocs/smbsh.1.html b/docs/htmldocs/smbsh.1.html
index 3f1b704d388..1264e241ba4 100644
--- a/docs/htmldocs/smbsh.1.html
+++ b/docs/htmldocs/smbsh.1.html
@@ -67,7 +67,7 @@ CLASS="COMMAND"
CLASS="COMMAND"
>rcp</B
>. You must use a
- shell that is dynamically linked in order for <B
+ shell that is dynmanically linked in order for <B
CLASS="COMMAND"
>smbsh</B
>
@@ -83,12 +83,6 @@ CLASS="COMMAND"
that authenticate you to the machine running the Windows NT
operating system.</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
> <TT
@@ -119,9 +113,6 @@ CLASS="USERINPUT"
></TT
>
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>Any dynamically linked command you execute from
@@ -136,7 +127,7 @@ CLASS="COMMAND"
> will show all the machines in your workgroup. The command
<B
CLASS="COMMAND"
->ls /smb/&#60;machine-name&#62;</B
+>ls /smb/&lt;machine-name&gt;</B
> will show the share
names for that machine. You could then, for example, use the <B
CLASS="COMMAND"
diff --git a/docs/htmldocs/smbspool.8.html b/docs/htmldocs/smbspool.8.html
index 254abe9a9de..321cc5d8d62 100644
--- a/docs/htmldocs/smbspool.8.html
+++ b/docs/htmldocs/smbspool.8.html
@@ -14,7 +14,7 @@ VLINK="#840084"
ALINK="#0000FF"
><H1
><A
-NAME="SMBSPOOL"
+NAME="FINDSMB"
>smbspool</A
></H1
><DIV
@@ -24,7 +24,7 @@ NAME="AEN5"
></A
><H2
>Name</H2
->smbspool&nbsp;--&nbsp;send print file to an SMB printer</DIV
+>nmblookup&nbsp;--&nbsp;send print file to an SMB printer</DIV
><DIV
CLASS="REFSYNOPSISDIV"
><A
@@ -58,8 +58,9 @@ TARGET="_top"
Printing System, but you can use smbspool with any printing system
or from a program or script.</P
><P
-><EM
->DEVICE URI</EM
+><I
+CLASS="EMPHASIS"
+>DEVICE URI</I
></P
><P
>smbspool specifies the destination using a Uniform Resource
@@ -89,8 +90,10 @@ TARGET="_top"
><P
>smbspool tries to get the URI from argv[0]. If argv[0]
contains the name of the program then it looks in the <TT
-CLASS="ENVAR"
-> DEVICE_URI</TT
+CLASS="PARAMETER"
+><I
+> DEVICE_URI</I
+></TT
> environment variable.</P
><P
>Programs using the <B
@@ -99,8 +102,10 @@ CLASS="COMMAND"
> functions can
pass the URI in argv[0], while shell scripts must set the
<TT
-CLASS="ENVAR"
->DEVICE_URI</TT
+CLASS="PARAMETER"
+><I
+>DEVICE_URI</I
+></TT
> environment variable prior to
running smbspool.</P
></DIV
diff --git a/docs/htmldocs/smbstatus.1.html b/docs/htmldocs/smbstatus.1.html
index 1d3dc9f952a..b31437afea3 100644
--- a/docs/htmldocs/smbstatus.1.html
+++ b/docs/htmldocs/smbstatus.1.html
@@ -14,7 +14,7 @@ VLINK="#840084"
ALINK="#0000FF"
><H1
><A
-NAME="SMBSTATUS"
+NAME="FINDSMB"
>smbstatus</A
></H1
><DIV
@@ -36,7 +36,7 @@ NAME="AEN8"
><B
CLASS="COMMAND"
>smbstatus</B
-> [-P] [-b] [-d] [-L] [-p] [-S] [-s &#60;configuration file&#62;] [-u &#60;username&#62;]</P
+> [-P] [-b] [-d] [-L] [-p] [-S] [-s &lt;configuration file&gt;] [-u &lt;username&gt;]</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -117,7 +117,7 @@ CLASS="COMMAND"
>causes smbstatus to only list shares.</P
></DD
><DT
->-s &#60;configuration file&#62;</DT
+>-s &lt;configuration file&gt;</DT
><DD
><P
>The default configuration file name is
@@ -133,7 +133,7 @@ CLASS="FILENAME"
> for more information.</P
></DD
><DT
->-u &#60;username&#62;</DT
+>-u &lt;username&gt;</DT
><DD
><P
>selects information relevant to
diff --git a/docs/htmldocs/smbtar.1.html b/docs/htmldocs/smbtar.1.html
index 47c41a015a9..5e13ef3577c 100644
--- a/docs/htmldocs/smbtar.1.html
+++ b/docs/htmldocs/smbtar.1.html
@@ -253,8 +253,9 @@ NAME="AEN106"
><H2
>DIAGNOSTICS</H2
><P
->See the <EM
->DIAGNOSTICS</EM
+>See the <I
+CLASS="EMPHASIS"
+>DIAGNOSTICS</I
> section for the
<A
HREF="smbclient.1.html"
diff --git a/docs/htmldocs/smbumount.8.html b/docs/htmldocs/smbumount.8.html
index 68929fd5f91..0a26e720945 100644
--- a/docs/htmldocs/smbumount.8.html
+++ b/docs/htmldocs/smbumount.8.html
@@ -51,7 +51,7 @@ NAME="AEN12"
CLASS="COMMAND"
>smbumount</B
> has
- been written to give normal Linux users more control over their
+ been written to give normal linux-users more control over their
resources. It is safe to install this program suid root, because only
the user who has mounted a filesystem is allowed to unmount it again.
For root it is not necessary to use smbumount. The normal umount
diff --git a/docs/htmldocs/swat.8.html b/docs/htmldocs/swat.8.html
index 386fe5bc7af..f91366b1d6f 100644
--- a/docs/htmldocs/swat.8.html
+++ b/docs/htmldocs/swat.8.html
@@ -35,8 +35,8 @@ NAME="AEN8"
><P
><B
CLASS="COMMAND"
->swat</B
-> [-s &#60;smb config file&#62;] [-a]</P
+>nmblookup</B
+> [-s &lt;smb config file&gt;] [-a]</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -68,24 +68,15 @@ CLASS="FILENAME"
CLASS="COMMAND"
>swat</B
> configuration page has help links
- to all the configurable options in the <TT
-CLASS="FILENAME"
->smb.conf</TT
-> file allowing an
+ to all the configurable options in the smb.conf file allowing an
administrator to easily look up the effects of any change. </P
><P
-><B
-CLASS="COMMAND"
->swat</B
-> is run from <B
-CLASS="COMMAND"
->inetd</B
-> </P
+>swat is run from inetd </P
></DIV
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN26"
+NAME="AEN23"
></A
><H2
>OPTIONS</H2
@@ -104,10 +95,7 @@ CLASS="VARIABLELIST"
CLASS="COMMAND"
>smbd
</B
-> server. This is the file that <B
-CLASS="COMMAND"
->swat</B
-> will modify.
+> server. This is the file that swat will modify.
The information in this file includes server-specific
information such as what printcap file to use, as well as
descriptions of all the services that the server is to provide.
@@ -122,18 +110,13 @@ CLASS="FILENAME"
><DD
><P
>This option disables authentication and puts
- <B
-CLASS="COMMAND"
->swat</B
-> in demo mode. In that mode anyone will be able to modify
- the <TT
-CLASS="FILENAME"
->smb.conf</TT
-> file. </P
+ swat in demo mode. In that mode anyone will be able to modify
+ the smb.conf file. </P
><P
-><EM
+><I
+CLASS="EMPHASIS"
>Do NOT enable this option on a production
- server. </EM
+ server. </I
></P
></DD
></DL
@@ -142,7 +125,7 @@ CLASS="FILENAME"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN44"
+NAME="AEN38"
></A
><H2
>INSTALLATION</H2
@@ -176,7 +159,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT2"
><A
-NAME="AEN56"
+NAME="AEN50"
></A
><H3
>Inetd Installation</H3
@@ -189,10 +172,7 @@ CLASS="FILENAME"
CLASS="FILENAME"
>/etc/services</TT
>
- to enable SWAT to be launched via <B
-CLASS="COMMAND"
->inetd</B
->.</P
+ to enable SWAT to be launched via inetd.</P
><P
>In <TT
CLASS="FILENAME"
@@ -249,15 +229,15 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT2"
><A
-NAME="AEN78"
+NAME="AEN71"
></A
><H3
>Launching</H3
><P
->To launch SWAT just run your favorite web browser and
+>To launch swat just run your favorite web browser and
point it at "http://localhost:901/".</P
><P
->Note that you can attach to SWAT from any IP connected
+>Note that you can attach to swat from any IP connected
machine but connecting from a remote machine leaves your
connection open to password sniffing as passwords will be sent
in the clear over the wire. </P
@@ -266,7 +246,7 @@ NAME="AEN78"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN82"
+NAME="AEN75"
></A
><H2
>FILES</H2
@@ -324,7 +304,7 @@ CLASS="FILENAME"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN103"
+NAME="AEN96"
></A
><H2
>WARNINGS</H2
@@ -356,7 +336,7 @@ CLASS="FILENAME"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN111"
+NAME="AEN104"
></A
><H2
>VERSION</H2
@@ -367,7 +347,7 @@ NAME="AEN111"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN114"
+NAME="AEN107"
></A
><H2
>SEE ALSO</H2
@@ -394,7 +374,7 @@ TARGET="_top"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN121"
+NAME="AEN114"
></A
><H2
>AUTHOR</H2
diff --git a/docs/htmldocs/testparm.1.html b/docs/htmldocs/testparm.1.html
index bae907c687a..d1a1e4333a5 100644
--- a/docs/htmldocs/testparm.1.html
+++ b/docs/htmldocs/testparm.1.html
@@ -37,7 +37,7 @@ NAME="AEN8"
><B
CLASS="COMMAND"
>testparm</B
-> [-s] [-h] [-L &#60;servername&#62;] {config filename} [hostname hostIP]</P
+> [-s] [-h] [-L &lt;servername&gt;] {config filename} [hostname hostIP]</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -68,8 +68,9 @@ CLASS="COMMAND"
</B
> will successfully load the configuration file.</P
><P
->Note that this is <EM
->NOT</EM
+>Note that this is <I
+CLASS="EMPHASIS"
+>NOT</I
> a guarantee that
the services specified in the configuration file will be
available or will operate as expected. </P
@@ -125,12 +126,7 @@ CLASS="COMMAND"
>-L servername</DT
><DD
><P
->Sets the value of the %L macro to <TT
-CLASS="REPLACEABLE"
-><I
->servername</I
-></TT
->.
+>Sets the value of the %L macro to servername.
This is useful for testing include files specified with the
%L macro. </P
></DD
@@ -151,10 +147,7 @@ CLASS="FILENAME"
><DD
><P
>If this parameter and the following are
- specified, then <B
-CLASS="COMMAND"
->testparm</B
-> will examine the <TT
+ specified, then testparm will examine the <TT
CLASS="PARAMETER"
><I
>hosts
@@ -192,7 +185,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN66"
+NAME="AEN64"
></A
><H2
>FILES</H2
@@ -221,13 +214,13 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN75"
+NAME="AEN73"
></A
><H2
>DIAGNOSTICS</H2
><P
>The program will issue a message saying whether the
- configuration file loaded OK or not. This message may be preceded by
+ configuration file loaded OK or not. This message may be preceeded by
errors and warnings if the file did not load. If the file was
loaded OK, the program then dumps all known service details
to stdout. </P
@@ -235,7 +228,7 @@ NAME="AEN75"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN78"
+NAME="AEN76"
></A
><H2
>VERSION</H2
@@ -246,7 +239,7 @@ NAME="AEN78"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN81"
+NAME="AEN79"
></A
><H2
>SEE ALSO</H2
@@ -272,7 +265,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN88"
+NAME="AEN86"
></A
><H2
>AUTHOR</H2
diff --git a/docs/htmldocs/testprns.1.html b/docs/htmldocs/testprns.1.html
index 4929415da02..94ab41c98d4 100644
--- a/docs/htmldocs/testprns.1.html
+++ b/docs/htmldocs/testprns.1.html
@@ -163,11 +163,11 @@ NAME="AEN48"
>DIAGNOSTICS</H2
><P
>If a printer is found to be valid, the message
- "Printer name &#60;printername&#62; is valid" will be
+ "Printer name &lt;printername&gt; is valid" will be
displayed. </P
><P
>If a printer is found to be invalid, the message
- "Printer name &#60;printername&#62; is not valid" will be
+ "Printer name &lt;printername&gt; is not valid" will be
displayed. </P
><P
>All messages that would normally be logged during
diff --git a/docs/htmldocs/wbinfo.1.html b/docs/htmldocs/wbinfo.1.html
index 129d0459e1f..2787f514c07 100644
--- a/docs/htmldocs/wbinfo.1.html
+++ b/docs/htmldocs/wbinfo.1.html
@@ -243,16 +243,13 @@ NAME="AEN88"
CLASS="COMMAND"
>winbindd(8)
</B
-> daemon is not working <B
-CLASS="COMMAND"
->wbinfo</B
-> will always return
+> daemon is not working wbinfo will always return
failure. </P
></DIV
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN93"
+NAME="AEN92"
></A
><H2
>VERSION</H2
@@ -264,7 +261,7 @@ NAME="AEN93"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN96"
+NAME="AEN95"
></A
><H2
>SEE ALSO</H2
@@ -282,7 +279,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN101"
+NAME="AEN100"
></A
><H2
>AUTHOR</H2
diff --git a/docs/htmldocs/winbind.html b/docs/htmldocs/winbind.html
index 447069f17aa..2f023561edc 100644
--- a/docs/htmldocs/winbind.html
+++ b/docs/htmldocs/winbind.html
@@ -1,7 +1,7 @@
<HTML
><HEAD
><TITLE
->Unified Logons between Windows NT and UNIX using Winbind</TITLE
+>Unifed Logons between Windows NT and UNIX using Winbind</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.57"></HEAD
@@ -20,7 +20,7 @@ CLASS="TITLEPAGE"
CLASS="TITLE"
><A
NAME="AEN1"
->Unified Logons between Windows NT and UNIX using Winbind</A
+>Unifed Logons between Windows NT and UNIX using Winbind</A
></H1
><HR></DIV
><DIV
@@ -39,7 +39,7 @@ CLASS="EMPHASIS"
>winbind
</I
>, a component of the Samba suite of programs as a
- solution to the unified logon problem. Winbind uses a UNIX implementation
+ solution to the unied logon problem. Winbind uses a UNIX implementation
of Microsoft RPC calls, Pluggable Authentication Modules, and the Name
Service Switch to allow Windows NT domain users to appear and operate
as UNIX users on a UNIX machine. This paper describes the winbind
@@ -70,7 +70,7 @@ NAME="AEN7"
can lead to synchronization problems between the UNIX and Windows
systems and confusion for users.</P
><P
->We divide the unified logon problem for UNIX machines into
+>We divide the unifed logon problem for UNIX machines into
three smaller problems:</P
><P
></P
@@ -97,7 +97,7 @@ NAME="AEN7"
information on the UNIX machines and without creating additional
tasks for the system administrator when maintaining users and
groups on either system. The winbind system provides a simple
- and elegant solution to all three components of the unified logon
+ and elegant solution to all three components of the unifed logon
problem.</P
></DIV
><DIV
@@ -224,7 +224,7 @@ NAME="AEN40"
>The Name Service Switch, or NSS, is a feature that is
present in many UNIX operating systems. It allows system
information such as hostnames, mail aliases and user information
- to be resolved from different sources. For example, a standalone
+ to be resolved from dierent sources. For example, a standalone
UNIX workstation may resolve system information from a series of
flat files stored on the local lesystem. A networked workstation
may first attempt to resolve system information from local files,
@@ -253,7 +253,7 @@ CLASS="FILENAME"
for a line which matches the service type being requested, for
example the "passwd" service type is used when user or group names
are looked up. This config line species which implementations
- of that service should be tried and in what order. If the passwd
+ of that service should be tried andin what order. If the passwd
config line is:</P
><P
><B
@@ -303,7 +303,7 @@ NAME="AEN56"
>Pluggable Authentication Modules, also known as PAM,
is a system for abstracting authentication and authorization
technologies. With a PAM module it is possible to specify different
- authentication methods for different system applications without
+ authentication methods for dierent system applications without
having to recompile these applications. PAM is also useful
for implementing a particular policy for authorization. For example,
a system administrator may only allow console logins from users
@@ -318,7 +318,7 @@ NAME="AEN56"
this change take eect directly on the Primary Domain Controller.
</P
><P
->PAM is configured by providing control files in the directory
+>PAM is congured by providing control files in the directory
<TT
CLASS="FILENAME"
>/etc/pam.d/</TT
@@ -350,11 +350,11 @@ NAME="AEN64"
></H2
><P
>When a user or group is created under Windows NT
- is it allocated a numerical relative identifier (RID). This is
- slightly different to UNIX which has a range of numbers which are
+ is it allocated a numerical relative identier (RID). This is
+ slightly dierent to UNIX which has a range of numbers which are
used to identify users, and the same range in which to identify
groups. It is winbind's job to convert RIDs to UNIX id numbers and
- vice versa. When winbind is configured it is given part of the UNIX
+ vice versa. When winbind is congured it is given part of the UNIX
user id space and a part of the UNIX group id space in which to
store Windows NT users and groups. If a Windows NT user is
resolved for the first time, it is allocated the next UNIX id from
@@ -381,7 +381,7 @@ NAME="AEN68"
by NT domain controllers. User or group information returned
by a PDC is cached by winbind along with a sequence number also
returned by the PDC. This sequence number is incremented by
- Windows NT whenever any user or group information is modified. If
+ Windows NT whenever any user or group information is modied. If
a cached entry has expired, the sequence number is requested from
the PDC and compared against the sequence number of the cached entry.
If the sequence numbers do not match, then the cached information
@@ -415,7 +415,7 @@ CLASS="FILENAME"
CLASS="COMMAND"
>winbindd(8)</B
> man page which will provide you
- with configuration information and give you sample configuration files.
+ with conguration information and give you sample conguration files.
You may also wish to update the main Samba daemons smbd and nmbd)
with a more recent development release, such as the recently
announced Samba 2.2 alpha release.</P
diff --git a/docs/htmldocs/winbindd.8.html b/docs/htmldocs/winbindd.8.html
index 125daccf34c..a98b7a28640 100644
--- a/docs/htmldocs/winbindd.8.html
+++ b/docs/htmldocs/winbindd.8.html
@@ -37,7 +37,7 @@ NAME="AEN8"
><B
CLASS="COMMAND"
>nmblookup</B
-> [-d debuglevel] [-i] [-S] [-r] [-A] [-h] [-B &#60;broadcast address&#62;] [-U &#60;unicast address&#62;] [-d &#60;debug level&#62;] [-s &#60;smb config file&#62;] [-i &#60;NetBIOS scope&#62;] [-T] {name}</P
+> [-d debuglevel] [-i] [-S] [-r] [-A] [-h] [-B &lt;broadcast address&gt;] [-U &lt;unicast address&gt;] [-d &lt;debug level&gt;] [-s &lt;smb config file&gt;] [-i &lt;NetBIOS scope&gt;] [-T] {name}</P
></DIV
><DIV
CLASS="REFSECT1"
@@ -70,10 +70,7 @@ CLASS="FILENAME"
of user and group ids specified by the administrator of the
Samba system.</P
><P
->The service provided by <B
-CLASS="COMMAND"
->winbindd</B
-> is called `winbind' and
+>The service provided by winbindd is called `winbind' and
can be used to resolve user and group information from a
Windows NT server. The service can also provide authentication
services via an associated PAM module. </P
@@ -131,26 +128,17 @@ CLASS="FILENAME"
> and then from the
Windows NT server. </P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>passwd: files winbind
group: files winbind
</PRE
-></TD
-></TR
-></TABLE
></P
></DIV
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN53"
+NAME="AEN52"
></A
><H2
>OPTIONS</H2
@@ -189,7 +177,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN66"
+NAME="AEN65"
></A
><H2
>NAME AND ID RESOLUTION</H2
@@ -220,7 +208,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN72"
+NAME="AEN71"
></A
><H2
>CONFIGURATION</H2
@@ -255,7 +243,7 @@ CLASS="COMMAND"
DOMAIN\username. In some cases this separator character may
cause problems as the '\' character has special meaning in
unix shells. In that case you can use the winbind separator
- option to specify an alternative separator character. Good
+ option to specify an alternative sepataror character. Good
alternatives may be '/' (although that conflicts
with the unix directory separator) or a '+ 'character.
The '+' character appears to be the best choice for 100%
@@ -279,12 +267,12 @@ CLASS="COMMAND"
><P
>The winbind uid parameter specifies the
range of user ids that are allocated by the winbindd daemon.
- This range of ids should have no existing local or NIS users
+ This range of ids should have no existing local or nis users
within it as strange conflicts can occur otherwise. </P
><P
>Default: <B
CLASS="COMMAND"
->winbind uid = &#60;empty string&#62;
+>winbind uid = &lt;empty string&gt;
</B
></P
><P
@@ -299,12 +287,12 @@ CLASS="COMMAND"
><P
>The winbind gid parameter specifies the
range of group ids that are allocated by the winbindd daemon.
- This range of group ids should have no existing local or NIS
+ This range of group ids should have no existing local or nis
groups within it as strange conflicts can occur otherwise.</P
><P
>Default: <B
CLASS="COMMAND"
->winbind gid = &#60;empty string&#62;
+>winbind gid = &lt;empty string&gt;
</B
></P
><P
@@ -322,7 +310,7 @@ CLASS="COMMAND"
seconds the winbindd daemon will cache user and group information
before querying a Windows NT server again. When a item in the
cache is older than this time winbindd will ask the domain
- controller for the sequence number of the server's account database.
+ controller for the sequence number of the servers account database.
If the sequence number has not changed then the cached item is
marked as valid for a further <TT
CLASS="PARAMETER"
@@ -375,13 +363,11 @@ CLASS="COMMAND"
> system call will not
return any data. </P
><P
-><EM
->Warning:</EM
+><I
+CLASS="EMPHASIS"
+>Warning:</I
> Turning off user enumeration
- may cause some programs to behave oddly. For example, the <B
-CLASS="COMMAND"
->finger</B
->
+ may cause some programs to behave oddly. For example, the finger
program relies on having access to the full user list when
searching for matching usernames. </P
><P
@@ -418,8 +404,9 @@ CLASS="COMMAND"
> system
call will not return any data. </P
><P
-><EM
->Warning:</EM
+><I
+CLASS="EMPHASIS"
+>Warning:</I
> Turning off group
enumeration may cause some programs to behave oddly.
</P
@@ -485,7 +472,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN154"
+NAME="AEN152"
></A
><H2
>EXAMPLE SETUP</H2
@@ -500,20 +487,11 @@ CLASS="FILENAME"
> put the
following:</P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>passwd: files winbind
group: files winbind
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>In <TT
@@ -527,12 +505,6 @@ CLASS="PARAMETER"
></TT
> lines with something like this: </P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>auth required /lib/security/pam_securetty.so
@@ -540,9 +512,6 @@ auth required /lib/security/pam_nologin.so
auth sufficient /lib/security/pam_winbind.so
auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>Note in particular the use of the <TT
@@ -583,7 +552,7 @@ CLASS="PARAMETER"
>-U</I
></TT
> can be any Domain
- user that has administrator privileges on the machine. Next from
+ user that has administrator priviliges on the machine. Next from
within <B
CLASS="COMMAND"
>samedit</B
@@ -599,7 +568,7 @@ CLASS="COMMAND"
><P
>Next copy <TT
CLASS="FILENAME"
->libnss_winbind.so</TT
+>libnss_winbind.so.2</TT
> to
<TT
CLASS="FILENAME"
@@ -611,33 +580,11 @@ CLASS="FILENAME"
to <TT
CLASS="FILENAME"
>/lib/security</TT
->. A symbolic link needs to be
- made from <TT
-CLASS="FILENAME"
->/lib/libnss_winbind.so</TT
-> to
- <TT
-CLASS="FILENAME"
->/lib/libnss_winbind.so.2</TT
->. If you are using an
- older version of glibc then the target of the link should be
- <TT
-CLASS="FILENAME"
->/lib/libnss_winbind.so.1</TT
>.</P
><P
->Finally, setup a <TT
-CLASS="FILENAME"
->smb.conf</TT
-> containing directives like the
+>Finally, setup a smb.conf containing directives like the
following: </P
><P
-><TABLE
-BORDER="0"
-BGCOLOR="#E0E0E0"
-WIDTH="100%"
-><TR
-><TD
><PRE
CLASS="PROGRAMLISTING"
>[global]
@@ -651,9 +598,6 @@ CLASS="PROGRAMLISTING"
security = domain
password server = *
</PRE
-></TD
-></TR
-></TABLE
></P
><P
>Now start winbindd and you should find that your user and
@@ -672,7 +616,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN197"
+NAME="AEN191"
></A
><H2
>Notes</H2
@@ -732,7 +676,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN213"
+NAME="AEN207"
></A
><H2
>Signals</H2
@@ -783,7 +727,7 @@ CLASS="COMMAND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN230"
+NAME="AEN224"
></A
><H2
>Files</H2
@@ -857,19 +801,19 @@ CLASS="FILENAME"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN259"
+NAME="AEN253"
></A
><H2
>VERSION</H2
><P
>This man page is correct for version 2.2 of
the Samba suite. winbindd is however not available in
- the stable release of Samba as of yet.</P
+ stable release of Samba as of yet.</P
></DIV
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN262"
+NAME="AEN256"
></A
><H2
>SEE ALSO</H2
@@ -897,7 +841,7 @@ TARGET="_top"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN269"
+NAME="AEN263"
></A
><H2
>AUTHOR</H2
diff --git a/docs/manpages/findsmb.1 b/docs/manpages/findsmb.1
index 381b5116a2e..24dbc743c5b 100644
--- a/docs/manpages/findsmb.1
+++ b/docs/manpages/findsmb.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "FINDSMB" "1" "03 May 2001" "" ""
+.TH FINDSMB 1 "23 Jun 2001" "findsmb 2.2.0a"
.SH NAME
findsmb \- list info about machines that respond to SMB name queries on a subnet
.SH SYNOPSIS
@@ -74,8 +74,7 @@ the Samba suite.
.PP
\fBnmbd(8)\fR,
\fBsmbclient(1)
-\fR
-.SH "AUTHOR"
+\fR.SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/manpages/lmhosts.5 b/docs/manpages/lmhosts.5
index d8a64099bcd..ba4df3f050f 100644
--- a/docs/manpages/lmhosts.5
+++ b/docs/manpages/lmhosts.5
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "LMHOSTS" "5" "03 May 2001" "" ""
+.TH LMHOSTS 5 "23 Jun 2001" "lmhosts 2.2.0a"
.SH NAME
lmhosts \- The Samba NetBIOS hosts file
.SH SYNOPSIS
@@ -76,8 +76,7 @@ the Samba suite.
.SH "SEE ALSO"
.PP
\fBsmbclient(1)
-\fR
-.SH "AUTHOR"
+\fR.SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/manpages/make_smbcodepage.1 b/docs/manpages/make_smbcodepage.1
index ef0cb4d2dda..bffe6642ace 100644
--- a/docs/manpages/make_smbcodepage.1
+++ b/docs/manpages/make_smbcodepage.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "MAKE_SMBCODEPAGE" "1" "03 May 2001" "" ""
+.TH MAKE_SMBCODEPAGE 1 "23 Jun 2001" "make_smbcodepage 2.2.0a"
.SH NAME
make_smbcodepage \- construct a codepage file for Samba
.SH SYNOPSIS
@@ -29,11 +29,11 @@ This is the codepage we are processing (a
number, e.g. 850).
.TP
\fBinputfile\fR
-This is the input file to process. In
-the \fIc\fR case this will be a text
+This is the input file to process. In t
+he '\fIc\fR' case this will be a text
codepage definition file such as the ones found in the Samba
\fIsource/codepages\fR directory. In
-the \fId\fR case this will be the
+the '\fId\fR' case this will be the
binary format codepage definition file normally found in
the \fIlib/codepages\fR directory in the
Samba install directory path.
@@ -124,8 +124,7 @@ the Samba suite.
.SH "SEE ALSO"
.PP
\fBsmbd(8)\fR,
-smb.conf(5)
-.SH "AUTHOR"
+smb.conf(5).SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/manpages/make_unicodemap.1 b/docs/manpages/make_unicodemap.1
index 77a580dcea9..be29bb19fb0 100644
--- a/docs/manpages/make_unicodemap.1
+++ b/docs/manpages/make_unicodemap.1
@@ -1,99 +1,100 @@
-.\" This manpage has been automatically generated by docbook2man-spec
-.\" from a DocBook document. docbook2man-spec can be found at:
-.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
-.\" Please send any bug reports, improvements, comments, patches,
-.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "MAKE_UNICODEMAP" "1" "22 June 2001" "" ""
-.SH NAME
-make_unicodemap \- construct a unicode map file for Samba
-.SH SYNOPSIS
-.sp
-\fBmake_unicodemap\fR \fBcodepage\fR \fBinputfile\fR \fBoutputfile\fR
-.SH "DESCRIPTION"
-.PP
-This tool is part of the Samba
-suite.
-.PP
-\fBmake_unicodemap\fR compiles text unicode map
-files into binary unicode map files for use with the
-internationalization features of Samba 2.2.
-.SH "OPTIONS"
-.TP
-\fBcodepage\fR
-This is the codepage or UNIX character
-set we are processing (a number, e.g. 850).
-.TP
-\fBinputfile\fR
-This is the input file to process. This is a
-text unicode map file such as the ones found in the Samba
-\fIsource/codepages\fR directory.
-.TP
-\fBoutputfile\fR
-This is the binary output file to produce.
-.SH "SAMBA UNICODE MAP FILES"
-.PP
-A text Samba unicode map file is a description that tells Samba
-how to map characters from a specified DOS code page or UNIX character
-set to 16 bit unicode.
-.PP
-A binary Samba unicode map file is a binary representation
-of the same information, including a value that specifies what
-codepage or UNIX character set this file is describing.
-.SH "FILES"
-.PP
-\fICP<codepage>.TXT\fR
-.PP
-These are the input (text) unicode map files provided
-in the Samba \fIsource/codepages\fR
-directory.
-.PP
-A text unicode map file consists of multiple lines
-containing two fields. These fields are :
-.TP 0.2i
-\(bu
-\fIcharacter\fR - which is
-the (hex) character mapped on this line.
-.TP 0.2i
-\(bu
-\fIunicode\fR - which
-is the (hex) 16 bit unicode character that the character
-will map to.
-.PP
-\fIunicode_map.<codepage>\fR - These are
-the output (binary) unicode map files produced and placed in
-the Samba destination \fIlib/codepage\fR
-directory.
-.PP
-.SH "INSTALLATION"
-.PP
-The location of the server and its support files is a matter
-for individual system administrators. The following are thus
-suggestions only.
-.PP
-It is recommended that the \fBmake_unicodemap\fR
-program be installed under the
-\fI$prefix/samba\fR hierarchy,
-in a directory readable by all, writeable only by root. The
-program itself should be executable by all. The program
-should NOT be setuid or setgid!
-.SH "VERSION"
-.PP
-This man page is correct for version 2.2 of
-the Samba suite.
-.SH "SEE ALSO"
-.PP
-\fBsmbd(8)\fR,
-smb.conf(5)
-.SH "AUTHOR"
-.PP
-The original Samba software and related utilities
-were created by Andrew Tridgell. Samba is now developed
-by the Samba Team as an Open Source project similar
-to the way the Linux kernel is developed.
-.PP
-The original Samba man pages were written by Karl Auer.
-The man page sources were converted to YODL format (another
-excellent piece of Open Source software, available at
-ftp://ftp.icce.rug.nl/pub/unix/ <URL:ftp://ftp.icce.rug.nl/pub/unix/>) and updated for the Samba 2.0
-release by Jeremy Allison. The conversion to DocBook for
-Samba 2.2 was done by Gerald Carter
+.TH MAKE_UNICODEMAP 1 "23 Jun 2001" "make_unicodemap 2.2.0a"
+.PP
+.SH "NAME"
+make_unicodemap \- Construct a unicode map file for Samba
+.PP
+.SH "SYNOPSIS"
+.PP
+\fBmake_unicodemap\fP codepage inputfile outputfile
+.PP
+.SH "DESCRIPTION"
+.PP
+This program is part of the \fBSamba\fP suite\&.
+.PP
+\fBmake_unicodemap\fP compiles text unicode map files into binary unicode
+map files for use with the internationalization features of Samba 2\&.0
+.PP
+.SH "OPTIONS"
+.PP
+.IP
+.IP "codepage"
+This is the codepage or UNIX character set we are processing (a number, e\&.g\&. 850)\&.
+.IP
+.IP "inputfile"
+This is the input file to process\&. This is a text unicode map file
+such as the ones found in the Samba \fIsource/codepages\fP directory\&.
+.IP
+.IP "outputfile"
+This is the binary output file to produce\&.
+.IP
+.PP
+.SH "Samba Unicode Map Files"
+.PP
+A text Samba unicode map file is a description that tells
+Samba how to map characters from a specified DOS code page or UNIX character
+set to 16 bit unicode\&.
+.PP
+A binary Samba unicode map file is a binary representation of
+the same information, including a value that specifies what codepage
+or UNIX character set this file is describing\&.
+.PP
+.SH "FILES"
+.PP
+\fBCP<codepage>\&.TXT\fP
+.PP
+These are the input (text) unicode map files provided in the Samba
+\fIsource/codepages\fP directory\&.
+.PP
+A text unicode map file consists of multiple lines
+containing two fields\&. These fields are :
+.PP
+.IP
+.IP o
+\fBcharacter\fP: which is the (hex) character mapped on this
+line\&.
+.IP
+.IP o
+\fBunicode\fP: which is the (hex) 16 bit unicode character that the
+character will map to\&.
+.IP
+.PP
+\fBunicode_map\&.<codepage>\fP These are the output (binary) unicode map files
+produced and placed in the Samba destination \fIlib/codepage\fP
+directory\&.
+.PP
+.SH "INSTALLATION"
+.PP
+The location of the server and its support files is a matter for
+individual system administrators\&. The following are thus suggestions
+only\&.
+.PP
+It is recommended that the \fBmake_unicodemap\fP program be installed
+under the \fI/usr/local/samba\fP hierarchy, in a directory readable by
+all, writeable only by root\&. The program itself should be executable
+by all\&. The program should NOT be setuid or setgid!
+.PP
+.SH "VERSION"
+.PP
+This man page is correct for version 2\&.0 of the Samba suite\&.
+.PP
+.SH "SEE ALSO"
+.PP
+\fBsmb\&.conf(5)\fP, \fBsmbd (8)\fP
+.PP
+.SH "AUTHOR"
+.PP
+The original Samba software and related utilities were created by
+Andrew Tridgell samba@samba\&.org\&. Samba is now developed
+by the Samba Team as an Open Source project similar to the way the
+Linux kernel is developed\&.
+.PP
+The original Samba man pages were written by Karl Auer\&. The man page
+sources were converted to YODL format (another excellent piece of Open
+Source software, available at
+\fBftp://ftp\&.icce\&.rug\&.nl/pub/unix/\fP)
+and updated for the Samba2\&.0 release by Jeremy Allison\&.
+samba@samba\&.org\&.
+.PP
+See \fBsamba (7)\fP to find out how to get a full
+list of contributors and details on how to submit bug reports,
+comments etc\&.
diff --git a/docs/manpages/nmbd.8 b/docs/manpages/nmbd.8
index 851383e5c0a..6b4d7a43a14 100644
--- a/docs/manpages/nmbd.8
+++ b/docs/manpages/nmbd.8
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "NMBD" "8" "22 June 2001" "" ""
+.TH NMBD 8 "23 Jun 2001" "nmbd 2.2.0a"
.SH NAME
nmbd \- NetBIOS name server to provide NetBIOS over IP naming services to clients
.SH SYNOPSIS
@@ -15,7 +15,7 @@ This program is part of the Samba suite.
.PP
\fBnmbd\fR is a server that understands
and can reply to NetBIOS over IP name service requests, like
-those produced by SMB/CIFS clients such as Windows 95/98/ME,
+those produced by SMBD/CIFS clients such as Windows 95/98/ME,
Windows NT, Windows 2000, and LanManager clients. It also
participates in the browsing protocols which make up the
Windows "Network Neighborhood" view.
@@ -75,8 +75,7 @@ for \fBnmbd\fR.
NetBIOS lmhosts file. The lmhosts
file is a list of NetBIOS names to IP addresses that
is loaded by the nmbd server and used via the name
-resolution mechanism name resolve order
-to resolve any NetBIOS name queries needed by the server. Note
+resolution mechanism name resolve orderto resolve any NetBIOS name queries needed by the server. Note
that the contents of this file are \fBNOT\fR
used by \fBnmbd\fR to answer any name queries.
Adding a line to this file affects name NetBIOS resolution
@@ -112,8 +111,7 @@ and generate HUGE amounts of log data, most of which is extremely
cryptic.
Note that specifying this parameter here will override
-the log level
-parameter in the \fI smb.conf\fRfile.
+the log levelparameter in the \fI smb.conf\fRfile.
.TP
\fB-l <log file>\fR
The -l parameter specifies a path
@@ -177,20 +175,17 @@ See the section INSTALLATION below.
.TP
\fB\fI/usr/local/samba/lib/smb.conf\fB\fR
This is the default location of the
-\fIsmb.conf\fR
-server configuration file. Other common places that systems
+\fIsmb.conf\fRserver configuration file. Other common places that systems
install this file are \fI/usr/samba/lib/smb.conf\fR
and \fI/etc/smb.conf\fR.
When run as a WINS server (see the
-wins support
-parameter in the \fI smb.conf(5)\fRman page), \fBnmbd\fR
+wins supportparameter in the \fI smb.conf(5)\fRman page), \fBnmbd\fR
will store the WINS database in the file \fIwins.dat\fR
in the \fIvar/locks\fR directory configured under
wherever Samba was configured to install itself.
-If \fBnmbd\fR is acting as a \fB browse master\fR (see the local master
-parameter in the \fI smb.conf(5)\fRman page), \fBnmbd\fR
+If \fBnmbd\fR is acting as a \fB browse master\fR (see the local masterparameter in the \fI smb.conf(5)\fRman page), \fBnmbd\fR
will store the browsing database in the file \fIbrowse.dat
\fRin the \fIvar/locks\fR directory
configured under wherever Samba was configured to install itself.
@@ -203,11 +198,11 @@ The correct way to terminate \fBnmbd\fR is to send it
a SIGTERM (-15) signal and wait for it to die on its own.
.PP
\fBnmbd\fR will accept SIGHUP, which will cause
-it to dump out its namelists into the file \fInamelist.debug
+it to dump out it's namelists into the file \fInamelist.debug
\fRin the \fI/usr/local/samba/var/locks\fR
directory (or the \fIvar/locks\fR directory configured
under wherever Samba was configured to install itself). This will also
-cause \fBnmbd\fR to dump out its server database in
+cause \fBnmbd\fR to dump out it's server database in
the \fIlog.nmb\fR file. In addition, the debug log level
of nmbd may be raised by sending it a SIGUSR1 (\fBkill -USR1
<nmbd-pid>\fR) and lowered by sending it a
diff --git a/docs/manpages/nmblookup.1 b/docs/manpages/nmblookup.1
index afc1ec3a107..05fa4762f9f 100644
--- a/docs/manpages/nmblookup.1
+++ b/docs/manpages/nmblookup.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "NMBLOOKUP" "1" "22 June 2001" "" ""
+.TH NMBLOOKUP 1 "23 Jun 2001" "nmblookup 2.2.0a"
.SH NAME
nmblookup \- NetBIOS over TCP/IP client used to lookup NetBIOS names
.SH SYNOPSIS
@@ -44,9 +44,8 @@ Try and bind to UDP port 137 to send and receive UDP
datagrams. The reason for this option is a bug in Windows 95
where it ignores the source port of the requesting packet
and only replies to UDP port 137. Unfortunately, on most UNIX
-systems root privilege is needed to bind to this port, and
-in addition, if the nmbd(8)
-daemon is running on this machine it also binds to this port.
+systems root privilage is needed to bind to this port, and
+in addition, if the nmbd(8)daemon is running on this machine it also binds to this port.
.TP
\fB-A\fR
Interpret \fIname\fR as
@@ -127,7 +126,7 @@ used to query DNS servers). To query a WINS server,
.PP
For example, running :
.PP
-\fBnmblookup -U samba.org -R 'IRIX#1B'\fR
+\fBnmblookup -U samba.org -R IRIX#1B'\fR
.PP
would query the WINS server samba.org for the domain
master browser (1B name type) for the IRIX workgroup.
@@ -138,8 +137,7 @@ the Samba suite.
.SH "SEE ALSO"
.PP
\fBnmbd(8)\fR,
-samba(7)
-.SH "AUTHOR"
+samba(7).SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/manpages/rpcclient.1 b/docs/manpages/rpcclient.1
index 9dce67898ab..ab1639732ab 100644
--- a/docs/manpages/rpcclient.1
+++ b/docs/manpages/rpcclient.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "RPCCLIENT" "1" "22 June 2001" "" ""
+.TH RPCCLIENT 1 "23 Jun 2001" "rpcclient 2.2.0a"
.SH NAME
rpcclient \- tool for executing client side MS-RPC functions
.SH SYNOPSIS
@@ -50,15 +50,14 @@ below))
\fB-d debuglevel\fR
set the debuglevel. Debug level 0 is the lowest
and 100 being the highest. This should be set to 100 if you are
-planning on submitting a bug report to the Samba team (see \fIBUGS.txt\fR).
+planning on submitting a bug report to the Samba team (see BUGS.txt).
.TP
\fB-h\fR
Print a summary of command line options.
.TP
\fB-l logbasename\fR
-File name for log/debug files. The extension
-\&'.client' will be appended. The log file is never removed
-by the client.
+File name for log/debug files. .client will be
+appended. The log file is never removed by the client.
.TP
\fB-N\fR
instruct \fBrpcclient\fR not to ask
@@ -74,7 +73,7 @@ Sets the SMB username or username and password.
If %password is not specified, The user will be prompted. The
client will first check the \fBUSER\fR environment variable, then the
-\fBLOGNAME\fR variable and if either exists, the
+\fBLOGNAME\fR variable and if either exist, the
string is uppercased. If these environmental variables are not
found, the username GUEST is used.
@@ -94,8 +93,9 @@ it in directly.
.TP
\fB-W domain\fR
Set the SMB domain of the username. This
-overrides the default domain which is the domain defined in
-smb.conf. If the domain specified is the same as the server's NetBIOS name,
+overrides the default domain which is the domain of the
+server specified with the \fI-S\fR option.
+If the domain specified is the same as the server's NetBIOS name,
it causes the client to log on using the server's local SAM (as
opposed to the Domain SAM).
.SH "COMMANDS"
@@ -106,12 +106,10 @@ opposed to the Domain SAM).
\fBlsaquery\fR
.TP 0.2i
\(bu
-\fBlookupsids\fR - Resolve a list
-of SIDs to usernames.
+\fBlookupsids\fR
.TP 0.2i
\(bu
-\fBlookupnames\fR - Resolve s list
-of usernames to SIDs.
+\fBlookupnames\fR
.TP 0.2i
\(bu
\fBenumtrusts\fR
@@ -132,18 +130,6 @@ of usernames to SIDs.
.TP 0.2i
\(bu
\fBquerygroupmem\fR
-.TP 0.2i
-\(bu
-\fBqueryaliasmem\fR
-.TP 0.2i
-\(bu
-\fBquerydispinfo\fR
-.TP 0.2i
-\(bu
-\fBquerydominfo\fR
-.TP 0.2i
-\(bu
-\fBenumdomgroups\fR
.PP
.PP
.PP
@@ -194,12 +180,6 @@ and the \fIport\fRmust be a valid port name (see
\fBenumports\fR.
.TP 0.2i
\(bu
-\fBdeldriver\fR - Delete the
-specified printer driver for all architectures. This
-does not delete the actual driver files from the server,
-only the entry from the server's list of drivers.
-.TP 0.2i
-\(bu
\fBenumdata\fR - Enumerate all
printer setting data stored on the server. On Windows NT clients,
these values are stored in the registry, while Samba servers
@@ -303,7 +283,7 @@ been developed from examining Network traces. No documentation is
available from the original creators (Microsoft) on how MSRPC over
SMB works, or how the individual MSRPC services work. Microsoft's
implementation of these services has been demonstrated (and reported)
-to be... a bit flaky in places.
+to be... a bit flakey in places.
.PP
The development of Samba's implementation is also a bit rough,
and as more of the services are understood, it can even result in
@@ -324,6 +304,6 @@ by the Samba Team as an Open Source project similar
to the way the Linux kernel is developed.
.PP
The original rpcclient man page was written by Matthew
-Geddes, Luke Kenneth Casson Leighton, and rewritten by Gerald Carter.
+Geddes, Luke Kenneth Casson, and rewriten by Gerald Carter.
The conversion to DocBook for Samba 2.2 was done by Gerald
Carter.
diff --git a/docs/manpages/samba.7 b/docs/manpages/samba.7
index 666240006ad..2fe48c759c8 100644
--- a/docs/manpages/samba.7
+++ b/docs/manpages/samba.7
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SAMBA" "7" "03 May 2001" "" ""
+.TH SAMBA 7 "23 Jun 2001" "samba 2.2.0a"
.SH NAME
SAMBA \- A Windows SMB/CIFS fileserver for UNIX
.SH SYNOPSIS
diff --git a/docs/manpages/smb.conf.5 b/docs/manpages/smb.conf.5
index 62569fafad0..a10c40dfac7 100644
--- a/docs/manpages/smb.conf.5
+++ b/docs/manpages/smb.conf.5
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMB.CONF" "5" "22 June 2001" "" ""
+.TH SMB.CONF 5 "23 Jun 2001" "smb.conf 2.2.0a"
.SH NAME
smb.conf \- The configuration file for the Samba suite
.SH "SYNOPSIS"
@@ -447,7 +447,7 @@ that is all in upper case and of suitable length, are created
upper case, or if they are forced to be the "default"
case. This option can be use with "preserve case = yes"
to permit long filenames to retain their case, while short names
-are lowercased. Default \fByes\fR.
+are lowered. Default \fByes\fR.
.PP
By default, Samba 2.2 has the same semantics as a Windows
NT server, in that it is case insensitive but case preserving.
@@ -474,7 +474,7 @@ If the client has previously registered a username
with the system and now supplies a correct password for that
username then the connection is allowed.
.IP 3.
-The client's NetBIOS name and any previously
+The client's netbios name and any previously
used user names are checked against the supplied password, if
they match then the connection is allowed as the corresponding
user.
@@ -503,13 +503,10 @@ Here is a list of all global parameters. See the section of
each parameter for details. Note that some are synonyms.
.TP 0.2i
\(bu
-\fIadd printer command\fR
-.TP 0.2i
-\(bu
-\fIadd share command\fR
+\fIadd user script\fR
.TP 0.2i
\(bu
-\fIadd user script\fR
+\fIaddprinter command\fR
.TP 0.2i
\(bu
\fIallow trusted domains\fR
@@ -533,9 +530,6 @@ each parameter for details. Note that some are synonyms.
\fIchange notify timeout\fR
.TP 0.2i
\(bu
-\fIchange share command\fR
-.TP 0.2i
-\(bu
\fIcharacter set\fR
.TP 0.2i
\(bu
@@ -575,13 +569,10 @@ each parameter for details. Note that some are synonyms.
\fIdefault service\fR
.TP 0.2i
\(bu
-\fIdelete printer command\fR
-.TP 0.2i
-\(bu
-\fIdelete share command\fR
+\fIdelete user script\fR
.TP 0.2i
\(bu
-\fIdelete user script\fR
+\fIdeleteprinter command\fR
.TP 0.2i
\(bu
\fIdfree command\fR
@@ -593,9 +584,18 @@ each parameter for details. Note that some are synonyms.
\fIdomain admin group\fR
.TP 0.2i
\(bu
+\fIdomain admin users\fR
+.TP 0.2i
+\(bu
+\fIdomain groups\fR
+.TP 0.2i
+\(bu
\fIdomain guest group\fR
.TP 0.2i
\(bu
+\fIdomain guest users\fR
+.TP 0.2i
+\(bu
\fIdomain logons\fR
.TP 0.2i
\(bu
@@ -755,9 +755,6 @@ each parameter for details. Note that some are synonyms.
\fInull passwords\fR
.TP 0.2i
\(bu
-\fIobey pam restrictions\fR
-.TP 0.2i
-\(bu
\fIoplock break wait time\fR
.TP 0.2i
\(bu
@@ -767,9 +764,6 @@ each parameter for details. Note that some are synonyms.
\fIos2 driver map\fR
.TP 0.2i
\(bu
-\fIpam password change\fR
-.TP 0.2i
-\(bu
\fIpanic action\fR
.TP 0.2i
\(bu
@@ -935,6 +929,9 @@ each parameter for details. Note that some are synonyms.
\fIunix password sync\fR
.TP 0.2i
\(bu
+\fIunix realname\fR
+.TP 0.2i
+\(bu
\fIupdate encrypted\fR
.TP 0.2i
\(bu
@@ -1338,7 +1335,48 @@ each parameter for details. Note that some are synonyms.
\fIwriteable\fR
.SH "EXPLANATION OF EACH PARAMETER"
.TP
-\fBadd printer command (G)\fR
+\fBadd user script (G)\fR
+This is the full pathname to a script that will
+be run \fBAS ROOT\fR by smbd(8)
+under special circumstances described below.
+
+Normally, a Samba server requires that UNIX users are
+created for all users accessing files on this server. For sites
+that use Windows NT account databases as their primary user database
+creating these users and keeping the user list in sync with the
+Windows NT PDC is an onerous task. This option allows smbdto create the required UNIX users
+\fBON DEMAND\fR when a user accesses the Samba server.
+
+In order to use this option, smbdmust be set to \fIsecurity=server\fR or \fI security=domain\fR and \fIadd user script\fR
+must be set to a full pathname for a script that will create a UNIX
+user given one argument of \fI%u\fR, which expands into
+the UNIX user name to create.
+
+When the Windows user attempts to access the Samba server,
+at login (session setup in the SMB protocol) time, smbdcontacts the \fIpassword server\fR and
+attempts to authenticate the given user with the given password. If the
+authentication succeeds then \fBsmbd\fR
+attempts to find a UNIX user in the UNIX password database to map the
+Windows user into. If this lookup fails, and \fIadd user script
+\fRis set then \fBsmbd\fR will
+call the specified script \fBAS ROOT\fR, expanding
+any \fI%u\fR argument to be the user name to create.
+
+If this script successfully creates the user then \fBsmbd
+\fRwill continue on as though the UNIX user
+already existed. In this way, UNIX users are dynamically created to
+match existing Windows NT accounts.
+
+See also \fI security\fR, \fIpassword server\fR,
+\fIdelete user
+script\fR.
+
+Default: \fBadd user script = <empty string>
+\fR
+Example: \fBadd user script = /usr/local/samba/bin/add_user
+%u\fR
+.TP
+\fBaddprinter command (G)\fR
With the introduction of MS-RPC based printing
support for Windows NT/2000 clients in Samba 2.2, The MS Add
Printer Wizard (APW) icon is now also available in the
@@ -1347,15 +1385,14 @@ allows for printers to be add remotely to a Samba or Windows
NT/2000 print server.
For a Samba host this means that the printer must be
-physically added to the underlying printing system. The \fIadd
-printer command\fR defines a script to be run which
+physically added to underlying printing system. The \fI addprinter command\fR defines a script to be run which
will perform the necessary operations for adding the printer
to the print system and to add the appropriate service definition
to the \fIsmb.conf\fR file in order that it can be
shared by \fBsmbd(8)\fR
.
-The \fIadd printer command\fR is
+The \fIaddprinter command\fR is
automatically invoked with the following parameter (in
order:
.RS
@@ -1386,13 +1423,13 @@ only. The remaining fields in the structure are generated from answers
to the APW questions.
.PP
.PP
-Once the \fIadd printer command\fR has
+Once the \fIaddprinter command\fR has
been executed, \fBsmbd\fR will reparse the \fI smb.conf\fR to determine if the share defined by the APW
exists. If the sharename is still invalid, then \fBsmbd
\fRwill return an ACCESS_DENIED error to the client.
.PP
.PP
-See also \fI delete printer command\fR, \fIprinting\fR,
+See also \fI deleteprinter command\fR, \fIprinting\fR,
\fIshow add
printer wizard\fR
.PP
@@ -1403,95 +1440,6 @@ Default: \fBnone\fR
Example: \fBaddprinter command = /usr/bin/addprinter
\fR.PP
.TP
-\fBadd share command (G)\fR
-Samba 2.2.0 introduced the ability to dynamically
-add and delete shares via the Windows NT 4.0 Server Manager. The
-\fIadd share command\fR is used to define an
-external program or script which will add a new service definition
-to \fIsmb.conf\fR. In order to successfully
-execute the \fIadd share command\fR, \fBsmbd\fR
-requires that the administrator be connected using a root account (i.e.
-uid == 0).
-
-When executed, \fBsmbd\fR will automatically invoke the
-\fIadd share command\fR with four parameters.
-.RS
-.TP 0.2i
-\(bu
-\fIconfigFile\fR - the location
-of the global \fIsmb.conf\fR file.
-.TP 0.2i
-\(bu
-\fIshareName\fR - the name of the new
-share.
-.TP 0.2i
-\(bu
-\fIpathName\fR - path to an **existing**
-directory on disk.
-.TP 0.2i
-\(bu
-\fIcomment\fR - comment string to associate
-with the new share.
-.RE
-.PP
-This parameter is only used for add file shares. To add printer shares,
-see the \fIadd printer
-command\fR.
-.PP
-.PP
-See also \fIchange share
-command\fR, \fIdelete share
-command\fR.
-.PP
-.PP
-Default: \fBnone\fR
-.PP
-.PP
-Example: \fBadd share command = /usr/local/bin/addshare\fR
-.PP
-.TP
-\fBadd user script (G)\fR
-This is the full pathname to a script that will
-be run \fBAS ROOT\fR by smbd(8)
-under special circumstances described below.
-
-Normally, a Samba server requires that UNIX users are
-created for all users accessing files on this server. For sites
-that use Windows NT account databases as their primary user database
-creating these users and keeping the user list in sync with the
-Windows NT PDC is an onerous task. This option allows smbdto create the required UNIX users
-\fBON DEMAND\fR when a user accesses the Samba server.
-
-In order to use this option, smbd
-must be set to \fIsecurity=server\fR or \fI security=domain\fR and \fIadd user script\fR
-must be set to a full pathname for a script that will create a UNIX
-user given one argument of \fI%u\fR, which expands into
-the UNIX user name to create.
-
-When the Windows user attempts to access the Samba server,
-at login (session setup in the SMB protocol) time, smbdcontacts the \fIpassword server\fR and
-attempts to authenticate the given user with the given password. If the
-authentication succeeds then \fBsmbd\fR
-attempts to find a UNIX user in the UNIX password database to map the
-Windows user into. If this lookup fails, and \fIadd user script
-\fRis set then \fBsmbd\fR will
-call the specified script \fBAS ROOT\fR, expanding
-any \fI%u\fR argument to be the user name to create.
-
-If this script successfully creates the user then \fBsmbd
-\fRwill continue on as though the UNIX user
-already existed. In this way, UNIX users are dynamically created to
-match existing Windows NT accounts.
-
-See also \fI security\fR, \fIpassword server\fR,
-\fIdelete user
-script\fR.
-
-Default: \fBadd user script = <empty string>
-\fR
-Example: \fBadd user script = /usr/local/samba/bin/add_user
-%u\fR
-.TP
\fBadmin users (S)\fR
This is a list of users who will be granted
administrative privileges on the share. This means that they
@@ -1512,7 +1460,7 @@ Synonym for \fIhosts allow\fR.
This option only takes effect when the \fIsecurity\fR option is set to
server or domain.
If it is set to no, then attempts to connect to a resource from
-a domain or workgroup other than the one which smbdis running
+a domain or workgroup other than the one which smbd is running
in will fail, even if that domain is trusted by the remote server
doing the authentication.
@@ -1529,8 +1477,7 @@ Default: \fBallow trusted domains = yes\fR
.TP
\fBannounce as (G)\fR
This specifies what type of server
-\fBnmbd\fR
-will announce itself as, to a network neighborhood browse
+\fBnmbd\fRwill announce itself as, to a network neighborhood browse
list. By default this is set to Windows NT. The valid options
are : "NT Server" (which can also be written as "NT"),
"NT Workstation", "Win95" or "WfW" meaning Windows NT Server,
@@ -1544,7 +1491,7 @@ Default: \fBannounce as = NT Server\fR
Example: \fBannounce as = Win95\fR
.TP
-\fBannounce version (G)\fR
+\fBannouce version (G)\fR
This specifies the major and minor version numbers
that nmbd will use when announcing itself as a server. The default
is 4.2. Do not change this parameter unless you have a specific
@@ -1567,7 +1514,7 @@ Default: \fBavailable = yes\fR
.TP
\fBbind interfaces only (G)\fR
This global parameter allows the Samba admin
-to limit what interfaces on a machine will serve SMB requests. If
+to limit what interfaces on a machine will serve smb requests. If
affects file service smbd(8)and
name service nmbd(8)in slightly
different ways.
@@ -1589,8 +1536,7 @@ send packets that arrive through any interfaces not listed in the
does defeat this simple check, however so it must not be used
seriously as a security feature for \fBnmbd\fR.
-For file service it causes smbd(8)
-to bind only to the interface list given in the interfaces parameter. This restricts the networks that
+For file service it causes smbd(8)to bind only to the interface list given in the interfaces parameter. This restricts the networks that
\fBsmbd\fR will serve to packets coming in those
interfaces. Note that you should not use this parameter for machines
that are serving PPP or other intermittent or non-broadcast network
@@ -1598,8 +1544,7 @@ interfaces as it will not cope with non-permanent interfaces.
If \fIbind interfaces only\fR is set then
unless the network address \fB127.0.0.1\fR is added
-to the \fIinterfaces\fR parameter list \fBsmbpasswd(8)\fR
-and \fBswat(8)\fRmay
+to the \fIinterfaces\fR parameter list \fBsmbpasswd(8)\fRand \fBswat(8)\fRmay
not work as expected due to the reasons covered below.
To change a users SMB password, the \fBsmbpasswd\fR
@@ -1632,7 +1577,7 @@ cannot be immediately satisfied, Samba 2.2 will internally
queue the lock request, and periodically attempt to obtain
the lock until the timeout period expires.
-If this parameter is set to false, then
+If this parameter is set to False, then
Samba 2.2 will behave as previous versions of Samba would and
will fail the lock request immediately if the lock range
cannot be obtained.
@@ -1679,54 +1624,8 @@ Example: \fBchange notify timeout = 300\fR
Would change the scan time to every 5 minutes.
.TP
-\fBchange share command (G)\fR
-Samba 2.2.0 introduced the ability to dynamically
-add and delete shares via the Windows NT 4.0 Server Manager. The
-\fIchange share command\fR is used to define an
-external program or script which will modify an existing service definition
-in \fIsmb.conf\fR. In order to successfully
-execute the \fIchange share command\fR, \fBsmbd\fR
-requires that the administrator be connected using a root account (i.e.
-uid == 0).
-
-When executed, \fBsmbd\fR will automatically invoke the
-\fIchange share command\fR with four parameters.
-.RS
-.TP 0.2i
-\(bu
-\fIconfigFile\fR - the location
-of the global \fIsmb.conf\fR file.
-.TP 0.2i
-\(bu
-\fIshareName\fR - the name of the new
-share.
-.TP 0.2i
-\(bu
-\fIpathName\fR - path to an **existing**
-directory on disk.
-.TP 0.2i
-\(bu
-\fIcomment\fR - comment string to associate
-with the new share.
-.RE
-.PP
-This parameter is only used modify existing file shares definitions. To modify
-printer shares, use the "Printers..." folder as seen when browsing the Samba host.
-.PP
-.PP
-See also \fIadd share
-command\fR, \fIdelete
-share command\fR.
-.PP
-.PP
-Default: \fBnone\fR
-.PP
-.PP
-Example: \fBchange share command = /usr/local/bin/addshare\fR
-.PP
-.TP
\fBcharacter set (G)\fR
-This allows smbdto map incoming filenames
+This allows a smbd to map incoming filenames
from a DOS Code page (see the client
code page parameter) to several built in UNIX character sets.
The built in code page translations are:
@@ -1797,8 +1696,7 @@ the code page. The default for USA MS-DOS, Windows 95, and
Windows NT releases is code page 437. The default for western
European releases of the above operating systems is code page 850.
-This parameter tells smbd(8)
-which of the \fIcodepage.XXX
+This parameter tells smbd(8)which of the \fIcodepage.XXX
\fRfiles to dynamically load on startup. These files,
described more fully in the manual page \fBmake_smbcodepage(1)\fR, tell \fB smbd\fR how to map lower to upper case characters to provide
the case insensitivity of filenames that Windows clients expect.
@@ -2003,10 +1901,6 @@ create mode\fR parameter for forcing particular mode
bits to be set on created files. See also the \fIdirectory mode"\fR parameter for masking
mode bits on created directories. See also the \fIinherit permissions\fR parameter.
-Note that this parameter does not apply to permissions
-set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
-a mask on access control lists also, they need to set the \fIsecurity mask\fR.
-
Default: \fBcreate mask = 0744\fR
Example: \fBcreate mask = 0775\fR
@@ -2079,7 +1973,15 @@ effect.
Default: \fBdebug uid = no\fR
.TP
\fBdebuglevel (G)\fR
-Synonym for \fI log level\fR.
+The value of the parameter (an integer) allows
+the debug level (logging level) to be specified in the
+\fIsmb.conf\fR file. This is to give greater
+flexibility in the configuration of the system.
+
+The default will be the debug level specified on
+the command line or level zero if none was specified.
+
+Example: \fBdebug level = 3\fR
.TP
\fBdefault (G)\fR
A synonym for \fI default service\fR.
@@ -2123,33 +2025,6 @@ Example:
.sp
.fi
.TP
-\fBdelete printer command (G)\fR
-With the introduction of MS-RPC based printer
-support for Windows NT/2000 clients in Samba 2.2, it is now
-possible to delete printer at run time by issuing the
-DeletePrinter() RPC call.
-
-For a Samba host this means that the printer must be
-physically deleted from underlying printing system. The \fI deleteprinter command\fR defines a script to be run which
-will perform the necessary operations for removing the printer
-from the print system and from \fIsmb.conf\fR.
-
-The \fIdelete printer command\fR is
-automatically called with only one parameter: \fI "printer name"\fR.
-
-Once the \fIdelete printer command\fR has
-been executed, \fBsmbd\fR will reparse the \fI smb.conf\fR to associated printer no longer exists.
-If the sharename is still valid, then \fBsmbd
-\fRwill return an ACCESS_DENIED error to the client.
-
-See also \fI add printer command\fR, \fIprinting\fR,
-\fIshow add
-printer wizard\fR
-
-Default: \fBnone\fR
-
-Example: \fBdeleteprinter command = /usr/bin/removeprinter
-\fR.TP
\fBdelete readonly (S)\fR
This parameter allows readonly files to be deleted.
This is not normal DOS semantics, but is allowed by UNIX.
@@ -2160,45 +2035,6 @@ permissions, and DOS semantics prevent deletion of a read only file.
Default: \fBdelete readonly = no\fR
.TP
-\fBdelete share command (G)\fR
-Samba 2.2.0 introduced the ability to dynamically
-add and delete shares via the Windows NT 4.0 Server Manager. The
-\fIdelete share command\fR is used to define an
-external program or script which will remove an existing service
-definition from \fIsmb.conf\fR. In order to successfully
-execute the \fIdelete share command\fR, \fBsmbd\fR
-requires that the administrator be connected using a root account (i.e.
-uid == 0).
-
-When executed, \fBsmbd\fR will automatically invoke the
-\fIdelete share command\fR with two parameters.
-.RS
-.TP 0.2i
-\(bu
-\fIconfigFile\fR - the location
-of the global \fIsmb.conf\fR file.
-.TP 0.2i
-\(bu
-\fIshareName\fR - the name of
-the existing service.
-.RE
-.PP
-This parameter is only used to remove file shares. To delete printer shares,
-see the \fIdelete printer
-command\fR.
-.PP
-.PP
-See also \fIdelete share
-command\fR, \fIchange
-share\fR.
-.PP
-.PP
-Default: \fBnone\fR
-.PP
-.PP
-Example: \fBdelete share command = /usr/local/bin/delshare\fR
-.PP
-.TP
\fBdelete user script (G)\fR
This is the full pathname to a script that will
be run \fBAS ROOT\fR by \fBsmbd(8)\fRunder special circumstances
@@ -2252,15 +2088,42 @@ Default: \fBdelete user script = <empty string>
Example: \fBdelete user script = /usr/local/samba/bin/del_user
%u\fR
.TP
+\fBdeleteprinter command (G)\fR
+With the introduction of MS-RPC based printer
+support for Windows NT/2000 clients in Samba 2.2, it is now
+possible to delete printer at run time by issuing the
+DeletePrinter() RPC call.
+
+For a Samba host this means that the printer must be
+physically deleted from underlying printing system. The \fI deleteprinter command\fR defines a script to be run which
+will perform the necessary operations for removing the printer
+from the print system and from \fIsmb.conf\fR.
+
+The \fIdeleteprinter command\fR is
+automatically called with only one parameter: \fI "printer name"\fR.
+
+Once the \fIdeleteprinter command\fR has
+been executed, \fBsmbd\fR will reparse the \fI smb.conf\fR to associated printer no longer exists.
+If the sharename is still valid, then \fBsmbd
+\fRwill return an ACCESS_DENIED error to the client.
+
+See also \fI addprinter command\fR, \fIprinting\fR,
+\fIshow add
+printer wizard\fR
+
+Default: \fBnone\fR
+
+Example: \fBdeleteprinter command = /usr/bin/removeprinter
+\fR.TP
\fBdelete veto files (S)\fR
This option is used when Samba is attempting to
delete a directory that contains one or more vetoed directories
(see the \fIveto files\fR
-option). If this option is set to false (the default) then if a vetoed
+option). If this option is set to False (the default) then if a vetoed
directory contains any non-vetoed files or directories then the
directory delete will fail. This is usually what you want.
-If this option is set to true, then Samba
+If this option is set to True, then Samba
will attempt to recursively delete any files and directories within
the vetoed directory. This can be useful for integration with file
serving systems such as NetAtalk which create meta-files within
@@ -2360,10 +2223,6 @@ created from this parameter with the value of the \fIforce directory mode
\fRparameter. This parameter is set to 000 by
default (i.e. no extra mode bits are added).
-Note that this parameter does not apply to permissions
-set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
-a mask on access control lists also, they need to set the \fIdirectory security mask\fR.
-
See the \fIforce
directory mode\fR parameter to cause particular mode
bits to always be set on created directories.
@@ -2394,27 +2253,29 @@ this mask from being modified. Essentially, zero bits in this
mask may be treated as a set of bits the user is not allowed
to change.
-If not set explicitly this parameter is set to 0777
-meaning a user is allowed to modify all the user/group/world
-permissions on a directory.
+If not set explicitly this parameter is set to the same
+value as the \fIdirectory
+mask\fR parameter. To allow a user to
+modify all the user/group/world permissions on a directory, set
+this parameter to 0777.
\fBNote\fR that users who can access the
Samba server through other means can easily bypass this restriction,
so it is primarily useful for standalone "appliance" systems.
-Administrators of most normal systems will probably want to leave
-it as the default of 0777.
+Administrators of most normal systems will probably want to set
+it to 0777.
See also the \fI force directory security mode\fR, \fIsecurity mask\fR,
\fIforce security mode
\fRparameters.
-Default: \fBdirectory security mask = 0777\fR
+Default: \fBdirectory security mask = <same as
+directory mask>\fR
-Example: \fBdirectory security mask = 0700\fR
+Example: \fBdirectory security mask = 0777\fR
.TP
\fBdns proxy (G)\fR
-Specifies that nmbd(8)
-when acting as a WINS server and finding that a NetBIOS name has not
+Specifies that nmbd(8)when acting as a WINS server and finding that a NetBIOS name has not
been registered, should treat the NetBIOS name word-for-word as a DNS
name and do a lookup with the DNS server for that name on behalf of
the name-querying client.
@@ -2432,38 +2293,44 @@ See also the parameter \fI wins support\fR.
Default: \fBdns proxy = yes\fR
.TP
\fBdomain admin group (G)\fR
-This parameter is intended as a temporary solution
-to enable users to be a member of the "Domain Admins" group when
-a Samba host is acting as a PDC. A complete solution will be provided
-by a system for mapping Windows NT/2000 groups onto UNIX groups.
-Please note that this parameter has a somewhat confusing name. It
-accepts a list of usernames and of group names in standard
-\fIsmb.conf\fR notation.
-
-See also \fIdomain
-guest group\fR, \fIdomain
-logons\fR
-
-Default: \fBno domain administrators\fR
-
-Example: \fBdomain admin group = root @wheel\fR
+This is an \fBEXPERIMENTAL\fR parameter
+that is part of the unfinished Samba NT Domain Controller Code. It may
+be removed in a later release. To work with the latest code builds
+that may have more support for Samba NT Domain Controller functionality
+please subscribe to the mailing list samba-ntdom <URL:mailto:samba-ntdom@samba.org> available by
+visiting the web page at http://lists.samba.org/ <URL:http://lists.samba.org/>.
+.TP
+\fBdomain admin users (G)\fR
+This is an \fBEXPERIMENTAL\fR parameter
+that is part of the unfinished Samba NT Domain Controller Code. It may
+be removed in a later release. To work with the latest code builds
+that may have more support for Samba NT Domain Controller functionality
+please subscribe to the mailing list samba-ntdom <URL:mailto:samba-ntdom@samba.org> available by
+visiting the web page at http://lists.samba.org/ <URL:http://lists.samba.org/>.
+.TP
+\fBdomain groups (G)\fR
+This is an \fBEXPERIMENTAL\fR parameter
+that is part of the unfinished Samba NT Domain Controller Code. It may
+be removed in a later release. To work with the latest code builds
+that may have more support for Samba NT Domain Controller functionality
+please subscribe to the mailing list samba-ntdom <URL:mailto:samba-ntdom@samba.org> available by
+visiting the web page at http://lists.samba.org/ <URL:http://lists.samba.org/>.
.TP
\fBdomain guest group (G)\fR
-This parameter is intended as a temporary solution
-to enable users to be a member of the "Domain Guests" group when
-a Samba host is acting as a PDC. A complete solution will be provided
-by a system for mapping Windows NT/2000 groups onto UNIX groups.
-Please note that this parameter has a somewhat confusing name. It
-accepts a list of usernames and of group names in standard
-\fIsmb.conf\fR notation.
-
-See also \fIdomain
-admin group\fR, \fIdomain
-logons\fR
-
-Default: \fBno domain guests\fR
-
-Example: \fBdomain guest group = nobody @guest\fR
+This is an \fBEXPERIMENTAL\fR parameter
+that is part of the unfinished Samba NT Domain Controller Code. It may
+be removed in a later release. To work with the latest code builds
+that may have more support for Samba NT Domain Controller functionality
+please subscribe to the mailing list samba-ntdom <URL:mailto:samba-ntdom@samba.org> available by
+visiting the web page at http://lists.samba.org/ <URL:http://lists.samba.org/>.
+.TP
+\fBdomain guest users (G)\fR
+This is an \fBEXPERIMENTAL\fR parameter
+that is part of the unfinished Samba NT Domain Controller Code. It may
+be removed in a later release. To work with the latest code builds
+that may have more support for Samba NT Domain Controller functionality
+please subscribe to the mailing list samba-ntdom <URL:mailto:samba-ntdom@samba.org> available by
+visiting the web page at http://lists.samba.org/ <URL:http://lists.samba.org/>.
.TP
\fBdomain logons (G)\fR
If set to true, the Samba server will serve
@@ -2482,8 +2349,7 @@ claim a special domain specific NetBIOS name that identifies
it as a domain master browser for its given \fIworkgroup\fR. Local master browsers
in the same \fIworkgroup\fR on broadcast-isolated
subnets will give this \fBnmbd\fR their local browse lists,
-and then ask \fBsmbd(8)\fR
-for a complete copy of the browse list for the whole wide area
+and then ask \fBsmbd(8)\fRfor a complete copy of the browse list for the whole wide area
network. Browser clients will then contact their local master browser,
and will receive the domain-wide browse list, instead of just the list
for their broadcast-isolated subnet.
@@ -2524,7 +2390,7 @@ Example: \fBdont descend = /proc,/dev\fR
.TP
\fBdos filemode (S)\fR
The default behavior in Samba is to provide
-UNIX-like behavior where only the owner of a file/directory is
+UNIX-like behavor where only the owner of a file/directory is
able to change the permissions on it. However, this behavior
is often confusing to DOS/Windows users. Enabling this parameter
allows a user who has write access to the file (by whatever
@@ -2563,7 +2429,7 @@ file they can change the timestamp on it. Under POSIX semantics,
only the owner of the file or root may change the timestamp. By
default, Samba runs with POSIX semantics and refuses to change the
timestamp on a file if the user \fBsmbd\fR is acting
-on behalf of is not the file owner. Setting this option to true allows DOS semantics and smbdwill change the file
+on behalf of is not the file owner. Setting this option to True allows DOS semantics and smbd will change the file
timestamp as DOS requires.
Default: \fBdos filetimes = no\fR
@@ -2580,7 +2446,7 @@ In order for encrypted passwords to work correctly
\fBsmbd(8)\fRmust either
have access to a local \fIsmbpasswd(5)
\fRprogram for information on how to set up
-and maintain this file), or set the security=[server|domain] parameter which
+and maintain this file), or set the security=[serve|domain] parameter which
causes \fBsmbd\fR to authenticate against another
server.
@@ -2588,16 +2454,16 @@ Default: \fBencrypt passwords = no\fR
.TP
\fBenhanced browsing (G)\fR
This option enables a couple of enhancements to
-cross-subnet browse propagation that have been added in Samba
+cross-subnet browse propogation that have been added in Samba
but which are not standard in Microsoft implementations.
\fBThese enhancements are currently only available in
the HEAD Samba CVS tree (not Samba 2.2.x).\fR
-The first enhancement to browse propagation consists of a regular
+The first enhancement to browse propogation consists of a regular
wildcard query to a Samba WINS server for all Domain Master Browsers,
-followed by a browse synchronization with each of the returned
+followed by a browse synchronisation with each of the returned
DMBs. The second enhancement consists of a regular randomised browse
-synchronization with all currently known DMBs.
+synchronisation with all currently known DMBs.
You may wish to disable this option if you have a problem with empty
workgroups not disappearing from browse lists. Due to the restrictions
@@ -2605,7 +2471,7 @@ of the browse protocols these enhancements can cause a empty workgroup
to stay around forever which can be annoying.
In general you should leave this option enabled as it makes
-cross-subnet browse propagation much more reliable.
+cross-subnet browse propogation much more reliable.
Default: \fBenhanced browsing = yes\fR
.TP
@@ -2653,7 +2519,7 @@ However, Unix time semantics mean that the create time
reported by Samba will be updated whenever a file is created or
or deleted in the directory. NMAKE finds all object files in
the object directory. The timestamp of the last one built is then
-compared to the timestamp of the object directory. If the
+compared to the timestamp of the object dircetory. If the
directory's timestamp if newer, then all object files
will be rebuilt. Enabling this option
ensures directories always predate their contents and an NMAKE build
@@ -2688,8 +2554,7 @@ Default: \fBfake oplocks = no\fR
.TP
\fBfollow symlinks (S)\fR
This parameter allows the Samba administrator
-to stop \fBsmbd(8)\fR
-from following symbolic links in a particular share. Setting this
+to stop \fBsmbd(8)\fRfrom following symbolic links in a particular share. Setting this
parameter to no prevents any file or directory
that is a symbolic link from being followed (the user will get an
error). This option is very useful to stop users from adding a
@@ -2712,11 +2577,6 @@ permissions changed. The default for this parameter is (in octal)
mode after the mask set in the \fIcreate mask\fR
parameter is applied.
-Note that by default this parameter does not apply to permissions
-set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
-this mask on access control lists also, they need to set the \fIrestrict acl with
-mask\fR to true.
-
See also the parameter \fIcreate
mask\fR for details on masking mode bits on files.
@@ -2741,11 +2601,6 @@ bits to a created directory. This operation is done after the mode
mask in the parameter \fIdirectory mask\fR is
applied.
-Note that by default this parameter does not apply to permissions
-set by Windows NT/2000 ACL editors. If the administrator wishes to enforce
-this mask on access control lists also, they need to set the \fIrestrict acl with
-mask\fR to true.
-
See also the parameter \fI directory mask\fR for details on masking mode bits
on created directories.
@@ -2770,23 +2625,26 @@ the user may have modified to be on. Essentially, one bits in this
mask may be treated as a set of bits that, when modifying security
on a directory, the user has always set to be 'on'.
-If not set explicitly this parameter is 000, which
-allows a user to modify all the user/group/world permissions on a
-directory without restrictions.
+If not set explicitly this parameter is set to the same
+value as the \fIforce
+directory mode\fR parameter. To allow
+a user to modify all the user/group/world permissions on a
+directory without restrictions, set this parameter to 000.
\fBNote\fR that users who can access the
Samba server through other means can easily bypass this restriction,
so it is primarily useful for standalone "appliance" systems.
-Administrators of most normal systems will probably want to leave
-it set as 0000.
+Administrators of most normal systems will probably want to set
+it to 0000.
See also the \fI directory security mask\fR, \fIsecurity mask\fR,
\fIforce security mode
\fRparameters.
-Default: \fBforce directory security mode = 0\fR
+Default: \fBforce directory security mode = <same as
+force directory mode>\fR
-Example: \fBforce directory security mode = 700\fR
+Example: \fBforce directory security mode = 0\fR
.TP
\fBforce group (S)\fR
This specifies a UNIX group name that will be
@@ -2834,23 +2692,26 @@ the user may have modified to be on. Essentially, one bits in this
mask may be treated as a set of bits that, when modifying security
on a file, the user has always set to be 'on'.
-If not set explicitly this parameter is set to 0,
-and allows a user to modify all the user/group/world permissions on a file,
-with no restrictions.
+If not set explicitly this parameter is set to the same
+value as the \fIforce
+create mode\fR parameter. To allow a user to
+modify all the user/group/world permissions on a file, with no
+restrictions set this parameter to 000.
\fBNote\fR that users who can access
the Samba server through other means can easily bypass this restriction,
so it is primarily useful for standalone "appliance" systems.
-Administrators of most normal systems will probably want to leave
-this set to 0000.
+Administrators of most normal systems will probably want to set
+it to 0000.
See also the \fI force directory security mode\fR,
\fIdirectory security
mask\fR, \fI security mask\fR parameters.
-Default: \fBforce security mode = 0\fR
+Default: \fBforce security mode = <same as force
+create mode>\fR
-Example: \fBforce security mode = 700\fR
+Example: \fBforce security mode = 0\fR
.TP
\fBforce user (S)\fR
This specifies a UNIX user name that will be
@@ -2894,7 +2755,7 @@ 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 \fIwide links\fR
-parameter is set to false.
+parameter is set to False.
Default: \fBgetwd cache = yes\fR
.TP
@@ -2987,7 +2848,7 @@ Default: \fBhide local users = no\fR
.TP
\fBhomedir map (G)\fR
If\fInis homedir
-\fRis true, and \fBsmbd(8)\fRis also acting
+\fRis True, and \fBsmbd(8)\fRis also acting
as a Win95/98 \fIlogon server\fR then this parameter
specifies the NIS (or YP) map from which the server for the user's
home directory should be extracted. At present, only the Sun
@@ -3097,7 +2958,7 @@ and users who will be allowed access without specifying a password.
This is not be confused with \fIhosts allow\fR which is about hosts
access to services and is more useful for guest services. \fI hosts equiv\fR may be useful for NT clients which will
-not supply passwords to Samba.
+not supply passwords to samba.
\fBNOTE :\fR The use of \fIhosts equiv
\fRcan be a major security hole. This is because you are
@@ -3145,7 +3006,7 @@ Note that the setuid bit is \fBnever\fR set via
inheritance (the code explicitly prohibits this).
This can be particularly useful on large systems with
-many users, perhaps several thousand, to allow a single [homes]
+many users, perhaps several thousand,to allow a single [homes]
share to be used flexibly by each user.
See also \fIcreate mask
@@ -3280,8 +3141,8 @@ and \fIlevel2 oplocks
Default: \fBkernel oplocks = yes\fR
.TP
\fBlanman auth (G)\fR
-This parameter determines whether or not smbdwill
-attempt to authenticate users using the LANMAN password hash.
+This parameter determines whether or not smbd will
+attempt to authentication users using the LANMAN password hash.
If disabled, only clients which support NT password hashes (e.g. Windows
NT/2000 clients, smbclient, etc... but not Windows 95/98 or the MS DOS
network client) will be able to connect to the Samba host.
@@ -3316,7 +3177,7 @@ Currently, if \fIkernel
oplocks\fR are supported then level2 oplocks are
not granted (even if this parameter is set to yes).
Note also, the \fIoplocks\fR
-parameter must be set to true on this share in order for
+parameter must be set to "true" on this share in order for
this parameter to have any effect.
See also the \fIoplocks\fR
@@ -3372,13 +3233,13 @@ Default: \fBload printers = yes\fR
.TP
\fBlocal master (G)\fR
This option allows \fB nmbd(8)\fRto try and become a local master browser
-on a subnet. If set to false then \fB nmbd\fR will not attempt to become a local master browser
+on a subnet. If set to False then \fB nmbd\fR will not attempt to become a local master browser
on a subnet and will also lose in all browsing elections. By
default this value is set to true. Setting this value to true doesn't
mean that Samba will \fBbecome\fR the local master
browser on a subnet, just that \fBnmbd\fR will \fB participate\fR in elections for local master browser.
-Setting this value to false will cause \fBnmbd\fR
+Setting this value to False will cause \fBnmbd\fR
\fBnever\fR to become a local master browser.
Default: \fBlocal master = yes\fR
@@ -3410,7 +3271,7 @@ by the server.
This option \fBmay\fR be useful for read-only
filesystems which \fBmay\fR not need locking (such as
-CDROM drives), although setting this parameter of no
+cdrom drives), although setting this parameter of no
is not really recommended even in this case.
Be careful about disabling locking either globally or in a
@@ -3429,15 +3290,7 @@ you to have separate log files for each user or machine.
Example: \fBlog file = /usr/local/samba/var/log.%m
\fR.TP
\fBlog level (G)\fR
-The value of the parameter (an integer) allows
-the debug level (logging level) to be specified in the
-\fIsmb.conf\fR file. This is to give greater
-flexibility in the configuration of the system.
-
-The default will be the log level specified on
-the command line or level zero if none was specified.
-
-Example: \fBlog level = 3\fR
+Synonym for \fI debug level\fR.
.TP
\fBlogon drive (G)\fR
This parameter specifies the local path to
@@ -3505,7 +3358,7 @@ your Windows NT client.
The share and the path must be readable by the user for
the preferences and directories to be loaded onto the Windows NT
-client. The share must be writeable when the user logs in for the first
+client. The share must be writeable when the logs in for the first
time, in order that the Windows NT client can create the NTuser.dat
and other directories.
@@ -3535,7 +3388,7 @@ Example: \fBlogon path = \\\\PROFILESERVER\\PROFILE\\%U\fR
This parameter specifies the batch file (.bat) or
NT command file (.cmd) to be downloaded and run on a machine when
a user successfully logs in. The file must contain the DOS
-style CR/LF line endings. Using a DOS-style editor to create the
+style cr/lf line endings. Using a DOS-style editor to create the
file is recommended.
The script must be a relative path to the [netlogon]
@@ -3545,7 +3398,7 @@ the file that will be downloaded is:
\fI/usr/local/samba/netlogon/STARTUP.BAT\fR
-The contents of the batch file are entirely your choice. A
+The contents of the batch file is entirely your choice. A
suggested command would be to add \fBNET TIME \\\\SERVER /SET
/YES\fR, to force every machine to synchronize clocks with
the same time server. Another use would be to add \fBNET USE
@@ -3577,7 +3430,7 @@ a printer name and job number to pause the print job. One way
of implementing this is by using job priorities, where jobs
having a too low priority won't be sent to the printer.
-If a \fI%p\fR is given then the printer name
+If a \fI%p\fR is given then the printername
is put in its place. A \fI%j\fR is replaced with
the job number (an integer). On HPUX (see \fIprinting=hpux
\fR), if the \fI-p%p\fR option is added
@@ -3650,7 +3503,7 @@ requesting status information about. To get around this, the
server reports on the first printer service connected to by the
client. This only happens if the connection number sent is invalid.
-If a \fI%p\fR is given then the printer name
+If a \fI%p\fR is given then the printername
is put in its place. Otherwise it is placed at the end of the
command.
@@ -3675,7 +3528,7 @@ a printer name and job number to resume the print job. See
also the \fIlppause command
\fRparameter.
-If a \fI%p\fR is given then the printer name
+If a \fI%p\fR is given then the printername
is put in its place. A \fI%j\fR is replaced with
the job number (an integer).
@@ -3707,7 +3560,7 @@ executed on the server host in order to delete a print job.
This command should be a program or script which takes
a printer name and job number, and deletes the print job.
-If a \fI%p\fR is given then the printer name
+If a \fI%p\fR is given then the printername
is put in its place. A \fI%j\fR is replaced with
the job number (an integer).
@@ -3725,7 +3578,7 @@ Example 1: \fBlprm command = /usr/bin/lprm -P%p %j
Example 2: \fBlprm command = /usr/bin/cancel %p-%j
\fR.TP
\fBmachine password timeout (G)\fR
-If a Samba server is a member of a Windows
+If a Samba server is a member of an Windows
NT Domain (see the security=domain)
parameter) then periodically a running smbd(8)process will try and change the MACHINE ACCOUNT
PASSWORD stored in the TDB called \fIprivate/secrets.tdb
@@ -3759,8 +3612,8 @@ This allows a UNIX script to be sent to the Samba host and
executed on behalf of the connected user.
Scripts executed in this way will be deleted upon
-completion assuming that the user has the appropriate level
-of privilege and the file permissions allow the deletion.
+completion assuming that the user has the appripriate level
+of priviledge and the ile permissions allow the deletion.
If the script generates output, output will be sent to
the file specified by the \fI magic output\fR parameter (see above).
@@ -3785,7 +3638,7 @@ Default: \fBmangle case = no\fR
.TP
\fBmangled map (S)\fR
This is for those who want to directly map UNIX
-file names which cannot be represented on Windows/DOS. The mangling
+file names which can not be represented on Windows/DOS. The mangling
of names is not always what is needed. In particular you may have
documents with file extensions that differ between DOS and UNIX.
For example, under UNIX it is common to use \fI.html\fR
@@ -3798,7 +3651,7 @@ you would use:
\fBmangled map = (*.html *.htm)\fR
One very useful case is to remove the annoying \fI;1
-\fRoff the ends of filenames on some CDROMs (only visible
+\fRoff the ends of filenames on some CDROMS (only visible
under some UNIXes). To do this use a map of (*;1 *;).
Default: \fBno mangled map\fR
@@ -3878,11 +3731,11 @@ or contains upper case characters).
The larger this value, the more likely it is that mangled
names can be successfully converted to correct long UNIX names.
-However, large stack sizes will slow most directory accesses. Smaller
+However, large stack sizes will slow most directory access. Smaller
stacks save memory in the server (each stack element costs 256 bytes).
It is not possible to absolutely guarantee correct long
-filenames, so be prepared for some surprises!
+file names, so be prepared for some surprises!
Default: \fBmangled stack = 50\fR
@@ -4039,7 +3892,7 @@ Example: \fBmax log size = 1000\fR
.TP
\fBmax mux (G)\fR
This option controls the maximum number of
-outstanding simultaneous SMB operations that Samba tells the client
+outstanding simultaneous SMB operations that samba tells the client
it will allow. You should never need to set this parameter.
Default: \fBmax mux = 50\fR
@@ -4112,12 +3965,11 @@ Example: \fBmax protocol = LANMAN1\fR
.TP
\fBmax smbd processes (G)\fR
This parameter limits the maximum number of
-\fBsmbd(8)\fR
-processes concurrently running on a system and is intended
-as a stopgap to prevent degrading service to clients in the event
+\fBsmbd(8)\fRprocesses concurrently running on a system and is intended
+as a stop gap to prevent degrading service to clients in the event
that the server has insufficient resources to handle more than this
number of connections. Remember that under normal operating
-conditions, each user will have an smbdassociated with him or her
+conditions, each user will have an smbd associated with him or her
to handle connections to all shares from a given host.
Default: \fBmax smbd processes = 0\fR ## no limit
@@ -4125,8 +3977,7 @@ Default: \fBmax smbd processes = 0\fR ## no limit
Example: \fBmax smbd processes = 1000\fR
.TP
\fBmax ttl (G)\fR
-This option tells nmbd(8)
-what the default 'time to live' of NetBIOS names should be (in seconds)
+This option tells nmbd(8)what the default 'time to live' of NetBIOS names should be (in seconds)
when \fBnmbd\fR is 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.
@@ -4172,7 +4023,7 @@ removes it afterwards. \fBNOTE THAT IT IS VERY IMPORTANT
THAT THIS COMMAND RETURN IMMEDIATELY\fR. That's why I
have the '&' on the end. If it doesn't return immediately then
your PCs may freeze when sending messages (they should recover
-after 30 seconds, hopefully).
+after 30secs, hopefully).
All messages are delivered as the global guest user.
The command takes the standard substitutions, although \fI %u\fR won't work (\fI%U\fR may be better
@@ -4273,8 +4124,7 @@ Example : \fBmin protocol = NT1\fR # disable DOS
clients
.TP
\fBmin wins ttl (G)\fR
-This option tells nmbd(8)
-when acting as a WINS server (\fI wins support = yes\fR) what the minimum 'time to live'
+This option tells nmbd(8)when acting as a WINS server (\fI wins support = yes\fR) what the minimum 'time to live'
of NetBIOS names that \fBnmbd\fR will grant will be (in
seconds). You should never need to change this parameter. The default
is 6 hours (21600 seconds).
@@ -4448,18 +4298,6 @@ See also smbpasswd (5).
Default: \fBnull passwords = no\fR
.TP
-\fBobey pam restrictions (G)\fR
-When Samba 2.2 is configure 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
-and to ignore any account or session management. Note that Samba
-always ignores PAM for authentication in the case of \fIencrypt passwords = yes\fR
-\&. The reason is that PAM modules cannot support the challenge/response
-authentication mechanism needed in the presence of SMB password encryption.
-
-Default: \fBobey pam restrictions = no\fR
-.TP
\fBonly user (S)\fR
This is a boolean option that controls whether
connections with usernames not in the \fIuser\fR
@@ -4482,6 +4320,18 @@ parameter.
Default: \fBonly user = no\fR
.TP
+\fBole locking compatibility (G)\fR
+This parameter allows an administrator to turn
+off the byte range lock manipulation that is done within Samba to
+give compatibility for OLE applications. Windows OLE applications
+use byte range locking as a form of inter-process communication, by
+locking ranges of bytes around the 2^32 region of a file range. This
+can cause certain UNIX lock managers to crash or otherwise cause
+problems. Setting this parameter to no means you
+trust your UNIX lock manager to handle such cases correctly.
+
+Default: \fBole locking compatibility = yes\fR
+.TP
\fBonly guest (S)\fR
A synonym for \fI guest only\fR.
.TP
@@ -4505,7 +4355,7 @@ smbd(8)tuning option to
improve the efficiency of the granting of oplocks under multiple
client contention for the same file.
-In brief it specifies a number, which causes smbdnot to
+In brief it specifies a number, which causes smbd not to
grant an oplock even when requested if the approximate number of
clients contending for an oplock on the same file goes over this
limit. This causes \fBsmbd\fR to behave in a similar
@@ -4517,7 +4367,7 @@ AND UNDERSTOOD THE SAMBA OPLOCK CODE\fR.
Default: \fBoplock contention limit = 2\fR
.TP
\fBoplocks (S)\fR
-This boolean option tells \fBsmbd\fR whether to
+This boolean option tells smbd whether to
issue oplocks (opportunistic locks) to file open requests on this
share. The oplock code can dramatically (approx. 30% or more) improve
the speed of access to files on Samba servers. It allows the clients
@@ -4542,8 +4392,7 @@ Default: \fBoplocks = yes\fR
\fBos level (G)\fR
This integer value controls what level Samba
advertises itself as for browse elections. The value of this
-parameter determines whether nmbd(8)
-has a chance of becoming a local master browser for the \fI WORKGROUP\fR in the local broadcast area.
+parameter determines whether nmbd(8)has a chance of becoming a local master browser for the \fI WORKGROUP\fR in the local broadcast area.
\fBNote :\fRBy default, Samba will win
a local master browsing election over all Microsoft operating
@@ -4566,7 +4415,7 @@ names to OS/2 printer driver names. The format is:
name>.<device name>
For example, a valid entry using the HP LaserJet 5
-printer driver would appear as \fBHP LaserJet 5L = LASERJET.HP
+printer driver woudl appear as \fBHP LaserJet 5L = LASERJET.HP
LaserJet 5L\fR.
The need for the file is due to the printer driver namespace
@@ -4577,19 +4426,9 @@ containing in the Samba documentation.
Default: \fBos2 driver map = <empty string>
\fR.TP
-\fBpam password change (G)\fR
-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, and the \fIpasswd chat\fR must be
-be changed to work with the PAM prompts.
-
-Default: \fBpam password change = no\fR
-.TP
\fBpanic action (G)\fR
This is a Samba developer option that allows a
-system command to be called when either smbd(8)
-crashes. This is usually used to draw attention to the fact that
+system command to be called when either smbd(8)crashes. This is usually used to draw attention to the fact that
a problem occurred.
Default: \fBpanic action = <empty string>\fR
@@ -4599,7 +4438,7 @@ Example: \fBpanic action = "/bin/sleep 90000"\fR
\fBpasswd chat (G)\fR
This string controls the \fB"chat"\fR
conversation that takes places between smbdand the local password changing
-program to change the user's password. The string describes a
+program to change the users password. The string describes a
sequence of response-receive pairs that smbd(8)uses to determine what to send to the
\fIpasswd program\fR
and what to expect back. If the expected output is not
@@ -4622,8 +4461,8 @@ Double quotes can be used to collect strings with spaces
in them into a single string.
If the send string in any part of the chat sequence
-is a full stop ".", then no string is sent. Similarly,
-if the expect string is a full stop then no string is expected.
+is a fullstop ".", then no string is sent. Similarly,
+if the expect string is a fullstop then no string is expected.
Note that if the \fIunix
password sync\fR parameter is set to true, then this
@@ -4632,17 +4471,8 @@ in the smbpasswd file is being changed, without access to the old
password cleartext. In this case the old password cleartext is set
to "" (the empty string).
-Also, if the \fIpam
-password change\fR parameter is set to true, then the
-chat sequence should consist of three elements. The first element should
-match the PAM prompt for the old password, the second element should match
-the PAM prompt for the first request for the new password, and the final
-element should match the PAM prompt for the second request for the new password.
-These matches are done case insensitively. Under most conditions this change
-is done as root so the prompt for the old password will never be matched.
-
See also \fIunix password
-sync\fR, \fI passwd program\fR , \fIpasswd chat debug\fR and \fIpam password change\fR.
+sync\fR, \fI passwd program\fR and \fIpasswd chat debug\fR.
Default: \fBpasswd chat = *new*password* %n\\n
*new*password* %n\\n *changed*\fR
@@ -4683,7 +4513,7 @@ of mixed case chars and digits. This can pose a problem as some clients
it.
\fBNote\fR that if the \fIunix
-password sync\fR parameter is set to true
+password sync\fR parameter is set to True
then this program is called \fBAS ROOT\fR
before the SMB password in the smbpasswd(5)
file is changed. If this UNIX password change fails, then
@@ -4694,7 +4524,7 @@ If the \fIunix password sync\fR parameter
is set this parameter \fBMUST USE ABSOLUTE PATHS\fR
for \fBALL\fR programs called, and must be examined
for security implications. Note that by default \fIunix
-password sync\fR is set to false.
+password sync\fR is set to False.
See also \fIunix
password sync\fR.
@@ -4813,7 +4643,7 @@ restriction of the SMB/CIFS protocol when in \fBsecurity=server
If you are using a Windows NT server as your
password server then you will have to ensure that your users
are able to login from the Samba server, as when in \fB security=server\fR mode the network logon will appear to
-come from there rather than from the user's workstation.
+come from there rather than from the users workstation.
.RE
.PP
See also the \fIsecurity
@@ -4855,8 +4685,7 @@ Default: \fBnone\fR
Example: \fBpath = /home/fred\fR
.TP
\fBposix locking (S)\fR
-The \fBsmbd(8)\fR
-daemon maintains an database of file locks obtained by SMB clients.
+The \fBsmbd(8)\fRdaemon maintains an database of file locks obtained by SMB clients.
The default behavior is to map this internal database to POSIX
locks. This means that file locks obtained by SMB clients are
consistent with those seen by POSIX compliant applications accessing
@@ -4871,7 +4700,7 @@ whenever the service is disconnected. It takes the usual
substitutions. The command may be run as the root on some
systems.
-An interesting example may be to unmount server
+An interesting example may be do unmount server
resources:
\fBpostexec = /etc/umount /cdrom\fR
@@ -4886,7 +4715,7 @@ from %m (%I)\\" >> /tmp/log\fR
.TP
\fBpostscript (S)\fR
This parameter forces a printer to interpret
-the print files as PostScript. This is done by adding a %!
+the print files as postscript. This is done by adding a %!
to the start of print output.
This is most useful when you have lots of PCs that persist
@@ -5106,11 +4935,11 @@ Default: \fBprinter admin = <empty string>\fR
Example: \fBprinter admin = admin, @staff\fR
.TP
\fBprinter driver (S)\fR
-\fBNote :\fRThis is a deprecated
+\fBNote :\fRThis is a depreciated
parameter and will be removed in the next major release
following version 2.2. Please see the instructions in
-the Samba 2.2. Printing
-HOWTOfor more information
+\fIPRINTER_DRIVER2.txt\fR in the \fIdocs
+\fRof the Samba distribution for more information
on the new method of loading printer drivers onto a Samba server.
This option allows you to control the string
@@ -5132,11 +4961,11 @@ driver file\fR.
Example: \fBprinter driver = HP LaserJet 4L\fR
.TP
\fBprinter driver file (G)\fR
-\fBNote :\fRThis is a deprecated
+\fBNote :\fRThis is a depreciated
parameter and will be removed in the next major release
following version 2.2. Please see the instructions in
-the Samba 2.2. Printing
-HOWTOfor more information
+\fIPRINTER_DRIVER2.txt\fR in the \fIdocs
+\fRof the Samba distribution for more information
on the new method of loading printer drivers onto a Samba server.
This parameter tells Samba where the printer driver
@@ -5149,7 +4978,7 @@ to be found. If this is not set, the default is :
This file is created from Windows 95 \fImsprint.inf
\fRfiles found on the Windows 95 client system. For more
details on setting up serving of printer drivers to Windows 95
-clients, see the outdated documentation file in the \fIdocs/\fR
+clients, see the documentation file in the \fIdocs/\fR
directory, \fIPRINTER_DRIVER.txt\fR.
See also \fI printer driver location\fR.
@@ -5160,11 +4989,11 @@ Example: \fBprinter driver file =
/usr/local/samba/printers/drivers.def\fR
.TP
\fBprinter driver location (S)\fR
-\fBNote :\fRThis is a deprecated
+\fBNote :\fRThis is a depreciated
parameter and will be removed in the next major release
following version 2.2. Please see the instructions in
-the Samba 2.2. Printing
-HOWTOfor more information
+\fIPRINTER_DRIVER2.txt\fR in the \fIdocs
+\fRof the Samba distribution for more information
on the new method of loading printer drivers onto a Samba server.
This parameter tells clients of a particular printer
@@ -5176,7 +5005,7 @@ to serve printer drivers to Windows 95 machines, this should be set to
Where MACHINE is the NetBIOS name of your Samba server,
and PRINTER$ is a share you set up for serving printer driver
-files. For more details on setting this up see the outdated documentation
+files. For more details on setting this up see the documentation
file in the \fIdocs/\fR directory, \fI PRINTER_DRIVER.txt\fR.
See also \fI printer driver file\fR.
@@ -5208,7 +5037,7 @@ default values for the \fIprint command\fR,
\fIlpq command\fR, \fIlppause command
\fR, \fIlpresume command\fR, and
\fIlprm command\fR if specified in the
-[global] section.
+[global]f> section.
Currently eight printing styles are supported. They are
BSD, AIX,
@@ -5233,17 +5062,17 @@ ok\fR.
.TP
\fBqueuepause command (S)\fR
This parameter specifies the command to be
-executed on the server host in order to pause the printer queue.
+executed on the server host in order to pause the printerqueue.
This command should be a program or script which takes
-a printer name as its only parameter and stops the printer queue,
+a printer name as its only parameter and stops the printerqueue,
such that no longer jobs are submitted to the printer.
This command is not supported by Windows for Workgroups,
-but can be issued from the Printers window under Windows 95
+but can be issued from the Printer's window under Windows 95
and NT.
-If a \fI%p\fR is given then the printer name
+If a \fI%p\fR is given then the printername
is put in its place. Otherwise it is placed at the end of the command.
Note that it is good practice to include the absolute
@@ -5256,19 +5085,19 @@ Example: \fBqueuepause command = disable %p\fR
.TP
\fBqueueresume command (S)\fR
This parameter specifies the command to be
-executed on the server host in order to resume the printer queue. It
+executed on the server host in order to resume the printerqueue. It
is the command to undo the behavior that is caused by the
previous parameter (\fI queuepause command\fR).
This command should be a program or script which takes
-a printer name as its only parameter and resumes the printer queue,
+a printer name as its only parameter and resumes the printerqueue,
such that queued jobs are resubmitted to the printer.
This command is not supported by Windows for Workgroups,
-but can be issued from the Printers window under Windows 95
+but can be issued from the Printer's window under Windows 95
and NT.
-If a \fI%p\fR is given then the printer name
+If a \fI%p\fR is given then the printername
is put in its place. Otherwise it is placed at the end of the
command.
@@ -5360,7 +5189,7 @@ For example:
\fBremote announce = 192.168.2.255/SERVERS
192.168.4.255/STAFF\fR
-the above line would cause \fBnmbd\fR to announce itself
+the above line would cause nmbd to announce itself
to the two given IP addresses using the given workgroup names.
If you leave out the workgroup name then the one given in
the \fIworkgroup\fR
@@ -5377,10 +5206,10 @@ Default: \fBremote announce = <empty string>
\fR.TP
\fBremote browse sync (G)\fR
This option allows you to setup nmbd(8)to periodically request
-synchronization of browse lists with the master browser of a Samba
+synchronization of browse lists with the master browser of a samba
server that is on a remote segment. This option will allow you to
gain browse lists for multiple workgroups across routed networks. This
-is done in a manner that does not work with any non-Samba servers.
+is done in a manner that does not work with any non-samba servers.
This is useful if you want your Samba server and all local
clients to appear in a remote workgroup for which the normal browse
@@ -5400,31 +5229,10 @@ addresses of the remote networks, but can also be the IP addresses
of known browse masters if your network config is that stable. If
a machine IP address is given Samba makes NO attempt to validate
that the remote machine is available, is listening, nor that it
-is in fact the browse master on its segment.
+is in fact the browse master on it's segment.
Default: \fBremote browse sync = <empty string>
\fR.TP
-\fBrestrict acl with mask (S)\fR
-This is a boolean parameter. If set to false (default), then
-creation of files with access control lists (ACLS) and modification of ACLs
-using the Windows NT/2000 ACL editor will be applied directly to the file
-or directory.
-
-If set to true, then all requests to set an ACL on a file will have the
-parameters \fIcreate mask\fR,
-\fIforce create mode\fR
-applied before setting the ACL, and all requests to set an ACL on a directory will
-have the parameters \fIdirectory
-mask\fR, \fIforce
-directory mode\fR applied before setting the ACL.
-
-See also \fIcreate mask\fR,
-\fIforce create mode\fR,
-\fIdirectory mask\fR,
-\fIforce directory mode\fR
-
-Default: \fBrestrict acl with mask = no\fR
-.TP
\fBrestrict anonymous (G)\fR
This is a boolean parameter. If it is true, then
anonymous access to the server will be restricted, namely in the
@@ -5441,8 +5249,8 @@ and this is a way to work around that.
When restrict anonymous is true, all anonymous connections
are denied no matter what they are for. This can effect the ability
-of a machine to access the Samba Primary Domain Controller to revalidate
-its machine account after someone else has logged on the client
+of a machine to access the samba Primary Domain Controller to revalidate
+it's machine account after someone else has logged on the client
interactively. The NT client will display a message saying that
the machine's account in the domain doesn't exist or the password is
bad. The best way to deal with this is to reboot NT client machines
@@ -5459,7 +5267,7 @@ Synonym for \fIroot directory"\fR.
.TP
\fBroot directory (G)\fR
The server will \fBchroot()\fR (i.e.
-Change its root directory) to this directory on startup. This is
+Change it's root directory) to this directory on startup. This is
not strictly necessary for secure operation. Even without it the
server will deny access to files not in one of the service entries.
It may also check for, and deny access to, soft links to other
@@ -5488,7 +5296,7 @@ Example: \fBroot directory = /homes/smb\fR
This is the same as the \fIpostexec\fR
parameter except that the command is run as root. This
is useful for unmounting filesystems
-(such as CDROMs) after a connection is closed.
+(such as cdroms) after a connection is closed.
See also \fI postexec\fR.
@@ -5497,8 +5305,8 @@ Default: \fBroot postexec = <empty string>
\fBroot preexec (S)\fR
This is the same as the \fIpreexec\fR
parameter except that the command is run as root. This
-is useful for mounting filesystems (such as CDROMs) when a
-connection is opened.
+is useful for mounting filesystems (such as cdroms) after a
+connection is closed.
See also \fI preexec\fR and \fIpreexec close\fR.
@@ -5561,7 +5369,7 @@ The different settings will now be explained.
\fBSECURITY = SHARE
\fR
-When clients connect to a share level security server they
+When clients connect to a share level security server then
need not log onto the server with a valid username and password before
attempting to connect to a shared resource (although modern clients
such as Windows 95/98 and Windows NT will send a logon request with
@@ -5668,7 +5476,7 @@ documentation file in the \fIdocs/\fR directory
up.
.PP
.PP
-\fBNote\fR that from the client's point of
+\fBNote\fR that from the clients point of
view \fBsecurity = server\fR is the same as \fB security = user\fR. It only affects how the server deals
with the authentication, it does not in any way affect what the
client sees.
@@ -5707,7 +5515,7 @@ exist as well as the account on the Domain Controller to allow
Samba to have a valid UNIX account to map file access to.
.PP
.PP
-\fBNote\fR that from the client's point
+\fBNote\fR that from the clients point
of view \fBsecurity = domain\fR is the same as \fBsecurity = user
\fR\&. It only affects how the server deals with the authentication,
it does not in any way affect what the client sees.
@@ -5757,27 +5565,30 @@ this mask from being modified. Essentially, zero bits in this
mask may be treated as a set of bits the user is not allowed
to change.
-If not set explicitly this parameter is 0777, allowing
-a user to modify all the user/group/world permissions on a file.
+If not set explicitly this parameter is set to the same
+value as the \fIcreate mask
+\fRparameter. To allow a user to modify all the
+user/group/world permissions on a file, set this parameter to
+0777.
\fBNote\fR that users who can access the
Samba server through other means can easily bypass this
restriction, so it is primarily useful for standalone
"appliance" systems. Administrators of most normal systems will
-probably want to leave it set to 0777.
+probably want to set it to 0777.
See also the \fIforce directory security mode\fR,
\fIdirectory
security mask\fR, \fIforce security mode\fR parameters.
-Default: \fBsecurity mask = 0777\fR
-
-Example: \fBsecurity mask = 0770\fR
+Default: \fBsecurity mask = <same as create mask>
+\fR
+Example: \fBsecurity mask = 0777\fR
.TP
\fBserver string (G)\fR
This controls what string will show up in the
printer comment box in print manager and next to the IPC connection
-in \fBnet view\fR. It can be any string that you wish
+in \fBnet view"\fR. It can be any string that you wish
to show to your users.
It also sets what will appear in browse lists next
@@ -5854,7 +5665,7 @@ open a handle on the printer server with OpenPrinterEx() asking for
Administrator privileges. If the user does not have administrative
access on the print server (i.e is not root or a member of the
\fIprinter admin\fR group), the OpenPrinterEx()
-call fails and the client makes another open call with a request for
+call fails and the clients another open call with a request for
a lower privilege level. This should succeed, however the APW
icon will not be displayed.
@@ -5883,7 +5694,7 @@ address Samba will listen for connections on. This is used to
support multiple virtual interfaces on the one server, each
with a different configuration.
-By default Samba will accept connections on any
+By default samba will accept connections on any
address.
Example: \fBsocket address = 192.168.2.20\fR
@@ -6020,8 +5831,8 @@ this code is \fBNOT\fR enabled by default in any
current binary version of Samba.
This variable enables or disables the entire SSL mode. If
-it is set to no, the SSL-enabled Samba behaves
-exactly like the non-SSL Samba. If set to yes,
+it is set to no, the SSL enabled samba behaves
+exactly like the non-SSL samba. If set to yes,
it depends on the variables \fI ssl hosts\fR and \fIssl hosts resign\fR whether an SSL
connection will be required.
@@ -6039,7 +5850,7 @@ current binary version of Samba.
This variable defines where to look up the Certification
Authorities. The given directory should contain one file for
-each CA that Samba will trust. The file name must be the hash
+each CA that samba will trust. The file name must be the hash
value over the "Distinguished Name" of the CA. How this directory
is set up is explained later in this document. All files within the
directory that don't fit into this naming scheme are ignored. You
@@ -6142,12 +5953,12 @@ given at configure time.
this code is \fBNOT\fR enabled by default in any
current binary version of Samba.
-These two variables define whether Samba will go
-into SSL mode or not. If none of them is defined, Samba will
+These two variables define whether samba will go
+into SSL mode or not. If none of them is defined, samba will
allow only SSL connections. If the \fIssl hosts\fR variable lists
hosts (by IP-address, IP-address range, net group or name),
only these hosts will be forced into SSL mode. If the \fI ssl hosts resign\fR variable lists hosts, only these
-hosts will \fBNOT\fR be forced into SSL mode. The syntax for these two
+hosts will NOT be forced into SSL mode. The syntax for these two
variables is the same as for the \fI hosts allow\fR and \fIhosts deny\fR pair of variables, only
that the subject of the decision is different: It's not the access
right but whether SSL is used or not.
@@ -6276,8 +6087,7 @@ Default: \fBstat cache size = 50\fR
.TP
\fBstatus (G)\fR
This enables or disables logging of connections
-to a status file that smbstatus(1)
-can read.
+to a status file that smbstatus(1)can read.
With this disabled \fBsmbstatus\fR won't be able
to tell you what connections are active. You should never need to
@@ -6294,7 +6104,7 @@ deny access if locks exist. This can be slow on some systems.
When strict locking is no the server does file
lock checks only when the client explicitly asks for them.
-Well-behaved clients always ask for lock checks when it
+Well behaved clients always ask for lock checks when it
is important, so in the vast majority of cases \fBstrict
locking = no\fR is preferable.
@@ -6308,7 +6118,7 @@ the process to be suspended until the kernel has ensured that
all outstanding data in kernel disk buffers has been safely stored
onto stable storage. This is very slow and should only be done
rarely. Setting this parameter to no (the
-default) means that smbdignores the Windows applications requests for
+default) means that smbd ignores the Windows applications requests for
a sync call. There is only a possibility of losing data if the
operating system itself that Samba is running on crashes, so there is
little danger in this default setting. In addition, this fixes many
@@ -6413,7 +6223,7 @@ Synonym for \fI debug timestamp\fR.
This parameter accepts an integer value which defines
a limit on the maximum number of print jobs that will be accepted
system wide at any given time. If a print job is submitted
-by a client which will exceed this number, then smbdwill return an
+by a client which will exceed this number, then smbd will return an
error indicating that no space is available on the server. The
default value of 0 means that no such limit exists. This parameter
can be used to prevent a server from exceeding its capacity and is
@@ -6431,7 +6241,7 @@ when the encrypted SMB password in the smbpasswd file is changed.
If this is set to true the program specified in the \fIpasswd
program\fRparameter is called \fBAS ROOT\fR -
to allow the new UNIX password to be set without access to the
-old UNIX password (as the SMB password change code has no
+old UNIX password (as the SMB password has change code has no
access to the old password cleartext, only the new).
See also \fIpasswd
@@ -6439,6 +6249,14 @@ program\fR, \fI passwd chat\fR.
Default: \fBunix password sync = no\fR
.TP
+\fBunix realname (G)\fR
+This boolean parameter when set causes samba
+to supply the real name field from the unix password file to
+the client. This is useful for setting up mail clients and WWW
+browsers on systems used by more than one person.
+
+Default: \fBunix realname = yes\fR
+.TP
\fBupdate encrypted (G)\fR
This boolean parameter allows a user logging
on with a plaintext password to have their encrypted (hashed)
@@ -6466,8 +6284,8 @@ password in order to connect correctly, and to update their hashed
Default: \fBupdate encrypted = no\fR
.TP
\fBuse rhosts (G)\fR
-If this global parameter is true, it specifies
-that the UNIX user's \fI.rhosts\fR file in their home directory
+If this global parameter is a true, it specifies
+that the UNIX users \fI.rhosts\fR file in their home directory
will be read to find the names of hosts and users who will be allowed
access without specifying a password.
@@ -6517,7 +6335,7 @@ can use the \fIvalid users
\fRparameter.
If any of the usernames begin with a '@' then the name
-will be looked up first in the NIS netgroups list (if Samba
+will be looked up first in the yp netgroups list (if Samba
is compiled with netgroup support), followed by a lookup in
the UNIX groups database and will expand to a list of all users
in the group of that name.
@@ -6527,7 +6345,7 @@ will be looked up only in the UNIX groups database and will
expand to a list of all users in the group of that name.
If any of the usernames begin with a '&'then the name
-will be looked up only in the NIS netgroups database (if Samba
+will be looked up only in the yp netgroups database (if Samba
is compiled with netgroup support) and will expand to a list
of all users in the netgroup group of that name.
@@ -6653,7 +6471,7 @@ Example: \fBusername map = /usr/local/samba/lib/users.map
\fR.TP
\fButmp (S)\fR
This boolean parameter is only available if
-Samba has been configured and compiled with the option \fB --with-utmp\fR. If set to true then Samba will attempt
+Samba has been configured and compiled with the option \fB --with-utmp\fR. If set to True then Samba will attempt
to add utmp or utmpx records (depending on the UNIX system) whenever a
connection is made to a Samba server. Sites may use this to record the
user connecting to a Samba share.
@@ -6827,7 +6645,7 @@ Default : \fBno value\fR
.TP
\fBvfs options (S)\fR
This parameter allows parameters to be passed
-to the vfs layer at initialization time. The Samba VFS layer
+to the vfs layer at initialisation time. The Samba VFS layer
is new to Samba 2.2 and must be enabled at compile time
with --with-vfs. See also \fI vfs object\fR.
@@ -6870,7 +6688,7 @@ available in Samba 3.0.
The winbind gid parameter specifies the range of group
ids that are allocated by the winbindd(8)daemon. This range of group ids should have no
-existing local or NIS groups within it as strange conflicts can
+existing local or nis groups within it as strange conflicts can
occur otherwise.
Default: \fBwinbind gid = <empty string>
@@ -6897,7 +6715,7 @@ available in Samba 3.0.
The winbind gid parameter specifies the range of group
ids that are allocated by the winbindd(8)daemon. This range of ids should have no
-existing local or NIS users within it as strange conflicts can
+existing local or nis users within it as strange conflicts can
occur otherwise.
Default: \fBwinbind uid = <empty string>
@@ -6926,13 +6744,13 @@ name has not previously been added, in that case it should be treated
as an add.
.TP 0.2i
\(bu
-The second argument is the NetBIOS name. If the
+The second argument is the netbios name. If the
name is not a legal name then the wins hook is not called.
Legal names contain only letters, digits, hyphens, underscores
and periods.
.TP 0.2i
\(bu
-The third argument is the NetBIOS name
+The third argument is the netbios name
type as a 2 digit hexadecimal number.
.TP 0.2i
\(bu
@@ -6981,7 +6799,7 @@ This boolean controls if the
nmbd(8)process in Samba will act as a WINS server. You should
not set this to true unless you have a multi-subnetted network and
you wish a particular \fBnmbd\fR to be your WINS server.
-Note that you should \fBNEVER\fR set this to true
+Note that you should \fBNEVER\fR set this to true
on more than one machine in your network.
Default: \fBwins support = no\fR
@@ -7011,7 +6829,7 @@ Reads for the file are also served from this cache if the data is stored
within it.
This cache allows Samba to batch client writes into a more
-efficient write size for RAID disks (i.e. writes may be tuned to
+efficient write size for RAID disks (ie. writes may be tuned to
be the RAID stripe size) and can improve performance on systems
where the disk subsystem is a bottleneck but there is free
memory for userspace programs.
@@ -7047,7 +6865,7 @@ Synonym for \fI writeable\fR.
.TP
\fBwrite raw (G)\fR
This parameter controls whether or not the server
-will support raw write SMB's when transferring data from clients.
+will support raw writes SMB's when transferring data from clients.
You should never need to change this parameter.
Default: \fBwrite raw = yes\fR
@@ -7097,8 +6915,7 @@ samba(7),
\fBsmbclient(1)\fR,
\fBnmblookup(1)\fR,
\fBtestparm(1)\fR,
-\fBtestprns(1)\fR
-.SH "AUTHOR"
+\fBtestprns(1)\fR.SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/manpages/smbcacls.1 b/docs/manpages/smbcacls.1
index 882a7e5e0e5..9322d1aa8ef 100644
--- a/docs/manpages/smbcacls.1
+++ b/docs/manpages/smbcacls.1
@@ -3,21 +3,21 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBCACLS" "1" "22 June 2001" "" ""
+.TH SMBCACLS 1 "23 Jun 2001" "smbcacls 2.2.0a"
.SH NAME
smbcacls \- Set or get ACLs on an NT file or directory names
.SH SYNOPSIS
.sp
-\fBsmbcacls\fR \fB//server/share\fR \fBfilename\fR [ \fB-U username\fR ] [ \fB-A acls\fR ] [ \fB-M acls\fR ] [ \fB-D acls\fR ] [ \fB-S acls\fR ] [ \fB-C name\fR ] [ \fB-G name\fR ] [ \fB-n\fR ] [ \fB-h\fR ]
+\fBnmblookup\fR \fB//server/share\fR \fBfilename\fR [ \fB-U username\fR ] [ \fB-A acls\fR ] [ \fB-M acls\fR ] [ \fB-D acls\fR ] [ \fB-S acls\fR ] [ \fB-C name\fR ] [ \fB-G name\fR ] [ \fB-n\fR ] [ \fB-h\fR ]
.SH "DESCRIPTION"
.PP
This tool is part of the Sambasuite.
.PP
-The \fBsmbcacls\fR program manipulates NT Access Control Lists
+The smbcacls program manipulates NT Access Control Lists
(ACLs) on SMB file shares.
.SH "OPTIONS"
.PP
-The following options are available to the \fBsmbcacls\fR program.
+The following options are available to the smbcacls program.
The format of ACLs is described in the section ACL FORMAT
.TP
\fB-A acls\fR
@@ -30,7 +30,7 @@ specified on the command line. An error will be printed for each
ACL specified that was not already present in the ACL list
.TP
\fB-D acls\fR
-Delete any ACLs specified on the command line.
+Delete any ACLs specfied on the command line.
An error will be printed for each ACL specified that was not
already present in the ACL list.
.TP
@@ -168,8 +168,8 @@ The \fBsmbcacls\fR program sets the exit status
depending on the success or otherwise of the operations performed.
The exit status may be one of the following values.
.PP
-If the operation succeeded, smbcacls returns and exit
-status of 0. If \fBsmbcacls\fR couldn't connect to the specified server,
+If the operation succeded, smbcacls returns and exit
+status of 0. If smbcacls couldn't connect to the specified server,
or there was an error getting or setting the ACLs, an exit status
of 1 is returned. If there was an error parsing any command line
arguments, an exit status of 2 is returned.
diff --git a/docs/manpages/smbclient.1 b/docs/manpages/smbclient.1
index 59a2df21b9c..f75ac743c53 100644
--- a/docs/manpages/smbclient.1
+++ b/docs/manpages/smbclient.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBCLIENT" "1" "22 June 2001" "" ""
+.TH SMBCLIENT 1 "23 Jun 2001" "smbclient 2.2.0a"
.SH NAME
smbclient \- ftp-like client to access SMB/CIFS resources on servers
.SH SYNOPSIS
@@ -38,8 +38,8 @@ a NetBIOS server name, which may or may not be the
same as the IP hostname of the machine running the server.
The server name is looked up according to either
-the \fI-R\fR parameter to \fBsmbclient\fR or
-using the name resolve order parameter in the \fIsmb.conf\fR file,
+the \fI-R\fR parameter to smbclient or
+using the name resolve order parameter in the smb.conf file,
allowing an administrator to change the order and methods
by which server names are looked up.
.TP
@@ -75,7 +75,7 @@ options.
\fB-R <name resolve order>\fR
This option is used by the programs in the Samba
suite to determine what naming services and in what order to resolve
-host names to IP addresses. The option takes a space-separated
+host names to IP addresses. The option takes a space separated
string of different name resolution options.
The options are :"lmhosts", "host", "wins" and "bcast". They
@@ -92,7 +92,7 @@ any name type matches for lookup.
host : Do a standard host
name to IP address resolution, using the system \fI/etc/hosts
\fR, NIS, or DNS lookups. This method of name resolution
-is operating system dependent, for instance on IRIX or Solaris this
+is operating system depended for instance on IRIX or Solaris this
may be controlled by the \fI/etc/nsswitch.conf\fR
file). Note that this method is only used if the NetBIOS name
type being queried is the 0x20 (server) name type, otherwise
@@ -120,7 +120,7 @@ defined in the \fIsmb.conf\fR file parameter
.PP
The default order is lmhosts, host, wins, bcast and without
this parameter or any entry in the \fIname resolve order
-\fRparameter of the \fIsmb.conf\fR file the name resolution
+\fRparameter of the smb.conf file the name resolution
methods will be attempted in this order.
.PP
.TP
@@ -157,7 +157,7 @@ messages.
\fB-i scope\fR
This specifies a NetBIOS scope that smbclient will
use to communicate with when generating NetBIOS names. For details
-on the use of NetBIOS scopes, see \fIrfc1001.txt\fR and \fIrfc1002.txt\fR.
+on the use of NetBIOS scopes, see rfc1001.txt and rfc1002.txt.
NetBIOS scopes are \fBvery\fR rarely used, only set
this parameter if you are the system administrator in charge of all
the NetBIOS systems you communicate with.
@@ -178,7 +178,7 @@ allows you to override the host name and use whatever NetBIOS
name you wish.
.TP
\fB-d debuglevel\fR
-\fIdebuglevel\fR is an integer from 0 to 10, or
+debuglevel is an integer from 0 to 10, or
the letter 'A'.
The default value if this parameter is not specified
@@ -195,13 +195,13 @@ Levels above 1 will generate considerable amounts of log
data, and should only be used when investigating a problem.
Levels above 3 are designed for use only by developers and
generate HUGE amounts of log data, most of which is extremely
-cryptic. If \fIdebuglevel\fR is set to the letter 'A', then \fBall
+cryptic. If debuglevel is set to the letter 'A', then \fBall
\fRdebug messages will be printed. This setting
is for developers only (and people who \fBreally\fR want
to know how the code works internally).
Note that specifying this parameter here will override
-the log level parameter in the \fIsmb.conf (5)\fR
+the log level parameter in the \fBsmb.conf (5)\fR
file.
.TP
\fB-p port\fR
@@ -211,7 +211,7 @@ TCP port number for an SMB/CIFS server is 139, which is the
default.
.TP
\fB-l logfilename\fR
-If specified, \fIlogfilename\fR specifies a base filename
+If specified, logfilename specifies a base filename
into which operational data from the running client will be
logged.
@@ -227,7 +227,7 @@ The log file generated is never removed by the client.
Print the usage message for the client.
.TP
\fB-I IP-address\fR
-\fIIP address\fR is the address of the server to connect to.
+IP address is the address of the server to connect to.
It should be specified in standard "a.b.c.d" notation.
Normally the client would attempt to locate a named
@@ -253,28 +253,28 @@ By default, the client writes messages to standard output
\fB-U username[%pass]\fR
Sets the SMB username or username and password.
If %pass is not specified, The user will be prompted. The client
-will first check the \fBUSER\fR environment variable, then the
-\fBLOGNAME\fR variable and if either exists, the
+will first check the USER environment variable, then the
+\fI$LOGNAME\fR variable and if either exist, the
string is uppercased. Anything in these variables following a '%'
-sign will be treated as the password. If these environment
+sign will be treated as the password. If these environmental
variables are not found, the username GUEST
is used.
-If the password is not included in these environment
-variables (using the %pass syntax), \fBrpcclient\fR will look for
-a \fBPASSWD\fR environment variable from which
+If the password is not included in these environment
+variables (using the %pass syntax), rpcclient will look for
+a \fI$PASSWD\fR environment variable from which
to read the password.
A third option is to use a credentials file which
contains the plaintext of the username and password. This
option is mainly provided for scripts where the admin doesn't
-wish to pass the credentials on the command line or via environment
+desire to pass the credentials on the command line or via environment
variables. If this method is used, make certain that the permissions
on the file restrict access from unwanted users. See the
\fI-A\fR for more details.
Be cautious about including passwords in scripts or in
-the \fBPASSWD\fR environment variable. Also, on
+the \fI$PASSWD\fR environment variable. Also, on
many systems the command line of a running process may be seen
via the \fBps\fR command to be safe always allow
\fBrpcclient\fR to prompt for a password and type
@@ -301,11 +301,11 @@ This option allows you to look at what services
are available on a server. You use it as \fBsmbclient -L
host\fR and a list should appear. The \fI-I
\fRoption may be useful if your NetBIOS names don't
-match your TCP/IP DNS host names or if you are trying to reach a
+match your tcp/ip dns host names or if you are trying to reach a
host on another network.
.TP
\fB-t terminal code\fR
-This option tells \fBsmbclient\fR how to interpret
+This option tells smbclient how to interpret
filenames coming from the remote server. Usually Asian language
multibyte UNIX implementations use different character sets than
SMB/CIFS servers (\fBEUC\fR instead of \fB SJIS\fR for example). Setting this parameter will let
@@ -383,7 +383,7 @@ diagnostics as it works. This is the same as tarmode quiet.
.TP 0.2i
\(bu
\fIr\fR - Regular expression include
-or exclude. Uses regular expression matching for
+or exclude. Uses regular regular expression matching for
excluding or excluding files if compiled with HAVE_REGEX_H.
However this mode can be very slow. If not compiled with
HAVE_REGEX_H, does a limited wildcard match on '*' and '?'.
@@ -407,7 +407,7 @@ archive bit to be reset when a file is backed up. Useful with the
\fBsmbclient\fR's tar option now supports long
file names both on backup and restore. However, the full path
name of the file must be less than 1024 bytes. Also, when
-a tar archive is created, \fBsmbclient\fR's tar option places all
+a tar archive is created, smbclient's tar option places all
files in the archive with relative names, not absolute names.
.PP
.PP
@@ -422,11 +422,11 @@ the component separator).
\fBExamples\fR
.PP
.PP
-Restore from tar file \fIbackup.tar\fR into myshare on mypc
+Restore from tar file backup.tar into myshare on mypc
(no password on share).
.PP
.PP
-\fBsmbclient //mypc/yshare "" -N -Tx backup.tar
+\fBsmbclient //mypc/myshare "" -N -Tx backup.tar
\fR.PP
.PP
Restore everything except \fIusers/docs\fR
@@ -463,7 +463,7 @@ Change to initial directory before starting. Probably
only of any use with the tar -T option.
.TP
\fB-c command string\fR
-command string is a semicolon-separated list of
+command string is a semicolon separated list of
commands to be executed instead of prompting from stdin. \fI -N\fR is implied by \fI-c\fR.
This is particularly useful in scripts and for printing stdin
@@ -500,13 +500,13 @@ vary from server to server, depending on how the server was implemented.
The commands available are given here in alphabetical order.
.TP
\fB? [command]\fR
-If \fIcommand\fR is specified, the ? command will display
+If "command" is specified, the ? command will display
a brief informative message about the specified command. If no
command is specified, a list of available commands will
be displayed.
.TP
\fB! [shell command]\fR
-If \fIshell command\fR is specified, the !
+If "shell command" is specified, the !
command will execute a shell locally and run the specified shell
command. If no command is specified, a local shell will be run.
.TP
@@ -521,11 +521,11 @@ directory on the server will be reported.
.TP
\fBdel <mask>\fR
The client will request that the server attempt
-to delete all files matching \fImask\fR from the current working
+to delete all files matching "mask" from the current working
directory on the server.
.TP
\fBdir <mask>\fR
-A list of the files matching \fImask\fR in the current
+A list of the files matching "mask" in the current
working directory on the server will be retrieved from the server
and displayed.
.TP
@@ -534,9 +534,9 @@ Terminate the connection with the server and exit
from the program.
.TP
\fBget <remote file name> [local file name]\fR
-Copy the file called \fIremote file name\fR from
+Copy the file called "remote file name" from
the server to the machine running the client. If specified, name
-the local copy \fIlocal file name\fR. Note that all transfers in
+the local copy "local file name". Note that all transfers in
\fBsmbclient\fR are binary. See also the
lowercase command.
.TP
@@ -544,7 +544,7 @@ lowercase command.
See the ? command above.
.TP
\fBlcd [directory name]\fR
-If \fIdirectory name\fR is specified, the current
+If "directory name" is specified, the current
working directory on the local machine will be changed to
the directory specified. This operation will fail if for any
reason the specified directory is inaccessible.
@@ -591,26 +591,26 @@ mask back to "*" after using the mget or mput commands.
See the mkdir command.
.TP
\fBmget <mask>\fR
-Copy all files matching \fImask\fR from the server to
+Copy all files matching mask from the server to
the machine running the client.
-Note that \fImask\fR is interpreted differently during recursive
+Note that mask is interpreted differently during recursive
operation and non-recursive operation - refer to the recurse and
mask commands for more information. Note that all transfers in
-\fBsmbclient\fR are binary. See also the lowercase command.
+smbclient are binary. See also the lowercase command.
.TP
\fBmkdir <directory name>\fR
Create a new directory on the server (user access
privileges permitting) with the specified name.
.TP
\fBmput <mask>\fR
-Copy all files matching \fImask\fR in the current working
+Copy all files matching mask in the current working
directory on the local machine to the current working directory on
the server.
-Note that \fImask\fR is interpreted differently during recursive
+Note that mask is interpreted differently during recursive
operation and non-recursive operation - refer to the recurse and mask
-commands for more information. Note that all transfers in \fBsmbclient\fR
+commands for more information. Note that all transfers in smbclient
are binary.
.TP
\fBprint <file name>\fR
@@ -633,10 +633,10 @@ the transfer of each file during these commands. When toggled
OFF, all specified files will be transferred without prompting.
.TP
\fBput <local file name> [remote file name]\fR
-Copy the file called \fIlocal file name\fR from the
+Copy the file called "local file name" from the
machine running the client to the server. If specified,
-name the remote copy \fIremote file name\fR. Note that all transfers
-in \fBsmbclient\fR are binary. See also the lowercase command.
+name the remote copy "remote file name". Note that all transfers
+in smbclient are binary. See also the lowercase command.
.TP
\fBqueue\fR
Displays the print queue, showing the job id,
@@ -664,7 +664,7 @@ to the mget or mput commands will be copied, and any mask specified
using the mask command will be ignored.
.TP
\fBrm <mask>\fR
-Remove all files matching \fImask\fR from the current
+Remove all files matching mask from the current
working directory on the server.
.TP
\fBrmdir <directory name>\fR
@@ -681,7 +681,7 @@ with tar x may not work - use the command line option instead.
\fBblocksize <blocksize>\fR
Blocksize. Must be followed by a valid (greater
than zero) blocksize. Causes tar file to be written out in
-\fIblocksize\fR*TBLOCK (usually 512 byte) blocks.
+blocksize*TBLOCK (usually 512 byte) blocks.
.TP
\fBtarmode <full|inc|reset|noreset>\fR
Changes tar's behavior with regard to archive
@@ -713,12 +713,12 @@ smbclient supports long file names where the server
supports the LANMAN2 protocol or above.
.SH "ENVIRONMENT VARIABLES"
.PP
-The variable \fBUSER\fR may contain the
+The variable \fI$USER\fR may contain the
username of the person using the client. This information is
used only if the protocol level is high enough to support
session-level passwords.
.PP
-The variable \fBPASSWD\fR may contain
+The variable \fI$PASSWD\fR may contain
the password of the person using the client. This information is
used only if the protocol level is high enough to support
session-level passwords.
@@ -739,7 +739,7 @@ and writeable only by the user.
.PP
To test the client, you will need to know the name of a
running SMB/CIFS server. It is possible to run \fBsmbd(8)
-\fRas an ordinary user - running that server as a daemon
+\fRan ordinary user - running that server as a daemon
on a user-accessible port (typically any port number over 1024)
would provide a suitable test server.
.SH "DIAGNOSTICS"
diff --git a/docs/manpages/smbcontrol.1 b/docs/manpages/smbcontrol.1
index 92043165952..25858c232d3 100644
--- a/docs/manpages/smbcontrol.1
+++ b/docs/manpages/smbcontrol.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBCONTROL" "1" "07 May 2001" "" ""
+.TH SMBCONTROL 1 "23 Jun 2001" "smbcontrol 2.2.0a"
.SH NAME
smbcontrol \- send messages to smbd or nmbd processes
.SH SYNOPSIS
diff --git a/docs/manpages/smbd.8 b/docs/manpages/smbd.8
index fae2974e891..c8a9cc1c0e3 100644
--- a/docs/manpages/smbd.8
+++ b/docs/manpages/smbd.8
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBD" "8" "22 June 2001" "" ""
+.TH SMBD 8 "23 Jun 2001" "smbd 2.2.0a"
.SH NAME
smbd \- server to provide SMB/CIFS services to clients
.SH SYNOPSIS
@@ -31,8 +31,7 @@ services, but will concentrate on the administrative aspects
of running the server.
.PP
Please note that there are significant security
-implications to running this server, and the \fIsmb.conf(5)\fR
-manpage should be regarded as mandatory reading before
+implications to running this server, and the \fIsmb.conf(5)\fRmanpage should be regarded as mandatory reading before
proceeding with installation.
.PP
A session is created whenever a client requests one.
@@ -46,7 +45,7 @@ are automatically reloaded every minute, if they change. You
can force a reload by sending a SIGHUP to the server. Reloading
the configuration file will not affect connections to any service
that is already established. Either the user will have to
-disconnect from the service, or \fBsmbd\fR killed and restarted.
+disconnect from the service, or smbd killed and restarted.
.SH "OPTIONS"
.TP
\fB-D\fR
@@ -54,9 +53,9 @@ If specified, this parameter causes
the server to operate as a daemon. That is, it detaches
itself and runs in the background, fielding requests
on the appropriate port. Operating the server as a
-daemon is the recommended way of running \fBsmbd\fR for
+daemon is the recommended way of running smbd for
servers that provide more than casual use file and
-print services. This switch is assumed if \fBsmbd
+print services. This switch is assumed is \fBsmbd
\fRis executed on the command line of a shell.
.TP
\fB-a\fR
@@ -71,7 +70,7 @@ log files will be overwritten when opened. By default,
files.
.TP
\fB-P\fR
-Passive option. Causes \fBsmbd\fR not to
+Passive option. Causes smbd not to
send any network traffic out. Used for debugging by
the developers only.
.TP
@@ -84,7 +83,7 @@ Prints the version number for
\fBsmbd\fR.
.TP
\fB-d <debug level>\fR
-\fIdebuglevel\fR is an integer
+debuglevel is an integer
from 0 to 10. The default value if this parameter is
not specified is zero.
@@ -106,21 +105,19 @@ override the log
levelfile.
.TP
\fB-l <log file>\fR
-If specified, \fIlog file\fR
+If specified, \fBlog file\fR
specifies a log filename into which informational and debug
messages from the running server will be logged. The log
file generated is never removed by the server although
-its size may be controlled by the max log size
-option in the \fI smb.conf(5)\fRfile. The default log
+its size may be controlled by the max log sizeoption in the \fI smb.conf(5)\fRfile. The default log
file name is specified at compile time.
.TP
\fB-O <socket options>\fR
-See the socket options
-parameter in the \fIsmb.conf(5)
+See the socket optionsparameter in the \fIsmb.conf(5)
\fRfile for details.
.TP
\fB-p <port number>\fR
-\fIport number\fR is a positive integer
+port number is a positive integer
value. The default value if this parameter is not
specified is 139.
@@ -177,8 +174,7 @@ See the section INSTALLATION below.
.TP
\fB\fI/usr/local/samba/lib/smb.conf\fB\fR
This is the default location of the
-\fIsmb.conf\fR
-server configuration file. Other common places that systems
+\fIsmb.conf\fRserver configuration file. Other common places that systems
install this file are \fI/usr/samba/lib/smb.conf\fR
and \fI/etc/smb.conf\fR.
@@ -213,10 +209,10 @@ in a directory readable by all, writeable only by root. The server
program itself should be executable by all, as users may wish to
run the server themselves (in which case it will of course run
with their privileges). The server should NOT be setuid. On some
-systems it may be worthwhile to make \fBsmbd\fR setgid to an empty group.
+systems it may be worthwhile to make smbd setgid to an empty group.
This is because some systems may have a security hole where daemon
processes that become a user can be attached to with a debugger.
-Making the \fBsmbd\fR file setgid to an empty group may prevent
+Making the smbd file setgid to an empty group may prevent
this hole from being exploited. This security hole and the suggested
fix has only been confirmed on old versions (pre-kernel 2.0) of Linux
at the time this was written. It is possible that this hole only
@@ -307,7 +303,7 @@ be omitted. See the section OPTIONS above.
.SH "RUNNING THE SERVER ON REQUEST"
.PP
If your system uses a meta-daemon such as \fBinetd
-\fR, you can arrange to have the \fBsmbd\fR server started
+\fR, you can arrange to have the smbd server started
whenever a process attempts to connect to it. This requires several
changes to the startup files on the host machine. If you are
experimenting as an ordinary user rather than as root, you will
@@ -381,8 +377,8 @@ or kill and restart the meta-daemon. Some versions of
\fBinetd\fR will reread their configuration
tables if they receive a HUP signal.
.PP
-If your machine's name is \fIfred\fR and your
-name is \fImary\fR, you should now be able to connect
+If your machine's name is fred and your
+name is mary, you should now be able to connect
to the service \fI\\\\fred\\mary\fR.
.PP
To properly test and experiment with the server, we
@@ -413,26 +409,26 @@ source code and inspect the conditions that gave rise to the
diagnostics you are seeing.
.SH "SIGNALS"
.PP
-Sending the \fBsmbd\fR a SIGHUP will cause it to
-reload its \fIsmb.conf\fR configuration
+Sending the smbd a SIGHUP will cause it to
+re-load its \fIsmb.conf\fR configuration
file within a short period of time.
.PP
-To shut down a user's \fBsmbd\fR process it is recommended
+To shut down a users smbd process it is recommended
that \fBSIGKILL (-9)\fR \fBNOT\fR
be used, except as a last resort, as this may leave the shared
memory area in an inconsistent state. The safe way to terminate
-an \fBsmbd\fR is to send it a SIGTERM (-15) signal and wait for
+an smbd is to send it a SIGTERM (-15) signal and wait for
it to die on its own.
.PP
-The debug log level of \fBsmbd\fR may be raised by sending
+The debug log level of smbd may be raised by sending
it a SIGUSR1 (\fBkill -USR1 <smbd-pid>\fR)
and lowered by sending it a SIGUSR2 (\fBkill -USR2 <smbd-pid>
\fR). This is to allow transient problems to be diagnosed,
whilst still running at a normally low log level.
.PP
Note that as the signal handlers send a debug write,
-they are not re-entrant in \fBsmbd\fR. This you should wait until
-\fBsmbd\fR is in a state of waiting for an incoming SMB before
+they are not re-entrant in smbd. This you should wait until
+smbd is in a state of waiting for an incoming smb before
issuing them. It is possible to make the signal handlers safe
by un-blocking the signals before the select call and re-blocking
them after, however this would affect performance.
diff --git a/docs/manpages/smbmnt.8 b/docs/manpages/smbmnt.8
index 74037b7c45a..1104791b128 100644
--- a/docs/manpages/smbmnt.8
+++ b/docs/manpages/smbmnt.8
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBMNT" "8" "22 June 2001" "" ""
+.TH SMBMNT 8 "23 Jun 2001" "smbmnt 2.2.0a"
.SH NAME
smbmnt \- helper utility for mounting SMB filesystems
.SH SYNOPSIS
@@ -14,7 +14,7 @@ smbmnt \- helper utility for mounting SMB filesystems
\fBsmbmnt\fR is a helper application used
by the smbmount program to do the actual mounting of SMB shares.
\fBsmbmnt\fR is meant to be installed setuid root
-so that normal users can mount their SMB shares. It checks
+so that normal users can mount their smb shares. It checks
whether the user has write permissions on the mount point and
then mounts the directory.
.PP
@@ -43,7 +43,7 @@ applied
.TP
\fB-o options\fR
list of options that are passed as-is to smbfs, if this
-command is run on a 2.4 or higher Linux kernel.
+command is run on a 2.4 or higher linux kernel.
.SH "AUTHOR"
.PP
Volker Lendecke, Andrew Tridgell, Michael H. Warfield
diff --git a/docs/manpages/smbmount.8 b/docs/manpages/smbmount.8
index b9c9bf7f239..4d5ff3c5b00 100644
--- a/docs/manpages/smbmount.8
+++ b/docs/manpages/smbmount.8
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBMOUNT" "8" "22 June 2001" "" ""
+.TH SMBMOUNT 8 "23 Jun 2001" "smbmount 2.2.0a"
.SH NAME
smbmount \- mount an smbfs filesystem
.SH SYNOPSIS
@@ -16,17 +16,17 @@ is usually invoked as \fBmount.smb\fR from
the \fBmount(8)\fR command when using the
"-t smb" option. The kernel must support the smbfs filesystem.
.PP
-Options to \fBsmbmount\fR are specified as a comma-separated
+Options to smbmount are specified as a comma separated
list of key=value pairs. It is possible to send options other
than those listed here, assuming that smbfs supports them. If
you get mount failures, check your kernel log for errors on
unknown options.
.PP
-\fBsmbmount\fR is a daemon. After mounting it keeps running until
+smbmount is a daemon. After mounting it keeps running until
the mounted smbfs is umounted. It will log things that happen
when in daemon mode using the "machine name" smbmount, so
-typically this output will end up in \fIlog.smbmount\fR. The
-\fBsmbmount\fR process may also be called mount.smbfs.
+typically this output will end up in log.smbmount. The
+smbmount process may also be called mount.smbfs.
.PP
\fBNOTE:\fR \fBsmbmount\fR
calls \fBsmbmnt(8)\fR to do the actual mount. You
@@ -48,12 +48,6 @@ option is not given then the environment variable
no password \fBsmbmount\fR will prompt
for a passeword, unless the guest option is
given.
-
-Note that password which contain the arguement delimiter
-character (i.e. a comma ',') will failed to be parsed correctly
-on the command line. However, the same password defined
-in the PASSWD environment variable or a credentials file (see
-below) will be read correctly.
.TP
\fBcredentials=<filename>\fR
specifies a file that contains a username
@@ -68,7 +62,7 @@ and/or password. The format of the file is:
.fi
This is preferred over having passwords in plaintext in a
-shared file, such as \fI/etc/fstab\fR. Be sure to protect any
+shared file, such as /etc/fstab. Be sure to protect any
credentials file properly.
.TP
\fBnetbiosname=<arg>\fR
@@ -96,7 +90,7 @@ permissions that remote files have in the local filesystem.
The default is based on the current umask.
.TP
\fBdmask=<arg>\fR
-sets the directory mask. This determines the
+sets the directory mask. This deterines the
permissions that remote directories have in the local filesystem.
The default is based on the current umask.
.TP
@@ -127,7 +121,7 @@ mount read-only
mount read-write
.TP
\fBiocharset=<arg>\fR
-sets the charset used by the Linux side for codepage
+sets the charset used by the linux side for codepage
to charset translations (NLS). Argument should be the
name of a charset, like iso8859-1. (Note: only kernel
2.4.0 or later)
@@ -162,7 +156,7 @@ passwords.
.PP
The variable \fBPASSWD_FILE\fR may contain the pathname of
a file to read the password from. A single line of input is
-read and used as the password.
+read and used as password.
.SH "BUGS"
.PP
Not many known smbmount bugs. But one smbfs bug is
@@ -175,7 +169,7 @@ reconnect when the server disconnects, the mount will go
dead. A re-mount normally fixes this. At least 2 ways to
trigger this bug are known.
.PP
-Note that the typical response to a bug report is suggestion
+Note that the typical response to a bugreport is suggestion
to try the latest version first. So please try doing that first,
and always include which versions you use of relevant software
when reporting bugs (minimum: samba, kernel, distribution)
diff --git a/docs/manpages/smbpasswd.5 b/docs/manpages/smbpasswd.5
index 234b4c746dc..551426dd819 100644
--- a/docs/manpages/smbpasswd.5
+++ b/docs/manpages/smbpasswd.5
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBPASSWD" "5" "22 June 2001" "" ""
+.TH SMBPASSWD 5 "23 Jun 2001" "smbpasswd 2.2.0a"
.SH NAME
smbpasswd \- The Samba encrypted password file
.SH SYNOPSIS
@@ -38,9 +38,9 @@ If this does not match then Samba will refuse to recognize
this smbpasswd file entry as being valid for a user.
.TP
\fBLanman Password Hash\fR
-This is the LANMAN hash of the user's password,
+This is the LANMAN hash of the users password,
encoded as 32 hex digits. The LANMAN hash is created by DES
-encrypting a well known string with the user's password as the
+encrypting a well known string with the users password as the
DES key. This is the same password used by Windows 95/98 machines.
Note that this password hash is regarded as weak as it is
vulnerable to dictionary attacks and if two users choose the
@@ -48,7 +48,7 @@ same password this entry will be identical (i.e. the password
is not "salted" as the UNIX password is). If the user has a
null password this field will contain the characters "NO PASSWORD"
as the start of the hex string. If the hex string is equal to
-32 'X' characters then the user's account is marked as
+32 'X' characters then the users account is marked as
disabled and the user will not be able to
log onto the Samba server.
@@ -65,14 +65,14 @@ itself must be set to be read/write only by root, with no
other access.
.TP
\fBNT Password Hash\fR
-This is the Windows NT hash of the user's
+This is the Windows NT hash of the users
password, encoded as 32 hex digits. The Windows NT hash is
-created by taking the user's password as represented in
+created by taking the users password as represented in
16-bit, little-endian UNICODE and then applying the MD4
(internet rfc1321) hashing algorithm to it.
This password hash is considered more secure than
-the LANMAN Password Hash as it preserves the case of the
+the Lanman Password Hash as it preserves the case of the
password and uses a much higher quality hashing algorithm.
However, it is still the case that if two users choose the same
password this entry will be identical (i.e. the password is
@@ -106,7 +106,7 @@ in the smbpasswd file.
.TP 0.2i
\(bu
\fBN\fR - This means the
-account has no password (the passwords in the fields LANMAN
+account has no password (the passwords in the fields Lanman
Password Hash and NT Password Hash are ignored). Note that this
will only allow users to log on with no password if the \fI null passwords\fR parameter is set in the \fIsmb.conf(5)
\fRconfig file.
diff --git a/docs/manpages/smbpasswd.8 b/docs/manpages/smbpasswd.8
index 91c344f11d0..a658e7cc3b3 100644
--- a/docs/manpages/smbpasswd.8
+++ b/docs/manpages/smbpasswd.8
@@ -3,9 +3,9 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBPASSWD" "8" "22 June 2001" "" ""
+.TH SMBPASSWD 8 "23 Jun 2001" "smbpasswd 2.2.0a"
.SH NAME
-smbpasswd \- change a user's SMB password
+smbpasswd \- change a users SMB password
.SH SYNOPSIS
.sp
\fBsmbpasswd\fR [ \fB-a\fR ] [ \fB-x\fR ] [ \fB-d\fR ] [ \fB-e\fR ] [ \fB-D debuglevel\fR ] [ \fB-n\fR ] [ \fB-r <remote machine>\fR ] [ \fB-R <name resolve order>\fR ] [ \fB-m\fR ] [ \fB-j DOMAIN\fR ] [ \fB-U username\fR ] [ \fB-h\fR ] [ \fB-s\fR ] [ \fBusername\fR ]
@@ -20,7 +20,7 @@ the password used for their SMB sessions on any machines that store
SMB passwords.
.PP
By default (when run with no arguments) it will attempt to
-change the current user's SMB password on the local machine. This is
+change the current users SMB password on the local machine. This is
similar to the way the \fBpasswd(1)\fR program works.
\fBsmbpasswd\fR differs from how the passwd program works
however in that it is not \fBsetuid root\fR but works in
@@ -31,10 +31,10 @@ UNIX machine the encrypted SMB passwords are usually stored in
the \fIsmbpasswd(5)\fR file.
.PP
When run by an ordinary user with no options. smbpasswd
-will prompt them for their old SMB password and then ask them
+will prompt them for their old smb password and then ask them
for their new password twice, to ensure that the new password
was typed correctly. No passwords will be echoed on the screen
-whilst being typed. If you have a blank SMB password (specified by
+whilst being typed. If you have a blank smb password (specified by
the string "NO PASSWORD" in the smbpasswd file) then just press
the <Enter> key when asked for your old password.
.PP
@@ -79,7 +79,7 @@ is done all attempts to authenticate via SMB using this username
will fail.
If the smbpasswd file is in the 'old' format (pre-Samba 2.0
-format) there is no space in the user's password entry to write
+format) there is no space in the users password entry to write
this information and so the user is disabled by writing 'X' characters
into the password space in the smbpasswd file. See \fBsmbpasswd(5)
\fRfor details on the 'old' and new password file formats.
@@ -254,7 +254,7 @@ or as an ordinary user.
.TP
\fB-s\fR
This option causes smbpasswd to be silent (i.e.
-not issue prompts) and to read its old and new passwords from
+not issue prompts) and to read it's old and new passwords from
standard input, rather than from \fI/dev/tty\fR
(like the \fBpasswd(1)\fR program does). This option
is to aid people writing scripts to drive smbpasswd
@@ -285,8 +285,7 @@ the Samba suite.
.SH "SEE ALSO"
.PP
\fIsmbpasswd(5)\fR,
-samba(7)
-.SH "AUTHOR"
+samba(7).SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/manpages/smbrun.1 b/docs/manpages/smbrun.1
index c671a505aee..2934cd60658 100644
--- a/docs/manpages/smbrun.1
+++ b/docs/manpages/smbrun.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH SMBRUN 1 "24 Mar 2001" "smbrun 2.2.0-alpha3"
+.TH SMBRUN 1 "23 Jun 2001" "smbrun 2.2.0a"
.SH NAME
smbrun \- interface program between smbd and external programs
.SH SYNOPSIS
diff --git a/docs/manpages/smbsh.1 b/docs/manpages/smbsh.1
index ac5d5f073c5..efa1c4523b2 100644
--- a/docs/manpages/smbsh.1
+++ b/docs/manpages/smbsh.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBSH" "1" "22 June 2001" "" ""
+.TH SMBSH 1 "23 Jun 2001" "smbsh 2.2.0a"
.SH NAME
smbsh \- Allows access to Windows NT filesystem using UNIX commands
.SH SYNOPSIS
@@ -15,7 +15,7 @@ This tool is part of the Sambasuite.
.PP
\fBsmbsh\fR allows you to access an NT filesystem
using UNIX commands such as \fBls\fR, \fB egrep\fR, and \fBrcp\fR. You must use a
-shell that is dynamically linked in order for \fBsmbsh\fR
+shell that is dynmanically linked in order for \fBsmbsh\fR
to work correctly.
.PP
To use the \fBsmbsh\fR command, execute \fB smbsh\fR from the prompt and enter the username and password
@@ -56,8 +56,7 @@ describe how a program was linked.
.SH "SEE ALSO"
.PP
\fBsmbd(8)\fR,
-smb.conf(5)
-.SH "AUTHOR"
+smb.conf(5).SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/manpages/smbspool.8 b/docs/manpages/smbspool.8
index 9597f840b73..d2851da4858 100644
--- a/docs/manpages/smbspool.8
+++ b/docs/manpages/smbspool.8
@@ -3,9 +3,9 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBSPOOL" "8" "22 June 2001" "" ""
+.TH SMBSPOOL 8 "23 Jun 2001" "smbspool 2.2.0a"
.SH NAME
-smbspool \- send print file to an SMB printer
+nmblookup \- send print file to an SMB printer
.SH SYNOPSIS
.sp
\fBsmbspool\fR [ \fBjob\fR ] [ \fBuser\fR ] [ \fBtitle\fR ] [ \fBcopies\fR ] [ \fBoptions\fR ] [ \fBfilename\fR ]
@@ -38,12 +38,12 @@ smb://username:password@server/printer
smb://username:password@workgroup/server/printer
.PP
smbspool tries to get the URI from argv[0]. If argv[0]
-contains the name of the program then it looks in the \fB DEVICE_URI\fR environment variable.
+contains the name of the program then it looks in the \fI DEVICE_URI\fR environment variable.
.PP
.PP
Programs using the \fBexec(2)\fR functions can
pass the URI in argv[0], while shell scripts must set the
-\fBDEVICE_URI\fR environment variable prior to
+\fIDEVICE_URI\fR environment variable prior to
running smbspool.
.PP
.SH "OPTIONS"
diff --git a/docs/manpages/smbstatus.1 b/docs/manpages/smbstatus.1
index 21275c25a26..88de3d4c8ca 100644
--- a/docs/manpages/smbstatus.1
+++ b/docs/manpages/smbstatus.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBSTATUS" "1" "07 May 2001" "" ""
+.TH SMBSTATUS 1 "23 Jun 2001" "smbstatus 2.2.0a"
.SH NAME
smbstatus \- report on current Samba connections
.SH SYNOPSIS
diff --git a/docs/manpages/smbtar.1 b/docs/manpages/smbtar.1
index 001062468b0..2bbe5254f59 100644
--- a/docs/manpages/smbtar.1
+++ b/docs/manpages/smbtar.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBTAR" "1" "03 May 2001" "" ""
+.TH SMBTAR 1 "23 Jun 2001" "smbtar 2.2.0a"
.SH NAME
smbtar \- shell script for backing up SMB/CIFS shares directly to UNIX tape drives
.SH SYNOPSIS
@@ -14,8 +14,7 @@ smbtar \- shell script for backing up SMB/CIFS shares directly to UNIX tape dri
This tool is part of the Sambasuite.
.PP
\fBsmbtar\fR is a very small shell script on top
-of \fBsmbclient(1)\fR
-which dumps SMB shares directly to tape.
+of \fBsmbclient(1)\fRwhich dumps SMB shares directly to tape.
.SH "OPTIONS"
.TP
\fB-s server\fR
diff --git a/docs/manpages/smbumount.8 b/docs/manpages/smbumount.8
index 5bc1d61c00d..8d0a3aba588 100644
--- a/docs/manpages/smbumount.8
+++ b/docs/manpages/smbumount.8
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SMBUMOUNT" "8" "22 June 2001" "" ""
+.TH SMBUMOUNT 8 "23 Jun 2001" "smbumount 2.2.0a"
.SH NAME
smbumount \- smbfs umount for normal users
.SH SYNOPSIS
@@ -13,7 +13,7 @@ smbumount \- smbfs umount for normal users
.PP
With this program, normal users can unmount smb-filesystems,
provided that it is suid root. \fBsmbumount\fR has
-been written to give normal Linux users more control over their
+been written to give normal linux-users more control over their
resources. It is safe to install this program suid root, because only
the user who has mounted a filesystem is allowed to unmount it again.
For root it is not necessary to use smbumount. The normal umount
@@ -26,7 +26,6 @@ The directory to unmount.
.SH "SEE ALSO"
.PP
\fBsmbmount(8)\fR
-
.SH "AUTHOR"
.PP
Volker Lendecke, Andrew Tridgell, Michael H. Warfield
diff --git a/docs/manpages/swat.8 b/docs/manpages/swat.8
index 2d1d13ccefe..ed4f7cf541a 100644
--- a/docs/manpages/swat.8
+++ b/docs/manpages/swat.8
@@ -3,12 +3,12 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "SWAT" "8" "22 June 2001" "" ""
+.TH SWAT 8 "23 Jun 2001" "swat 2.2.0a"
.SH NAME
swat \- Samba Web Administration Tool
.SH SYNOPSIS
.sp
-\fBswat\fR [ \fB-s <smb config file>\fR ] [ \fB-a\fR ]
+\fBnmblookup\fR [ \fB-s <smb config file>\fR ] [ \fB-a\fR ]
.SH "DESCRIPTION"
.PP
This tool is part of the Sambasuite.
@@ -16,17 +16,17 @@ This tool is part of the Sambasuite.
\fBswat\fR allows a Samba administrator to
configure the complex \fI smb.conf(5)\fRfile via a Web browser. In addition,
a \fBswat\fR configuration page has help links
-to all the configurable options in the \fIsmb.conf\fR file allowing an
+to all the configurable options in the smb.conf file allowing an
administrator to easily look up the effects of any change.
.PP
-\fBswat\fR is run from \fBinetd\fR
+swat is run from inetd
.SH "OPTIONS"
.TP
\fB-s smb configuration file\fR
The default configuration file path is
determined at compile time. The file specified contains
the configuration details required by the \fBsmbd
-\fRserver. This is the file that \fBswat\fR will modify.
+\fRserver. This is the file that swat will modify.
The information in this file includes server-specific
information such as what printcap file to use, as well as
descriptions of all the services that the server is to provide.
@@ -34,8 +34,8 @@ See \fIsmb.conf\fR for more information.
.TP
\fB-a\fR
This option disables authentication and puts
-\fBswat\fR in demo mode. In that mode anyone will be able to modify
-the \fIsmb.conf\fR file.
+swat in demo mode. In that mode anyone will be able to modify
+the smb.conf file.
\fBDo NOT enable this option on a production
server. \fR
@@ -58,7 +58,7 @@ these in:
.PP
You need to edit your \fI/etc/inetd.conf
\fRand \fI/etc/services\fR
-to enable SWAT to be launched via \fBinetd\fR.
+to enable SWAT to be launched via inetd.
.PP
In \fI/etc/services\fR you need to
add a line like this:
@@ -86,10 +86,10 @@ HUP signal to inetd. To do this use \fBkill -1 PID
\fRwhere PID is the process ID of the inetd daemon.
.SS "LAUNCHING"
.PP
-To launch SWAT just run your favorite web browser and
+To launch swat just run your favorite web browser and
point it at "http://localhost:901/".
.PP
-Note that you can attach to SWAT from any IP connected
+Note that you can attach to swat from any IP connected
machine but connecting from a remote machine leaves your
connection open to password sniffing as passwords will be sent
in the clear over the wire.
@@ -124,8 +124,7 @@ the Samba suite.
.PP
\fBinetd(5)\fR,
\fBsmbd(8)\fR,
-smb.conf(5)
-.SH "AUTHOR"
+smb.conf(5).SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/manpages/testparm.1 b/docs/manpages/testparm.1
index b87c2a29bb2..fbafd57df6b 100644
--- a/docs/manpages/testparm.1
+++ b/docs/manpages/testparm.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "TESTPARM" "1" "22 June 2001" "" ""
+.TH TESTPARM 1 "23 Jun 2001" "testparm 2.2.0a"
.SH NAME
testparm \- check an smb.conf configuration file for internal correctness
.SH SYNOPSIS
@@ -42,7 +42,7 @@ names and before dumping the service definitions.
Print usage message
.TP
\fB-L servername\fR
-Sets the value of the %L macro to \fIservername\fR.
+Sets the value of the %L macro to servername.
This is useful for testing include files specified with the
%L macro.
.TP
@@ -53,7 +53,7 @@ default \fIsmb.conf\fR file will be checked.
.TP
\fBhostname\fR
If this parameter and the following are
-specified, then \fBtestparm\fR will examine the \fIhosts
+specified, then testparm will examine the \fIhosts
allow\fR and \fIhosts deny\fR
parameters in the \fIsmb.conf\fR file to
determine if the hostname with this IP address would be
@@ -73,7 +73,7 @@ file used by \fBsmbd\fR.
.SH "DIAGNOSTICS"
.PP
The program will issue a message saying whether the
-configuration file loaded OK or not. This message may be preceded by
+configuration file loaded OK or not. This message may be preceeded by
errors and warnings if the file did not load. If the file was
loaded OK, the program then dumps all known service details
to stdout.
@@ -84,8 +84,7 @@ the Samba suite.
.SH "SEE ALSO"
.PP
\fIsmb.conf(5)\fR,
-\fBsmbd(8)\fR
-.SH "AUTHOR"
+\fBsmbd(8)\fR.SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/manpages/testprns.1 b/docs/manpages/testprns.1
index 7dee600459a..35e93721845 100644
--- a/docs/manpages/testprns.1
+++ b/docs/manpages/testprns.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "TESTPRNS" "1" "03 May 2001" "" ""
+.TH TESTPRNS 1 "23 Jun 2001" "testprns 2.2.0a"
.SH NAME
testprns \- check printer name for validity with smbd
.SH SYNOPSIS
@@ -74,8 +74,7 @@ the Samba suite.
.PP
\fIprintcap(5)\fR,
\fBsmbd(8)\fR,
-\fBsmbclient(1)\fR
-.SH "AUTHOR"
+\fBsmbclient(1)\fR.SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/manpages/wbinfo.1 b/docs/manpages/wbinfo.1
index 653c8304cd1..5626d97ebd5 100644
--- a/docs/manpages/wbinfo.1
+++ b/docs/manpages/wbinfo.1
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "WBINFO" "1" "22 June 2001" "" ""
+.TH WBINFO 1 "23 Jun 2001" "wbinfo 2.2.0a"
.SH NAME
wbinfo \- Query information from winbind daemon
.SH SYNOPSIS
@@ -86,7 +86,7 @@ NT domain the server is a Primary Domain Controller for.
.PP
The wbinfo program returns 0 if the operation
succeeded, or 1 if the operation failed. If the \fBwinbindd(8)
-\fRdaemon is not working \fBwbinfo\fR will always return
+\fRdaemon is not working wbinfo will always return
failure.
.SH "VERSION"
.PP
@@ -96,7 +96,6 @@ stable release of Samba as of yet.
.SH "SEE ALSO"
.PP
\fBwinbindd(8)\fR
-
.SH "AUTHOR"
.PP
The original Samba software and related utilities
diff --git a/docs/manpages/winbindd.8 b/docs/manpages/winbindd.8
index 5f891021b43..30df97efe51 100644
--- a/docs/manpages/winbindd.8
+++ b/docs/manpages/winbindd.8
@@ -3,7 +3,7 @@
.\" <http://shell.ipoline.com/~elmert/hacks/docbook2X/>
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng <steve@ggi-project.org>.
-.TH "WINBINDD" "8" "22 June 2001" "" ""
+.TH WINBINDD 8 "23 Jun 2001" "winbindd 2.2.0a"
.SH NAME
winbindd \- Name Service Switch daemon for resolving names from NT servers
.SH SYNOPSIS
@@ -24,7 +24,7 @@ Users and groups are allocated as they are resolved to a range
of user and group ids specified by the administrator of the
Samba system.
.PP
-The service provided by \fBwinbindd\fR is called `winbind' and
+The service provided by winbindd is called `winbind' and
can be used to resolve user and group information from a
Windows NT server. The service can also provide authentication
services via an associated PAM module.
@@ -107,7 +107,7 @@ separator so that the unix user names look like
DOMAIN\\username. In some cases this separator character may
cause problems as the '\\' character has special meaning in
unix shells. In that case you can use the winbind separator
-option to specify an alternative separator character. Good
+option to specify an alternative sepataror character. Good
alternatives may be '/' (although that conflicts
with the unix directory separator) or a '+ 'character.
The '+' character appears to be the best choice for 100%
@@ -121,7 +121,7 @@ Example: \fBwinbind separator = + \fR
\fBwinbind uid\fR
The winbind uid parameter specifies the
range of user ids that are allocated by the winbindd daemon.
-This range of ids should have no existing local or NIS users
+This range of ids should have no existing local or nis users
within it as strange conflicts can occur otherwise.
Default: \fBwinbind uid = <empty string>
@@ -131,7 +131,7 @@ Example: \fBwinbind uid = 10000-20000\fR
\fBwinbind gid\fR
The winbind gid parameter specifies the
range of group ids that are allocated by the winbindd daemon.
-This range of group ids should have no existing local or NIS
+This range of group ids should have no existing local or nis
groups within it as strange conflicts can occur otherwise.
Default: \fBwinbind gid = <empty string>
@@ -143,7 +143,7 @@ This parameter specifies the number of
seconds the winbindd daemon will cache user and group information
before querying a Windows NT server again. When a item in the
cache is older than this time winbindd will ask the domain
-controller for the sequence number of the server's account database.
+controller for the sequence number of the servers account database.
If the sequence number has not changed then the cached item is
marked as valid for a further \fIwinbind cache time
\fRseconds. Otherwise the item is fetched from the
@@ -163,7 +163,7 @@ calls to the \fBgetpwent\fR system call will not
return any data.
\fBWarning:\fR Turning off user enumeration
-may cause some programs to behave oddly. For example, the \fBfinger\fR
+may cause some programs to behave oddly. For example, the finger
program relies on having access to the full user list when
searching for matching usernames.
@@ -242,7 +242,7 @@ The next step is to join the domain. To do that use the
\fBsamedit -S '*' -W DOMAIN -UAdministrator\fR
.PP
The username after the \fI-U\fR can be any Domain
-user that has administrator privileges on the machine. Next from
+user that has administrator priviliges on the machine. Next from
within \fBsamedit\fR, run the command:
.PP
\fBcreateuser MACHINE$ -j DOMAIN -L\fR
@@ -250,15 +250,11 @@ within \fBsamedit\fR, run the command:
This assumes your domain is called "DOMAIN" and your Samba
workstation is called "MACHINE".
.PP
-Next copy \fIlibnss_winbind.so\fR to
+Next copy \fIlibnss_winbind.so.2\fR to
\fI/lib\fR and \fIpam_winbind.so\fR
-to \fI/lib/security\fR. A symbolic link needs to be
-made from \fI/lib/libnss_winbind.so\fR to
-\fI/lib/libnss_winbind.so.2\fR. If you are using an
-older version of glibc then the target of the link should be
-\fI/lib/libnss_winbind.so.1\fR.
+to \fI/lib/security\fR.
.PP
-Finally, setup a \fIsmb.conf\fR containing directives like the
+Finally, setup a smb.conf containing directives like the
following:
.PP
.sp
@@ -358,14 +354,13 @@ Storage for cached user and group information.
.PP
This man page is correct for version 2.2 of
the Samba suite. winbindd is however not available in
-the stable release of Samba as of yet.
+stable release of Samba as of yet.
.SH "SEE ALSO"
.PP
\fInsswitch.conf(5)\fR,
samba(7),
wbinfo(1),
-smb.conf(5)
-.SH "AUTHOR"
+smb.conf(5).SH "AUTHOR"
.PP
The original Samba software and related utilities
were created by Andrew Tridgell. Samba is now developed
diff --git a/docs/textdocs/Application_Serving.txt b/docs/textdocs/Application_Serving.txt
index 55125b7bad5..fa0f65f84bd 100644
--- a/docs/textdocs/Application_Serving.txt
+++ b/docs/textdocs/Application_Serving.txt
@@ -1,5 +1,5 @@
!==
-!== Application_Serving.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Application_Serving.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributed: January 7, 1997
Updated: March 24, 1998
diff --git a/docs/textdocs/BROWSING-Config.txt b/docs/textdocs/BROWSING-Config.txt
index 26f55dc4c38..6c0a60286ad 100644
--- a/docs/textdocs/BROWSING-Config.txt
+++ b/docs/textdocs/BROWSING-Config.txt
@@ -1,5 +1,5 @@
!==
-!== BROWSING-Config.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== BROWSING-Config.txt for Samba release 2.2.0a 23 Jun 2001
!==
Date: July 5, 1998
Contributor: John H Terpstra <jht@samba.org>
diff --git a/docs/textdocs/BROWSING.txt b/docs/textdocs/BROWSING.txt
index f041a0c3986..c85af176df5 100644
--- a/docs/textdocs/BROWSING.txt
+++ b/docs/textdocs/BROWSING.txt
@@ -1,5 +1,5 @@
!==
-!== BROWSING.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== BROWSING.txt for Samba release 2.2.0a 23 Jun 2001
!==
Author/s: Many (Thanks to Luke, Jeremy, Andrew, etc.)
Updated: July 5, 1998
diff --git a/docs/textdocs/BUGS.txt b/docs/textdocs/BUGS.txt
index 8dd6b0200f4..f0e466625ec 100644
--- a/docs/textdocs/BUGS.txt
+++ b/docs/textdocs/BUGS.txt
@@ -1,5 +1,5 @@
!==
-!== BUGS.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== BUGS.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Samba Team
Updated: June 27, 1997
diff --git a/docs/textdocs/CVS_ACCESS.txt b/docs/textdocs/CVS_ACCESS.txt
new file mode 100644
index 00000000000..716d06f0a33
--- /dev/null
+++ b/docs/textdocs/CVS_ACCESS.txt
@@ -0,0 +1,124 @@
+!==
+!== CVS_ACCESS.txt for Samba release 2.2.0a 23 Jun 2001
+!==
+Contributor: Modified from the Web pages by Jeremy Allison.
+Date: 23 Dec 1997
+Status: Current
+
+How to get access to Samba source code via cvs.
+===============================================
+
+CVS Access to samba.org
+------------------------------
+
+The machine samba.org runs a publicly accessible CVS
+repository for access to the source code of several packages,
+including samba, rsync and jitterbug. This document describes
+how to get anonymous read-only access to this source code.
+
+Access via cvsweb
+-----------------
+
+You can access the source code via your favourite WWW browser.
+This allows you to access the contents of individual files in
+the repository and also to look at the revision history and
+commit logs of individual files. You can also ask for a diff
+listing between any two versions on the repository.
+
+Use the URL : http://samba.org/cgi-bin/cvsweb
+
+Access via cvs
+--------------
+
+You can also access the source code via a normal cvs client.
+This gives you much more control over you can do with the
+repository and allows you to checkout whole source trees
+and keep them uptodate via normal cvs commands. This is the
+preferred method of access if you are a developer and not
+just a casual browser.
+
+To download the latest cvs source code, point your
+browser at the URL :
+
+http://www.cyclic.com/
+
+and click on the 'How to get cvs' link. CVS is free
+software under the GNU GPL (as is Samba).
+
+To gain access via anonymous cvs use the following steps.
+For this example it is assumed that you want a copy of the
+samba source code. For the other source code repositories
+on this system just substitute the correct package name
+
+1. Install a recent copy of cvs. All you really need is a
+ copy of the cvs client binary.
+
+2. Run the command
+
+ cvs -d :pserver:cvs@samba.org:/cvsroot login
+
+When it asks you for a password type 'cvs' (not including
+the quotes).
+
+3. Run the command
+
+ cvs -d :pserver:cvs@samba.org:/cvsroot co samba
+
+This will create a directory called samba containing the
+latest samba source code. This currently corresponds to the
+1.9.18alpha development tree.
+
+4. Whenever you want to merge in the latest code changes use
+the following command from within the samba directory:
+
+ cvs update -d -P
+
+NOTE: If you instead want the latest source code for the
+1.9.17 stable tree then replace step 4 with the command:
+
+ cvs -d :pserver:cvs@samba.org:/cvsroot co -r BRANCH_1_9_17 samba
+
+Access to the NT DOMAIN Controller code
+---------------------------------------
+
+The Samba PDC code is being separately developed on a
+branch named BRANCH_NTDOM. To gain access to the latest
+source code (this changes daily) do the following:
+
+1). Log onto cvs
+
+ cvs -d :pserver:cvs@samba.org:/cvsroot login
+
+When it asks you for a password type 'cvs' (not including
+the quotes).
+
+2). Check out the BRANCH_NTDOM by typing :
+
+ cvs -d :pserver:cvs@samba.org:/cvsroot co -r BRANCH_NTDOM samba
+
+This will create a directory called samba containing the
+latest snapshot of the domain controller code.
+
+3). To keep this code up to date after it has been
+changed in the cvs repository, cd into the samba
+directory you created above and type :
+
+ cvs update -d -P
+
+How it's done.
+--------------
+
+If you are interested in how anonymous cvs access is set up and
+want to set it up on your own system then you might like to checkout
+the pserver source code using the the command :
+
+ cvs -d :pserver:cvs@samba.org:/cvsroot co pserver
+
+You really have to know what you are doing to do this. Please don't
+email samba@samba.org with basic cvs or unix security questions.
+
+Reporting problems.
+-------------------
+
+If you have any problems with this system please email
+samba@samba.org.
diff --git a/docs/textdocs/DHCP-Server-Configuration.txt b/docs/textdocs/DHCP-Server-Configuration.txt
index 82b54c2f5df..baf45d0603e 100644
--- a/docs/textdocs/DHCP-Server-Configuration.txt
+++ b/docs/textdocs/DHCP-Server-Configuration.txt
@@ -1,9 +1,8 @@
!==
-!== DHCP-Server-Configuration.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== DHCP-Server-Configuration.txt for Samba release 2.2.0a 23 Jun 2001
!==
Subject: DHCP Server Configuration for SMB Clients
Date: March 1, 1998
-Updated: May 15, 2001
Contributor: John H Terpstra <jht@samba.org>
Support: This is an unsupported document. Refer to documentation that is
supplied with the ISC DHCP Server. Do NOT email the contributor
@@ -14,13 +13,13 @@ Background:
===========
We wish to help those folks who wish to use the ISC DHCP Server and provide
-sample configuration settings. Most operating systems today come ship with
-the ISC DHCP Server. ISC DHCP is available from:
+sample configuration settings. Red Hat Linux 5.0 is one operating system that
+comes supplied with the ISC DHCP Server. ISC DHCP is available from
ftp://ftp.isc.org/isc/dhcp
-Incorrect configuration of MS Windows clients (Windows9X, Windows ME, Windows
-NT/2000) will lead to problems with browsing and with general network
-operation. Windows 9X/ME users often report problems where the TCP/IP and related
+Incorrect configuration of MS Windows clients (Windows95, Windows NT Server and
+Workstation) will lead to problems with browsing and with general network
+operation. Windows 95 users often report problems where the TCP/IP and related
network settings will inadvertantly become reset at machine start-up resulting
in loss of configuration settings. This results in increased maintenance
overheads as well as serious user frustration.
@@ -30,8 +29,7 @@ network operating problems to incorrect configuration of Samba.
One user insisted that the only way to provent Windows95 from periodically
performing a full system reset and hardware detection process on start-up was
-to install the NetBEUI protocol in addition to TCP/IP. This assertion is not
-correct.
+to install the NetBEUI protocol in addition to TCP/IP.
In the first place, there is NO need for NetBEUI. All Microsoft Windows clients
natively run NetBIOS over TCP/IP, and that is the only protocol that is
@@ -48,25 +46,6 @@ would have us believe can be experienced with DHCP. In fact, DHCP in covered by
rfc1541 and is a very safe method of keeping an MS Windows desktop environment
under control and for ensuring stable network operation.
-Please note that MS Windows systems as of MS Windows NT 3.1 and MS Windows 95
-store all network configuration settings a registry. There are a few reports
-from MS Windows network administrators that warrant mention here. It would appear
-that when one sets certain MS TCP/IP protocol settings (either directly or via
-DHCP) that these do get written to the registry. Even though a subsequent
-change of setting may occur the old value may persist in the registry. This
-has been known to create serious networking problems.
-
-An example of this occurs when a manual TCP/IP environment is configured to
-include a NetBIOS Scope. In this event, when the administrator then changes the
-configuration of the MS TCP/IP protocol stack, without first deleting the
-current settings, by simply checking the box to configure the MS TCP/IP stack
-via DHCP then the NetBIOS Scope that is still persistent in the registry WILL be
-applied to the resulting DHCP offered settings UNLESS the DHCP server also sets
-a NetBIOS Scope. It may therefore be prudent to forcibly apply a NULL NetBIOS
-Scope from your DHCP server. The can be done in the dhcpd.conf file with the
-parameter:
- option netbios-scope "";
-
While it is true that the Microsoft DHCP server that comes with Windows NT
Server provides only a sub-set of rfc1533 functionality this is hardly an issue
in those sites that already have a large investment and commitment to Unix
@@ -97,12 +76,12 @@ such helper agent is the NetBIOS Name Server (NBNS) or as Microsoft called it
in their Windows NT Server implementation WINS (Windows Internet Name Server).
A client needs to be configured so that it has a unique Machine (Computer)
-Name.
+Name.
This can be done, but needs a few NT registry hacks and you need to be able to
speak UNICODE, which is of course no problem for a True Wizzard(tm) :)
Instructions on how to do this (including a small util for less capable
-Wizzards) can be found at
+Wizzards) can be found at
http://www.unixtools.org/~nneul/sw/nt/dhcp-netbios-hostname.html
@@ -116,19 +95,12 @@ d) DNS Domain Name,
e) DNS Server addresses,
f) WINS (NBNS) Server addresses,
g) IP Forwarding,
-h) Timezone offset,
+h) Timezone offset,
i) Node Type,
-j) NetBIOS Scope
Other assignments can be made from a DHCP server too, but the above cover the
major needs.
-Note: IF ever an entry has has been made to the NetBIOS Scope field of the
-TCP/IP configuration panel on an MS Windows machine, and it has then been
-committed, then that setting may become persistent. In such a c ase it is better
-to configure the DHCP server with a NetBIOS Scope consisting of an empty string
-(ie: A NULL scope).
-
DHCP Server Installation:
=========================
@@ -171,23 +143,19 @@ subnet 172.16.1.0 netmask 255.255.255.0 {
option domain-name "bestnet.com.au";
option time-offset 39600;
option ip-forwarding off;
- option netbios-name-servers 172.16.0.1, 172.16.0.1;
+ option netbios-name-servers 172.16.0.1;
option netbios-dd-server 172.16.0.1;
option netbios-node-type 8;
- option netbios-scope "";
}
-; Note: The above netbios-scope is purposely an empty (NULL) string.
-
group {
next-server 172.16.1.10;
option subnet-mask 255.255.255.0;
option domain-name "bestnet.com.au";
option domain-name-servers 172.16.1.1, 172.16.0.2;
- option netbios-name-servers 172.16.0.1, 172.16.0.1;
+ option netbios-name-servers 172.16.0.1;
option netbios-dd-server 172.16.0.1;
option netbios-node-type 8;
- option netbios-scope "SomeCrazyScope";
option routers 172.16.1.240;
option time-offset 39600;
host lexmark1 {
@@ -209,7 +177,7 @@ You can do this by typing: cp /dev/null /etc/dhcpd.leases
Setting up a route table for all-ones addresses:
================================================
-Quoting from the README file that comes with the ISC DHCPD Server:
+Quoting from the README file that comes with th eISC DHCPD Server:
BROADCAST
diff --git a/docs/textdocs/DIAGNOSIS.txt b/docs/textdocs/DIAGNOSIS.txt
index 5ca1743a23a..dd7c9c8e332 100644
--- a/docs/textdocs/DIAGNOSIS.txt
+++ b/docs/textdocs/DIAGNOSIS.txt
@@ -1,5 +1,5 @@
!==
-!== DIAGNOSIS.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== DIAGNOSIS.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Andrew Tridgell
Updated: November 1, 1999
diff --git a/docs/textdocs/DNIX.txt b/docs/textdocs/DNIX.txt
index fed77b939b4..df81f547024 100644
--- a/docs/textdocs/DNIX.txt
+++ b/docs/textdocs/DNIX.txt
@@ -1,5 +1,5 @@
!==
-!== DNIX.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== DNIX.txt for Samba release 2.2.0a 23 Jun 2001
!==
DNIX has a problem with seteuid() and setegid(). These routines are
needed for Samba to work correctly, but they were left out of the DNIX
diff --git a/docs/textdocs/DOMAIN.txt b/docs/textdocs/DOMAIN.txt
new file mode 100644
index 00000000000..beaaa94e636
--- /dev/null
+++ b/docs/textdocs/DOMAIN.txt
@@ -0,0 +1,381 @@
+!==
+!== DOMAIN.txt for Samba release 2.2.0a 23 Jun 2001
+!==
+Contributor: Samba Team
+Updated: December 4, 1998 (John H Terpstra)
+
+Subject: Network Logons and Roaming (Roving) Profiles
+===========================================================================
+
+A domain and a workgroup are exactly the same thing in terms of network
+browsing. The difference is that a distributable authentication
+database is associated with a domain, for secure login access to a
+network. Also, different access rights can be granted to users if they
+successfully authenticate against a domain logon server (samba does not
+support this, but NT server and other systems based on NT server do).
+
+As of samba-2.0.0 this is now a work in progress that is expected to
+mature rapidly. Since this document pre-dates samba-2.0.0 it should be
+read from the perspective of it's origins but the reader should understand
+that the following details may NOT be up to date with current development.
+
+The SMB client logging on to a domain has an expectation that every other
+server in the domain should accept the same authentication information.
+However the network browsing functionality of domains and workgroups is
+identical and is explained in BROWSING.txt.
+
+Issues related to the single-logon network model are discussed in this
+document. Samba supports domain logons, network logon scripts, and user
+profiles for MS Windows for workgroups and MS Windows 9X clients.
+
+Work is underway to support domain logon for MS Windows NT clients - this
+is mostly working but will undergo much change as the the behaviour of the
+new code matures and becomes easier to manage.
+
+Support is also not complete. Samba does not yet support the sharing
+of the Windows NT-style SAM database with other systems. However this is
+only one way of having a shared user database: exactly the same effect can
+be achieved by having all servers in a domain share a distributed NIS or
+Kerberos authentication database.
+
+When an SMB client in a domain wishes to logon it broadcast requests for a
+logon server. The first one to reply gets the job, and validates its
+password using whatever mechanism the Samba administrator has installed.
+It is possible (but very stupid) to create a domain where the user
+database is not shared between servers, ie they are effectively workgroup
+servers advertising themselves as participating in a domain. This
+demonstrates how authentication is quite different from but closely
+involved with domains.
+
+Another thing commonly associated with single-logon domains is remote
+administration over the SMB protocol. Again, there is no reason why this
+cannot be implemented with an underlying username database which is
+different from the Windows NT SAM. Support for the Remote Administration
+Protocol is planned for a future release of Samba.
+
+The domain support works for WfWg, and Win95 clients and NT 4.0 and 3.51.
+Domain support is currently at an early experimental stage for NT 4.0 and
+NT 3.51. Support for Windows OS/2 clients is still being worked on and is
+still experimental.
+
+Support for profiles is confirmed as working for Win95, NT 4.0 and NT 3.51.
+It is possible to specify: the profile location; script file to be loaded
+on login; the user's home directory; and for NT a kick-off time could also
+now easily be supported.
+
+With NT Workstations, all this does not require the use or intervention of
+an NT 4.0 or NT 3.51 server: Samba can now replace the logon services
+provided by an NT server, to a limited and experimental degree (for example,
+running "User Manager for Domains" will not provide you with access to
+a domain created by a Samba Server).
+
+With Win95, the help of an NT server can be enlisted, both for profile storage
+and for user authentication. For details on user authentication, see
+security_level.txt. For details on profile storage, see below.
+
+
+Using these features you can make your clients verify their logon via
+the Samba server; make clients run a batch file when they logon to
+the network and download their preferences, desktop and start menu.
+
+
+Configuration Instructions: Network Logons
+==============================================
+
+To use domain logons and profiles you need to do the following:
+
+
+1) Setup nmbd and smbd by configuring smb.conf so that Samba is
+ acting as the master browser. See <your OS>_INSTALL.txt and BROWSING.txt
+ for details.
+
+2) Setup a WINS server (see NetBIOS.txt) and configure all your clients
+ to use that WINS service.
+
+3) Create a share called [netlogon] in your smb.conf. This share should
+ be readable by all users, and probably should not be writeable. This
+ share will hold your network logon scripts, and the CONFIG.POL file
+ (Note: for details on the CONFIG.POL file, how to use it, what it is,
+ refer to the Microsoft Windows NT Administration documentation.
+ The format of these files is not known, so you will need to use
+ Microsoft tools).
+
+For example I have used:
+
+ [netlogon]
+ path = /data/dos/netlogon
+ writeable = no
+ guest ok = no
+
+Note that it is important that this share is not writeable by ordinary
+users, in a secure environment: ordinary users should not be allowed
+to modify or add files that another user's computer would then download
+when they log in.
+
+4) in the [global] section of smb.conf set the following:
+
+ domain logons = yes
+ logon script = %U.bat
+
+The choice of batch file is, of course, up to you. The above would
+give each user a separate batch file as the %U will be changed to
+their username automatically. The other standard % macros may also be
+used. You can make the batch files come from a subdirectory by using
+something like:
+
+ logon script = scripts\%U.bat
+
+5) create the batch files to be run when the user logs in. If the batch
+ file doesn't exist then no batch file will be run.
+
+In the batch files you need to be careful to use DOS style cr/lf line
+endings. If you don't then DOS may get confused. I suggest you use a
+DOS editor to remotely edit the files if you don't know how to produce
+DOS style files under unix.
+
+6) Use smbclient with the -U option for some users to make sure that
+ the \\server\NETLOGON share is available, the batch files are
+ visible and they are readable by the users.
+
+7) you will probabaly find that your clients automatically mount the
+ \\SERVER\NETLOGON share as drive z: while logging in. You can put
+ some useful programs there to execute from the batch files.
+
+NOTE: You must be using "security = user" or "security = server" for
+domain logons to work correctly. Share level security won't work
+correctly.
+
+
+
+Configuration Instructions: Setting up Roaming User Profiles
+================================================================
+
+In the [global] section of smb.conf set the following (for example):
+
+ logon path = \\profileserver\profileshare\profilepath\%U\moreprofilepath
+
+The default for this option is \\%N\%U\profile, namely
+\\sambaserver\username\profile. The \\N%\%U service is created
+automatically by the [homes] service.
+
+If you are using a samba server for the profiles, you _must_ make the
+share specified in the logon path browseable. Windows 95 appears to
+check that it can see the share and any subdirectories within that share
+specified by the logon path option, rather than just connecting straight
+away. It also attempts to create the components of the full path for
+you. If the creation of any component fails, or if it cannot see any
+component of the path, the profile creation / reading fails.
+
+[lkcl 26aug96 - we have discovered a problem where Windows clients can
+maintain a connection to the [homes] share in between logins. The
+[homes] share must NOT therefore be used in a profile path.]
+
+
+Windows 95
+----------
+
+When a user first logs in on Windows 95, the file user.DAT is created,
+as are folders "Start Menu", "Desktop", "Programs" and "Nethood".
+These directories and their contents will be merged with the local
+versions stored in c:\windows\profiles\username on subsequent logins,
+taking the most recent from each. You will need to use the [global]
+options "preserve case = yes", "short case preserve = yes" and
+"case sensitive = no" in order to maintain capital letters in shortcuts
+in any of the profile folders.
+
+The user.DAT file contains all the user's preferences. If you wish to
+enforce a set of preferences, rename their user.DAT file to user.MAN,
+and deny them write access to this file.
+
+2) On the Windows 95 machine, go to Control Panel | Passwords and
+ select the User Profiles tab. Select the required level of
+ roaming preferences. Press OK, but do _not_ allow the computer
+ to reboot.
+
+3) On the Windows 95 machine, go to Control Panel | Network |
+ Client for Microsoft Networks | Preferences. Select 'Log on to
+ NT Domain'. Then, ensure that the Primary Logon is 'Client for
+ Microsoft Networks'. Press OK, and this time allow the computer
+ to reboot.
+
+Under Windows 95, Profiles are downloaded from the Primary Logon.
+If you have the Primary Logon as 'Client for Novell Networks', then
+the profiles and logon script will be downloaded from your Novell
+Server. If you have the Primary Logon as 'Windows Logon', then the
+profiles will be loaded from the local machine - a bit against the
+concept of roaming profiles, if you ask me.
+
+You will now find that the Microsoft Networks Login box contains
+[user, password, domain] instead of just [user, password]. Type in
+the samba server's domain name (or any other domain known to exist,
+but bear in mind that the user will be authenticated against this
+domain and profiles downloaded from it, if that domain logon server
+supports it), user name and user's password.
+
+Once the user has been successfully validated, the Windows 95 machine
+will inform you that 'The user has not logged on before' and asks you
+if you wish to save the user's preferences? Select 'yes'.
+
+Once the Windows 95 client comes up with the desktop, you should be able
+to examine the contents of the directory specified in the "logon path"
+on the samba server and verify that the "Desktop", "Start Menu",
+"Programs" and "Nethood" folders have been created.
+
+These folders will be cached locally on the client, and updated when
+the user logs off (if you haven't made them read-only by then :-).
+You will find that if the user creates further folders or short-cuts,
+that the client will merge the profile contents downloaded with the
+contents of the profile directory already on the local client, taking
+the newest folders and short-cuts from each set.
+
+If you have made the folders / files read-only on the samba server,
+then you will get errors from the w95 machine on logon and logout, as
+it attempts to merge the local and the remote profile. Basically, if
+you have any errors reported by the w95 machine, check the unix file
+permissions and ownership rights on the profile directory contents,
+on the samba server.
+
+
+If you have problems creating user profiles, you can reset the user's
+local desktop cache, as shown below. When this user then next logs in,
+they will be told that they are logging in "for the first time".
+
+
+1) instead of logging in under the [user, password, domain] dialog],
+ press escape.
+
+2) run the regedit.exe program, and look in:
+
+ HKEY_LOCAL_MACHINE\Windows\CurrentVersion\ProfileList
+
+ you will find an entry, for each user, of ProfilePath. Note the
+ contents of this key (likely to be c:\windows\profiles\username),
+ then delete the key ProfilePath for the required user.
+
+ [Exit the registry editor].
+
+3) WARNING - before deleting the contents of the directory listed in
+ the ProfilePath (this is likely to be c:\windows\profiles\username),
+ ask them if they have any important files stored on their desktop
+ or in their start menu. delete the contents of the directory
+ ProfilePath (making a backup if any of the files are needed).
+
+ This will have the effect of removing the local (read-only hidden
+ system file) user.DAT in their profile directory, as well as the
+ local "desktop", "nethood", "start menu" and "programs" folders.
+
+4) search for the user's .PWL password-cacheing file in the c:\windows
+ directory, and delete it.
+
+5) log off the windows 95 client.
+
+6) check the contents of the profile path (see "logon path" described
+ above), and delete the user.DAT or user.MAN file for the user,
+ making a backup if required.
+
+
+If all else fails, increase samba's debug log levels to between 3 and 10,
+and / or run a packet trace program such as tcpdump or netmon.exe, and
+look for any error reports.
+
+If you have access to an NT server, then first set up roaming profiles
+and / or netlogons on the NT server. Make a packet trace, or examine
+the example packet traces provided with NT server, and see what the
+differences are with the equivalent samba trace.
+
+
+Windows NT Workstation 4.0
+--------------------------
+
+When a user first logs in to a Windows NT Workstation, the profile
+NTuser.DAT is created. The profile location can be now specified
+through the "logon path" parameter, in exactly the same way as it
+can for Win95. [lkcl 10aug97 - i tried setting the path to
+\\samba-server\homes\profile, and discovered that this fails because
+a background process maintains the connection to the [homes] share
+which does _not_ close down in between user logins. you have to
+have \\samba-server\%L\profile, where user is the username created
+from the [homes] share].
+
+There is a parameter that is now available for use with NT Profiles:
+"logon drive". This should be set to "h:" or any other drive, and
+should be used in conjunction with the new "logon home" parameter.
+
+The entry for the NT 4.0 profile is a _directory_ not a file. The NT
+help on profiles mentions that a directory is also created with a .PDS
+extension. The user, while logging in, must have write permission to
+create the full profile path (and the folder with the .PDS extension)
+[lkcl 10aug97 - i found that the creation of the .PDS directory failed,
+and had to create these manually for each user, with a shell script.
+also, i presume, but have not tested, that the full profile path must
+be browseable just as it is for w95, due to the manner in which they
+attempt to create the full profile path: test existence of each path
+component; create path component].
+
+In the profile directory, NT creates more folders than 95. It creates
+"Application Data" and others, as well as "Desktop", "Nethood",
+"Start Menu" and "Programs". The profile itself is stored in a file
+NTuser.DAT. Nothing appears to be stored in the .PDS directory, and
+its purpose is currently unknown.
+
+You can use the System Control Panel to copy a local profile onto
+a samba server (see NT Help on profiles: it is also capable of firing
+up the correct location in the System Control Panel for you). The
+NT Help file also mentions that renaming NTuser.DAT to NTuser.MAN
+turns a profile into a mandatory one.
+
+[lkcl 10aug97 - i notice that NT Workstation tells me that it is
+downloading a profile from a slow link. whether this is actually the
+case, or whether there is some configuration issue, as yet unknown,
+that makes NT Workstation _think_ that the link is a slow one is a
+matter to be resolved].
+
+[lkcl 20aug97 - after samba digest correspondance, one user found, and
+another confirmed, that profiles cannot be loaded from a samba server
+unless "security = user" and "encrypt passwords = yes" (see the file
+ENCRYPTION.txt) or "security = server" and "password server = ip.address.
+of.yourNTserver" are used. either of these options will allow the NT
+workstation to access the samba server using LAN manager encrypted
+passwords, without the user intervention normally required by NT
+workstation for clear-text passwords].
+
+[lkcl 25aug97 - more comments received about NT profiles: the case of
+the profile _matters_. the file _must_ be called NTuser.DAT or, for
+a mandatory profile, NTuser.MAN].
+
+
+Windows NT Server
+-----------------
+
+There is nothing to stop you specifying any path that you like for the
+location of users' profiles. Therefore, you could specify that the
+profile be stored on a samba server, or any other SMB server, as long as
+that SMB server supports encrypted passwords.
+
+
+
+Sharing Profiles between W95 and NT Workstation 4.0
+---------------------------------------------------
+
+The default logon path is \\%N\U%. NT Workstation will attempt to create
+a directory "\\samba-server\username.PDS" if you specify the logon path
+as "\\samba-server\username" with the NT User Manager. Therefore, you
+will need to specify (for example) "\\samba-server\username\profile".
+NT 4.0 will attempt to create "\\samba-server\username\profile.PDS", which
+is more likely to succeed.
+
+If you then want to share the same Start Menu / Desktop with W95, you will
+need to specify "logon path = \\samba-server\username\profile" [lkcl 10aug97
+this has its drawbacks: i created a shortcut to telnet.exe, which attempts
+to run from the c:\winnt\system32 directory. this directory is obviously
+unlikely to exist on a Win95-only host].
+
+If you have this set up correctly, you will find separate user.DAT and
+NTuser.DAT files in the same profile directory.
+
+[lkcl 25aug97 - there are some issues to resolve with downloading of
+NT profiles, probably to do with time/date stamps. i have found that
+NTuser.DAT is never updated on the workstation after the first time that
+it is copied to the local workstation profile directory. this is in
+contrast to w95, where it _does_ transfer / update profiles correctly].
+
diff --git a/docs/textdocs/Faxing.txt b/docs/textdocs/Faxing.txt
index eb4e5f58a1a..e0e91766ebe 100644
--- a/docs/textdocs/Faxing.txt
+++ b/docs/textdocs/Faxing.txt
@@ -1,5 +1,5 @@
!==
-!== Faxing.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Faxing.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Gerhard Zuber <zuber@berlin.snafu.de>
Date: August 5th 1997.
diff --git a/docs/textdocs/GOTCHAS.txt b/docs/textdocs/GOTCHAS.txt
index afa5f8f4542..0075cb9f727 100644
--- a/docs/textdocs/GOTCHAS.txt
+++ b/docs/textdocs/GOTCHAS.txt
@@ -1,5 +1,5 @@
!==
-!== GOTCHAS.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== GOTCHAS.txt for Samba release 2.2.0a 23 Jun 2001
!==
This file lists Gotchas to watch out for:
=========================================================================
diff --git a/docs/textdocs/HINTS.txt b/docs/textdocs/HINTS.txt
index 5b0854b36e5..6da45bb3f91 100644
--- a/docs/textdocs/HINTS.txt
+++ b/docs/textdocs/HINTS.txt
@@ -1,5 +1,5 @@
!==
-!== HINTS.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== HINTS.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Many
Updated: Not for a long time!
diff --git a/docs/textdocs/Imprints.txt b/docs/textdocs/Imprints.txt
index 025381166b1..24cdfddff85 100644
--- a/docs/textdocs/Imprints.txt
+++ b/docs/textdocs/Imprints.txt
@@ -1,5 +1,5 @@
!==
-!== Imprints.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Imprints.txt for Samba release 2.2.0a 23 Jun 2001
!==
==================================================================
diff --git a/docs/textdocs/MIRRORS.txt b/docs/textdocs/MIRRORS.txt
new file mode 100755
index 00000000000..746e4d03088
--- /dev/null
+++ b/docs/textdocs/MIRRORS.txt
@@ -0,0 +1,6 @@
+!==
+!== MIRRORS.txt for Samba release 2.2.0a 23 Jun 2001
+!==
+
+For a list of web and ftp mirrors please see
+http://samba.org/samba/
diff --git a/docs/textdocs/Macintosh_Clients.txt b/docs/textdocs/Macintosh_Clients.txt
index c6b35811643..e7f4f0badfa 100644
--- a/docs/textdocs/Macintosh_Clients.txt
+++ b/docs/textdocs/Macintosh_Clients.txt
@@ -1,5 +1,5 @@
!==
-!== Macintosh_Clients.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Macintosh_Clients.txt for Samba release 2.2.0a 23 Jun 2001
!==
> Are there any Macintosh clients for Samba?
diff --git a/docs/textdocs/outdated/NTDOMAIN.txt b/docs/textdocs/NTDOMAIN.txt
index 20510519462..e267865b4d5 100644
--- a/docs/textdocs/outdated/NTDOMAIN.txt
+++ b/docs/textdocs/NTDOMAIN.txt
@@ -1,5 +1,5 @@
!==
-!== NTDOMAIN.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== NTDOMAIN.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Luke Kenneth Casson Leighton (samba@samba.org)
Copyright (C) 1997 Luke Kenneth Casson Leighton
diff --git a/docs/textdocs/NetBIOS.txt b/docs/textdocs/NetBIOS.txt
index 866ec82a727..b434b924714 100644
--- a/docs/textdocs/NetBIOS.txt
+++ b/docs/textdocs/NetBIOS.txt
@@ -1,5 +1,5 @@
!==
-!== NetBIOS.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== NetBIOS.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: lkcl - samba@samba.org
Copyright 1997 Luke Kenneth Casson Leighton
diff --git a/docs/textdocs/outdated/PRINTER_DRIVER.txt b/docs/textdocs/PRINTER_DRIVER.txt
index c8bfd7c7a4d..a402b5f2888 100644
--- a/docs/textdocs/outdated/PRINTER_DRIVER.txt
+++ b/docs/textdocs/PRINTER_DRIVER.txt
@@ -1,5 +1,5 @@
!==
-!== PRINTER_DRIVER.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== PRINTER_DRIVER.txt for Samba release 2.2.0a 23 Jun 2001
!==
==========================================================================
Supporting the famous PRINTER$ share
diff --git a/docs/textdocs/PROFILES.txt b/docs/textdocs/PROFILES.txt
index 69fec36f08b..50138493934 100644
--- a/docs/textdocs/PROFILES.txt
+++ b/docs/textdocs/PROFILES.txt
@@ -1,5 +1,5 @@
!==
-!== PROFILES.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== PROFILES.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributors: Bruce Cook <BC3-AU@bigfoot.com>
Copyright (C) 1998 Bruce Cook
diff --git a/docs/textdocs/outdated/PROJECTS b/docs/textdocs/PROJECTS
index b962b503f2e..b962b503f2e 100644
--- a/docs/textdocs/outdated/PROJECTS
+++ b/docs/textdocs/PROJECTS
diff --git a/docs/textdocs/Passwords.txt b/docs/textdocs/Passwords.txt
index 1f5407eec81..31df25e8f9e 100644
--- a/docs/textdocs/Passwords.txt
+++ b/docs/textdocs/Passwords.txt
@@ -1,5 +1,5 @@
!==
-!== Passwords.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Passwords.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Unknown
Date: Updated April 19th 1999.
diff --git a/docs/textdocs/Printing.txt b/docs/textdocs/Printing.txt
index dc713d6180a..a24ba171137 100644
--- a/docs/textdocs/Printing.txt
+++ b/docs/textdocs/Printing.txt
@@ -1,5 +1,5 @@
!==
-!== Printing.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Printing.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Unknown <samba@samba.org>
Revised by: Patrick Powell <papowell@lprng.org>
diff --git a/docs/textdocs/Recent-FAQs.txt b/docs/textdocs/Recent-FAQs.txt
index 6e614abed1a..50e8aba8245 100644
--- a/docs/textdocs/Recent-FAQs.txt
+++ b/docs/textdocs/Recent-FAQs.txt
@@ -1,5 +1,5 @@
!==
-!== Recent-FAQs.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Recent-FAQs.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Samba-bugs@samba.org
Date: July 5, 1998
diff --git a/docs/textdocs/RoutedNetworks.txt b/docs/textdocs/RoutedNetworks.txt
index aea9fd77db7..039fc881ba2 100644
--- a/docs/textdocs/RoutedNetworks.txt
+++ b/docs/textdocs/RoutedNetworks.txt
@@ -1,5 +1,5 @@
!==
-!== RoutedNetworks.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== RoutedNetworks.txt for Samba release 2.2.0a 23 Jun 2001
!==
#NOFNR Flag in LMHosts to Communicate Across Routers
diff --git a/docs/textdocs/SCO.txt b/docs/textdocs/SCO.txt
index 9d10d6b233e..e458a7bd8fd 100644
--- a/docs/textdocs/SCO.txt
+++ b/docs/textdocs/SCO.txt
@@ -1,5 +1,5 @@
!==
-!== SCO.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== SCO.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Geza Makay <makayg@math.u-szeged.hu>
Date: Unknown
diff --git a/docs/textdocs/SSLeay.txt b/docs/textdocs/SSLeay.txt
index 7d1b8dc1dff..88013925ab8 100644
--- a/docs/textdocs/SSLeay.txt
+++ b/docs/textdocs/SSLeay.txt
@@ -1,5 +1,5 @@
!==
-!== SSLeay.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== SSLeay.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Christian Starkjohann <cs@obdev.at>
Date: May 29, 1998
diff --git a/docs/textdocs/Speed.txt b/docs/textdocs/Speed.txt
index 325376ac250..dd1639da867 100644
--- a/docs/textdocs/Speed.txt
+++ b/docs/textdocs/Speed.txt
@@ -1,5 +1,5 @@
!==
-!== Speed.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Speed.txt for Samba release 2.2.0a 23 Jun 2001
!==
Subject: Samba performance issues
diff --git a/docs/textdocs/Speed2.txt b/docs/textdocs/Speed2.txt
index cbdce761de5..edc5f4e4b41 100644
--- a/docs/textdocs/Speed2.txt
+++ b/docs/textdocs/Speed2.txt
@@ -1,5 +1,5 @@
!==
-!== Speed2.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Speed2.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Paul Cochrane <paulc@dth.scot.nhs.uk>
Organization: Dundee Limb Fitting Centre
diff --git a/docs/textdocs/Support.txt b/docs/textdocs/Support.txt
new file mode 100644
index 00000000000..66860d34abc
--- /dev/null
+++ b/docs/textdocs/Support.txt
@@ -0,0 +1,8 @@
+!==
+!== Support.txt for Samba release 2.2.0a 23 Jun 2001
+!==
+The Samba Consultants List
+==========================
+
+This list has now moved to the support page of the
+Samba web pages at http://samba.org/samba/
diff --git a/docs/textdocs/Tracing.txt b/docs/textdocs/Tracing.txt
index 96d863d0742..926f9da5e93 100644
--- a/docs/textdocs/Tracing.txt
+++ b/docs/textdocs/Tracing.txt
@@ -1,5 +1,5 @@
!==
-!== Tracing.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Tracing.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Andrew Tridgell <samba@samba.org>
Date: Old
diff --git a/docs/textdocs/UNIX-SMB.txt b/docs/textdocs/UNIX-SMB.txt
index 5c6d5b8c813..dfc8efb64e6 100644
--- a/docs/textdocs/UNIX-SMB.txt
+++ b/docs/textdocs/UNIX-SMB.txt
@@ -1,5 +1,5 @@
!==
-!== UNIX-SMB.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== UNIX-SMB.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Andrew Tridgell <samba@samba.org>
Date: April 1995
diff --git a/docs/textdocs/UNIX_SECURITY.txt b/docs/textdocs/UNIX_SECURITY.txt
index 84f8fad27fd..200e0895b81 100644
--- a/docs/textdocs/UNIX_SECURITY.txt
+++ b/docs/textdocs/UNIX_SECURITY.txt
@@ -1,5 +1,5 @@
!==
-!== UNIX_SECURITY.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== UNIX_SECURITY.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: John H Terpstra <jht@samba.org>
Date: July 5, 1998
diff --git a/docs/textdocs/Win95.txt b/docs/textdocs/Win95.txt
index 911fddf427a..157f9a90a78 100644
--- a/docs/textdocs/Win95.txt
+++ b/docs/textdocs/Win95.txt
@@ -1,5 +1,5 @@
!==
-!== Win95.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== Win95.txt for Samba release 2.2.0a 23 Jun 2001
!==
Copyright (C) 1997 - Samba-Team
Contributed Date: August 20, 1997
diff --git a/docs/textdocs/WinNT.txt b/docs/textdocs/WinNT.txt
index c7d41a4114a..03fad0e3997 100644
--- a/docs/textdocs/WinNT.txt
+++ b/docs/textdocs/WinNT.txt
@@ -1,5 +1,5 @@
!==
-!== WinNT.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== WinNT.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributors: Various
Password Section - Copyright (C) 1997 - John H Terpstra
diff --git a/docs/textdocs/cifsntdomain.txt b/docs/textdocs/cifsntdomain.txt
index 91d032b1695..1cb53dbdcce 100644
--- a/docs/textdocs/cifsntdomain.txt
+++ b/docs/textdocs/cifsntdomain.txt
@@ -1,5 +1,5 @@
!==
-!== cifsntdomain.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== cifsntdomain.txt for Samba release 2.2.0a 23 Jun 2001
!==
NT Domain Authentication
------------------------
diff --git a/docs/textdocs/samba-pdc-faq.txt b/docs/textdocs/samba-pdc-faq.txt
new file mode 100644
index 00000000000..ede39e1be54
--- /dev/null
+++ b/docs/textdocs/samba-pdc-faq.txt
@@ -0,0 +1,996 @@
+!==
+!== samba-pdc-faq.txt for Samba release 2.2.0a 23 Jun 2001
+!==
+
+The Samba 2.2 PDC FAQ
+
+David Bannon
+
+ La Trobe University
+ _________________________________________________________________
+ _________________________________________________________________
+
+ Comments, corrections and additions to <D.Bannon@samba.org>
+
+ Note: Please read the Introduction for the current state of play.
+
+ This is the FAQ for Samba 2.2 as an NTDomain controller. This document
+ is derived from the origional FAQ that was built and maintained by
+ Gerald Carter from the early days of Samba NTDomain development up
+ until recently. It is now being updated as significent changes are
+ made to 2.2.0.
+
+ Please note it does not apply to Samba2.2alpha0, Samba2.2alpha1, Samba
+ 2.0.7, TNG nor HEAD branch.
+
+ I'll repeat, it does not apply to the current snapshot [ftp
+ mirror]:/pub/samba/alpha/samba-2.2.0-alpha1.tar.gz, only to the to the
+ current cvs.
+
+ Also available is a Samba 2.2 PDC HowTo that takes you, step by step,
+ over the process of setting up a very basic Samba 2.2 Primary Domain
+ Controller
+
+ Table of Contents
+ 1. Introduction
+
+ State of Play
+ Introduction
+
+ 2. General Information
+
+ What can we do ?
+
+ What can Samba Primary Domain Controller (PDC) do ?
+ Can I have a Windows 2000 client logon to a Samba
+ controlled domain?
+
+ Can a samba server join a Win2000 domain ?
+ What's the status of print spool (spoolss) support in the
+ NTDOM code?
+
+ CVS
+
+ What are the different Samba branches available in CVS ?
+ What are the CVS commands ?
+
+ 3. Establishing Connections
+
+ How do I get my NT4 or W2000 Workstation to login to the
+ Samba controlled Domain?
+
+ What is a 'machine account' ?
+ "The machine account for this computer either does not
+ exist or is not accessable."
+
+ How do I create machine accounts manually ?
+ I cannot include a '$' in a machine name.
+ I get told "You already have a connection to the
+ Domain...." when creating a machine account.
+
+ I get told "Cannot join domain, the credentials supplied
+ conflict with an existing set.."
+
+ "The system can not log you on (C000019B)...."
+
+ 4. User Account Management
+
+ Domain Admins
+
+ How do I configure an account as a domain administrator?
+
+ Profiles
+
+ Why is it bad to set "logon path = \\%N\%U\profile" in
+ smb.conf? ?
+
+ Why are all the users listed in the "domain admin users"
+ using the same profile?
+
+ The roaming profiles do not seem to be updating on the
+ server.
+
+ Is it possible to store the users profile on workstation
+ and not on server?
+
+ Policies
+
+ What are 'Policies' ?.
+ I can't get system policies to work.
+ What about Windows NT Policy Editor ?
+ Can Win95 do Policies ?
+
+ Passwords
+
+ What is password sync and should I use it ?
+ How do I get remote password (unix and SMB) changing
+ working ?
+
+ 5. Miscellaneous
+
+ How do I send a message to a PC running windows from a
+ samba server ?
+
+ What editor can I use in DOS/Windows that won't mess with
+ my unix EOF
+
+ How do I get 'User Manager' and 'Server Manager'
+ Can I make my samba server a Time server too ?
+ The time setting from a Samba server does not work.
+ "trust account xxx should be in DOMAIN_GROUP_RID_USERS"
+ How do I get my samba server to become a member ( not PDC )
+ of an NT domain?
+
+ 6. Troubleshooting and Bug Reporting
+
+ Diagnostic tools
+
+ What are some diagnostics tools I can use to debug the
+ domain logon process and where can I find them?
+
+ How do I install 'Network Monitor' on an NT Workstation or
+ a Windows 9x box?
+
+ What other help can I get ?
+
+ URLs and similar
+ How do I get help from the mailing lists ?
+ How do I get off the mailing lists ?
+ _________________________________________________________________
+
+Chapter 1. Introduction
+
+State of Play
+
+ It should be noted that 2.2.0 in its pre-release form still has a few
+ problems, I'll try and keep this section current while things are
+ still dynamic. At the time of this update (December 15, 2000) the
+ current state of play is :
+
+ Comments here about W2K joining the domain apply only to Samba 2.2
+ from the CVS after November 27th. The 'snapshot' release
+ Samba2.2alpha1 (typically obtained via FTP) does not work !!! See
+ below on how to get a CVS tree.
+
+ Bug ListI would really appriciate some confirmation that some of these
+ bugs are fixed. I don't have a usefull test setup at present so need a
+ bit of feedback.
+
+ Know Bug ?There has been a suggestion that some of the problems that
+ some people have experienced may be due to using gcc from RedHat 7.0.
+ The alternative is to use kgcc - feedback desperatly needed !
+
+ Known Bug !W2K machines will not successfully join a domain with a
+ name that is made up from an even number of characters. Yep, thats
+ right ! BIOTEST is OK as is MYDOMAI but MYDOMAIN will not work until
+ this bug is fixed. Hmm.., we believe that this bug is fixed, but see
+ below.
+
+ Known Bug !After some bugs were fixed just before Christmas, W2K SP1
+ machines cannot join the domain. Expected to be fixed early in the new
+ year. Whats that ? yeah, samba developers have a Christmas break too !
+
+ Know Bug !NTs (and possibly W2K ?) are not told the logged on user is
+ a domain admin if the parameter "domain admin users = user" is used.
+ The alternative, "domain admin group" does work. See the HowTo.
+
+ Client Side creation of Machine accounts does work but is not
+ complete. Firstly, the add user script runs as the user who's name was
+ entered, not as root. Secondly, the machine name passed to the script
+ (%U) has an underscore at the end, not a '$'. One alternative is to
+ use %m and add the $. This method is documented in the HowTo. And
+ thirdly, it does not work with NT4ws.
+
+ A W2K machine can join the domain. See the HowTo which explains the
+ process. The methods described are 'work arounds' and should be
+ regarded as temporary. Although I (drb) have tested these procedures a
+ number of people have had difficulty so there may be other issues at
+ work. JFM is aware of these problems and will attend to them when he
+ can.
+
+ A Domain Admin account is required and at present it appears that only
+ root is a suitable candidate.
+
+ Much of the related code does work. For example, if an NT is removed
+ from the domain and then rejoins, the Create a Computer Account in the
+ Domain dialog will let you reset the smbpasswd. That is you don't need
+ to do it from the unix box. However, at the present, you do need to
+ have root as an administrator and use the root user name and password.
+
+ Actually I'm not sure that last paragraph is correct ....
+
+ Policies do work on a W2K machine. MS says that recent builds of W2K
+ dont observe an NT policy but it appears it does in 'legacy' mode.
+ _________________________________________________________________
+
+Introduction
+
+ This FAQ was origionally compiled by Jerry Carter (gc) chiefly dealing
+ with the 'old head' version of Samba and its NTDomain facilities. It
+ is being rewritten by David Bannon (drb) so that it addresses more
+ accurately the Samba 2.2 planned for release late 2000.
+
+ This document probably still contains some material that does not
+ apply to Samba 2.2 but most (all?) of the really misleading stuff has
+ been removed. Some issues are not dealt with or are dealt with badly.
+ Please send corrections and additions to David Bannon at
+ D.Bannon@latrobe.edu.au
+
+ Hopefully, as we all become familiar with the Samba 2.2 as a PDC this
+ document will become much more usefull.
+ _________________________________________________________________
+
+Chapter 2. General Information
+
+What can we do ?
+
+What can Samba Primary Domain Controller (PDC) do ?
+
+ If you wish to have Samba act as a PDC for Windows NT 3.51.and 4.0 or
+ W2000 client, then you will need to obtain the 2.2.0 version,
+ currently in pre-release. Release of a stable, full featured Samba PDC
+ is currently slated for version 3.0.
+
+ The following is a list of included features currently in Samba 2.2:
+
+ * The ability to act as a limited PDC for Windows NT and W2000
+ clients. This includes adding NT and W2K machines to the domain
+ and authenticating users logging into the domain.
+ * Domain account can be viewed using the User Manager for Domains
+ ????
+ * Viewing resources on the Samba PDC via the Server Manager for
+ Domains from the NT client. ??
+ * Windows 95 clients will allow user level security to be set but
+ will not currently allow browsing of accounts.
+ * Machine account password updates.
+ * Changing of user passwords from an NT client.
+ * Partial support for Windows NT group and username mapping.
+ * Join a W2000 controlled domain. See below.
+ * Support for a LDAP password database backend.
+ * Printing.
+
+ These things are note expected to work in the forseeable future
+ * Trust relationships
+ * PDC and BDC integration
+ * Windows NT ACLs (on the Samba shares)
+ * Offer a list of domain users to User Manager for Domains (or the
+ Security Tab etc).
+ _________________________________________________________________
+
+Can I have a Windows 2000 client logon to a Samba controlled domain?
+
+ The 2.2 release branch of Samba supports Windows 2000 domain clients
+ in legacy mode, ie as if the PDC is a NTServer, not a W2K server.
+ _________________________________________________________________
+
+Can a samba server join a Win2000 domain ?
+
+ Yes, a samba server, (2.0.7, 2.2 or Head) will join and be part of a
+ Win2000 domain as long as the Win2000 PDC has NetBios and NTLMv1
+ enabled. You don't need a 'mixed mode' DC unless there is also a NT4
+ BDC in the domain. Samba will not particate in a 'Native Win2000'
+ Active Directory controlled domain.
+ _________________________________________________________________
+
+What's the status of print spool (spoolss) support in the NTDOM code?
+
+ The implementation of support for SPOOLSS pipe is complete and it will
+ be available in the 2.2.0 release. This means that Samba will support
+ the automatic downloading of printer drivers for Windows NT clients
+ just as it currently does for Windows 9x clients.
+ _________________________________________________________________
+
+CVS
+
+ CVS is a programme (publically available) that the Samba developers
+ use to maintain the central source code. Non developers can get access
+ to the source in a read only capacity. Many flavours of unix now
+ arrive with cvs installed.
+ _________________________________________________________________
+
+What are the different Samba branches available in CVS ?
+
+ You can find out more about obtaining Samba's via anonymous CVS from
+ http://pserver.samba.org/samba/cvs.html".
+
+ There are basically four branches to watch at the moment :
+
+ HEAD
+ Samba 3.0 ? This code boasts all the main development work in
+ Samba. Two things that most people are not aware of which live
+ in the HEAD branch code are winbind NSS module and Tim Potter's
+ VFS implementation. Due to its developmental nature, its not
+ really suitable for production work.
+
+ SAMBA_2_0
+ This branch contains the current stable release release. At the
+ moment it contains 2.0.7, a version that will do some limited
+ PDC stuff. If you are really going to do PDC things then I
+ (drb) suggest that you consider 2.2 instead.
+
+ SAMBA_2_2
+ The next stable release, currently in a 'alpha' form. It
+ provides the Samba developers, testers and interested people
+ with an approximation of what is to come. This document
+ addresses only SAMBA_2_2.
+
+ SAMBA_TNG
+ This branch is no longer maintained from the Samba sites.
+ Please see http://www.samba-tng.org/. It has been requested
+ that questions about TNG are not posted to the regular Samba
+ mailing lists including samba-ntdom and samba-technical.
+ _________________________________________________________________
+
+What are the CVS commands ?
+
+ See http://pserver.samba.org/samba/cvs.html
+
+ To get the Samba 2.2 version, tag SAMBA_2_2 you would do :
+ * For example : cd /usr/local/src/
+ * cvs -d :pserver:cvs@pserver.samba.org:/cvsroot login
+ * When prompted enter a password of cvs
+ * cvs -d :pserver:cvs@pserver.samba.org:/cvsroot co -r SAMBA_2_2
+ samba
+
+ Then to update that directory at some later time,
+ * cd /usr/local/src/samba
+ * cvs -d :pserver:cvs@pserver.samba.org:/cvsroot login
+ * When prompted enter a password of 'cvs'.
+ * cvs update -d -P
+ _________________________________________________________________
+
+Chapter 3. Establishing Connections
+
+How do I get my NT4 or W2000 Workstation to login to the Samba controlled
+Domain?
+
+ There is a comprehensive Samba PDC HowTo accessable from the samba web
+ site under 'Documentation'. Its currently located at
+ http://bioserve.latrobe.edu.au/samba. Read it.
+ _________________________________________________________________
+
+What is a 'machine account' ?
+
+ Every NT, W2K or Samba machine that joins a Samba controlled domain
+ must be known to the Samba PDC. There are two entries required, one in
+ (typically) /etc/passwd and the other in (typically)
+ /usr/local/samba/private/smbpasswd. Under some circumstances these
+ entries are made manually, the HowTo discusses ways of creating them
+ automatically.
+ _________________________________________________________________
+
+"The machine account for this computer either does not exist or is not
+accessable."
+
+ When I try to join the domain I get the message "The machine account
+ for this computer either does not exist or is not accessable". Whats
+ wrong ?
+
+ This problem is caused by the PDC not having a suitable machine
+ account. If you are using the add user script = method to create
+ accounts then this would indicate that it has not worked. Ensure the
+ domain admin user system is working.
+
+ Alternatively if you are creating account entries manually then they
+ have not been created correctly. Make sure that you have the entry
+ correct for the machine account in smbpasswd file on the Samba PDC. If
+ you added the account using an editor rather than using the smbpasswd
+ utility, make sure that the account name is the machine netbios name
+ with a '$' appended to it ( ie. computer_name$ ). There must be an
+ entry in both /etc/passwd and the smbpasswd file. Some people have
+ reported that inconsistent subnet masks between the Samba server and
+ the NT client have caused this problem. Make sure that these are
+ consistent for both client and server.
+ _________________________________________________________________
+
+How do I create machine accounts manually ?
+
+ This was the only option until recently, now in version 2.2 better
+ means are available. You might still need to do it manually for a
+ couple of reasons. A machine account consists of two entries (assuming
+ a standard install and /etc/passwd use), one in /etc/passwd and the
+ other in /usr/local/samba/private/smbpasswd. The /etc/passwd entry
+ will list the machine name with a $ appended, won't have a passwd,
+ will have a null shell and no home directory. For example a machine
+ called 'doppy' would have an /etc/passwd entry like this :
+
+ doppy$:x:505:501:NTMachine:/dev/null:/bin/false
+
+ On a linux system for example, you would typically add it like this :
+
+ adduser -g machines -c NTMachine -d /dev/null -s /bin/false -n doppy$
+
+ Then you need to add that entry to smbpasswd, assuming you have a
+ suitable path to the smbpasswd programme, do this :
+
+ smbpasswd -a -m doppy$
+
+ The entry will be created with a well known password, so any machine
+ that says its doppy could join the domain as long as it gets in first.
+ So don't create the accounts any earlier than you need them.
+ _________________________________________________________________
+
+I cannot include a '$' in a machine name.
+
+ A 'machine name' in (typically) /etc/passwd consists of the machine
+ name with a '$' appended. FreeBSD (and other BSD systems ?) won't
+ create a user with a '$' in their name.
+
+ The problem is only in the program used to make the entry, once made,
+ it works perfectly. So create a user without the '$' and use vipw to
+ edit the entry, adding the '$'. Or create the whole entry with vipw if
+ you like, make sure you use a unique uid !
+ _________________________________________________________________
+
+I get told "You already have a connection to the Domain...." when creating a
+machine account.
+
+ This happens if you try to create a machine account from the machine
+ itself and use a user name that does not work (for whatever reason)
+ and then try another (possibly valid) user name. Exit out of the
+ network applet to close the initial connection and try again.
+
+ Further, if the machine is a already a 'member of a workgroup' that is
+ the same name as the domain you are joining (bad idea) you will get
+ this message. Change the workgroup name to something else, it does not
+ matter what, reboot, and try again.
+ _________________________________________________________________
+
+I get told "Cannot join domain, the credentials supplied conflict with an
+existing set.."
+
+ This is the same basic problem as mentioned above, "You already have a
+ connection..."
+ _________________________________________________________________
+
+"The system can not log you on (C000019B)...."
+
+ I joined the domain successfully but after upgrading to a newer
+ version of the Samba code I get the message, "The system can not log
+ you on (C000019B), Please try a gain or consult your system
+ administrator" when attempting to logon.
+
+ This occurs when the domain SID stored in private/WORKGROUP.SID is
+ changed. For example, you remove the file and smbd automatically
+ creates a new one. Or you are swapping back and forth between versions
+ 2.0.7, TNG and the HEAD branch code (not recommended). The only way to
+ correct the problem is to restore the original domain SID or remove
+ the domain client from the domain and rejoin.
+ _________________________________________________________________
+
+Chapter 4. User Account Management
+
+Domain Admins
+
+How do I configure an account as a domain administrator?
+
+ See the NTDom HowTo.
+ _________________________________________________________________
+
+Profiles
+
+Why is it bad to set "logon path = \\%N\%U\profile" in smb.conf? ?
+
+ Sometimes Windows clients will maintain a connection to the \\homes\ (
+ or [%U] ) share even after the user has logged out. Consider the
+ following scenario.
+
+ * user1 logs into the Windows NT machine. Therefore the [homes]
+ share is set to \\server\user1.
+ * user1 works for a while and then logs out.
+ * user2 logs into the same Windows NT machine.
+
+ However, since the NT box has maintained a connection to [homes] which
+ was previously set to \\server\user1, when the operating system
+ attempts to get the profile and if it can read users1's profile, will
+ get it otherwise it will return an error. You get the picture.
+
+ A better solution is to use a separate [profiles] share and set the
+ "logon path = \\%N\profiles\%U"
+
+ Note: Is this still a problem ????
+ _________________________________________________________________
+
+Why are all the users listed in the "domain admin users" using the same
+profile?
+
+ You are using a very very old development version of Samba. Upgrade.
+ _________________________________________________________________
+
+The roaming profiles do not seem to be updating on the server.
+
+ There can be several reasons for this.
+
+ Make sure that the time on the client and the PDC are synchronized.
+ You can accomplish this by executing a net time \\server /set /yes
+ replacing server with the name of your PDC (or another synchronized
+ SMB server). See about Setting Time
+
+ Make sure that the logon path is writeable by the user and make sure
+ that the connection to the logon path location is by the current user.
+ Sometimes Windows client do not drop the connection immediately upon
+ logoff.
+
+ Some people have reported that the logon path location should also be
+ browseable. I (GC) have yet to emperically verify this, but you can
+ try.
+ _________________________________________________________________
+
+Is it possible to store the users profile on workstation and not on server?
+
+ Hergen Lange suggested that for 2.0.7 you can set logon drive = , ie
+ to blank. Can someone confirm this works in 2.2 ? Other wise, use the
+ registery settings (perhaps via policies) to not save profiles on the
+ server.
+ _________________________________________________________________
+
+Policies
+
+What are 'Policies' ?.
+
+ When a user logs onto the domain via a client machine, the PDC sends
+ the client machine a list of things contained in the 'policy' (if it
+ exists). This list may do things like suppress a splach screen, format
+ the dates the way you like them or perhaps remove locally stored
+ profiles.
+
+ On a samba PDC this list is obtained from a file called ntconfig.pol
+ and located in the [netlogon]share. The file is created with a policy
+ editor and must be readable by anyone and writeable by only root. See
+ below for how to get a suitable editor.
+ _________________________________________________________________
+
+I can't get system policies to work.
+
+ There are two possible reasons for system policies not functioning
+ correctly. Make sure that you have the following parameters set in
+ smb.conf
+ [netlogon]
+ ....
+ locking = no
+ public = no
+ browseable = yes
+ ....
+
+
+ A policy file must be in the [netlogon] share and must be readable by
+ everyone and writeable by only root. The file must be created by an
+ NTServer Policy Editor.
+
+ Last time I (drb) looked in the source, it was looking for
+ ntconfig.pol first then several other combinations of upper and lower
+ case. People have reported success using NTconfig.pol, NTconfig.POL
+ and ntconfig.pol. These are the case settings that I (GC) use with the
+ filename ntconfig.pol
+ case sensitive = no
+ case preserve = yes
+ default case = yes
+
+ _________________________________________________________________
+
+What about Windows NT Policy Editor ?
+
+ To create or edit ntconfig.pol you must use the NT Server Policy
+ Editor, poledit.exe which is included with NT Server but not NT
+ Workstation. There is a Policy Editor on a NTws but it is not suitable
+ for creating Domain Policies. Further, although the Windows 95 Policy
+ Editor can be installed on an NT Workstation/Server, it will not work
+ with NT policies because the registry key that are set by the policy
+ templates. However, the files from the NT Server will run happily
+ enough on an NTws. You need poledit.exe, common.adm and winnt.adm. It
+ is convenient to put the two *.adm files in c:\winnt\inf which is
+ where the binary will look for them unless told otherwise. Note also
+ that that directory is 'hidden'.
+
+ The Windows NT policy editor is also included with the Service Pack 3
+ (and later) for Windows NT 4.0. Extract the files using
+ servicepackname /x, ie thats Nt4sp6ai.exe /x for service pack 6a. The
+ policy editor, poledt.exe and the associated template files (*.adm)
+ should be extracted as well. It is also possible to downloaded the
+ policy template files for Office97 and get a copy of the policy
+ editor. Another possible location is with the Zero Administration Kit
+ available for download from Microsoft.
+ _________________________________________________________________
+
+Can Win95 do Policies ?
+
+ Install the group policy handler for Win9x to pick up group policies.
+ Look on the Win98 CD in \tools\reskit\netadmin\poledit. Install group
+ policies on a Win9x client by double-clicking grouppol.inf. Log off
+ and on again a couple of times and see if Win98 picks up group
+ policies. Unfortunately this needs to be done on every Win9x machine
+ that uses group policies....
+
+ If group policies don't work one reports suggests getting the updated
+ (read: working) grouppol.dll for Windows 9x. The group list is grabbed
+ from /etc/group.
+ _________________________________________________________________
+
+Passwords
+
+What is password sync and should I use it ?
+
+ NTws users can change their domain password by pressing Ctrl-Alt-Del
+ and choosing 'Change Password'. By default however, this does not
+ change the unix password (typically in /etc/passwd or /etc/shadow). In
+ lots of situations thats OK, for example :
+
+ * The server is only accessible to the user via samba.
+ * Pam_smb or similar is installed so other applications still refer
+ to the samba password.
+
+ But sometimes you really do need to maintain two seperate password
+ databases and there are good reasons to keep then in sync. Trying to
+ explain to users that they need to change their passwords in two
+ seperate places or use two seperate passwords is not fun.
+
+ However do understand that setting up password sync is not without
+ problems either. The chief difficulty is the interface between Samba
+ and the passwd command, it can be a fiddle to set up and if the
+ password the user has entered fails, the resulting errors are
+ ambiguously reported and the user is confused. Further, you need to
+ take steps to ensure that users only ever change their passwords via
+ samba (or use smbpasswd), otherwise they will only be changing the
+ unix password.
+ _________________________________________________________________
+
+How do I get remote password (unix and SMB) changing working ?
+
+ Have a practice changing a user's password (as root) to see what
+ discussion takes place and change the text in the 'passwd chat' line
+ below as necessary. The line as shown works for recent RH Linux but
+ most other systems seem to like to do something different. The '*' is
+ a wild card and will match anything (or nothing).
+
+ Add these lines to smb.conf under [Global]
+
+
+ unix password sync = true
+ passwd program = /usr/bin/passwd %u
+ passwd chat = *password* %n\n *password* %n\n *successful*
+
+ As mentioned above, the change to the unix password happens as root,
+ not as the user, as is indicated in ~/smbd/chgpasswd.c If you are
+ using NIS, the Samba server must be running on the NIS master machine.
+ _________________________________________________________________
+
+Chapter 5. Miscellaneous
+
+How do I send a message to a PC running windows from a samba server ?
+
+ echo "message" | smbclient -M PC_NETBIOS_NAME_HERE -U "from" -I "to"
+ The limit on message length is 1600 characters. -U and -I are optional
+ and purely cosmetic.[Time Cole]
+
+ Although this will always work with NTs and W2K, W95/98 require
+ Winpopup (or something similar) to be running.
+ _________________________________________________________________
+
+What editor can I use in DOS/Windows that won't mess with my unix EOF
+
+ There are a number of Windows or DOS based editors that will
+ understand, and leave intact, the unix eof (as opposed to a DOS
+ CL/LF). List members suggested :
+
+ * UltraEdit at www.ultraedit.com
+ * VI for windows at home.snafu.de/ramo/WinViEn.htm
+ * The author prefers PFE at www.lancs.ac.uk/people/cpaap/pfe/ but
+ its no longer being developed...
+ _________________________________________________________________
+
+How do I get 'User Manager' and 'Server Manager'
+
+ Since I don't need to buy an NT Server CD now, how do I get the 'User
+ Manager for Domains', the 'Server Manager' ?
+
+ Microsoft distributes a version of these tools called nexus for
+ installation on Windows 95 systems. The tools set includes
+ * Server Manager
+ * User Manager for Domains
+ * Event Viewer
+
+ Click here to download the archived file
+ ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE
+
+ The Windows NT 4.0 version of the 'User Manager for Domains' and
+ 'Server Manager' are available from Microsoft via ftp from
+ ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE
+ _________________________________________________________________
+
+Can I make my samba server a Time server too ?
+
+ Yep, add a line to smb.conf time server = True under the Global
+ section. Then Windows machines can use it to set the time with a
+ command like net time \\server_name /set /yes. NTs and W2K machines
+ will have to have been told to allow ordinary users to change the
+ system time/date. See next item.
+ _________________________________________________________________
+
+The time setting from a Samba server does not work.
+
+ If it works OK when you log on as Domain Admin then the problem is
+ that ordinary users don't have permission to change the time. (The
+ system is running with their permission at logon time.) This is not a
+ Samba problem, you will have the same problem where ever you connect.
+ You can give 'everyone' permission to change the time from the User
+ Manager.
+
+ Anyone know what the registry settings are so this could be done with
+ a Policy ?
+ _________________________________________________________________
+
+"trust account xxx should be in DOMAIN_GROUP_RID_USERS"
+
+ I keep getting the message "trust account xxx should be in
+ DOMAIN_GROUP_RID_USERS." in the logs. What do I need to do?
+
+ You are using one of the old development versions. Upgrade. (The
+ message is unimportant, was a reminder to a developer)
+ _________________________________________________________________
+
+How do I get my samba server to become a member ( not PDC ) of an NT domain?
+
+ In a domain that has a number of servers you only need one password
+ database. The machines that don't have their own ask the PDC to check
+ for them. This will work fine for a domain controlled by either a
+ Samba or NT machine. The following lines in smb.conf are typical,
+ 'password server' points to the samba machine (or an NT) that has the
+ password list :
+
+
+ [global]
+ ...
+ security = domain
+ workgroup = { Put your domain name here }
+ password server = { Put the ip of the PDC here }
+ encrypt passwords = yes
+ ...
+
+ The samba server in question will have to 'join the domain', that
+ requires the domain controller to have a machine account for it. This
+ is no different to the machine account requirements to allow a NTws to
+ join the domain. For example, if we want a unix box called sleepy to
+ ask the PDC called grumpy to do its authentication then grumpy will
+ need an entry in its smbpasswd (assuming it's also samba) that starts
+ with sleepy$. It would have to be created manually.
+
+ If the domain is controlled by an NTServer then the "Server Manager
+ for Domains" tool must be used to add 'sleepy' to the domain list.
+
+ In either case we then join the domain. If the domain is called forest
+ then on sleepy we would join the domain by typing :
+
+ smbpasswd -j forest
+
+ Note that the directory where the smbpasswd file would be located
+ should exist as this is where smbd will generate the MACHINE.SID file.
+ This might be /usr/local/samba/private/FOREST.SLEEPY.SID and it
+ contains the trust account password for the domain member. The
+ permissions are (and should remain) "rw-------
+
+ Note the Samba Servers without the password list will most likely
+ still need an account for each user, this means a line in its
+ /etc/passwd. Because authentication is being handled at the domain
+ level the /etc/passwd line does not need a password. If the shares
+ being offered are not user specific, ie a common (read only ?) area or
+ perhaps just printing then the user's /etc/passwd does not need a home
+ directory. A typical line in /etc/passwd for a server that allows
+ domain users to connect to the samba shares but does not offer a home
+ share ('cos that's on the PDC) and does not allow logon to the unix
+ prompt would be like this :
+jblow:x:542:100:Joe Blow:/dev/null:/bin/false
+
+ * When removing those 'dummy' users, watch the 'remove user'
+ scripts, some OS think they should remove a users directory even
+ when its not owned by the user !
+ * The username map = parameter might help you to avoid having all
+ those accounts created.
+ * You should investigate the smb.conf parameter 'add user script',
+ it will be used to create accounts on secondary servers when that
+ account already exists on the PDC. Very nice. Something like :
+ [Global]
+ ....
+ add user script = /usr/sbin/adduser -n -g users -c User -d /dev/null -s /bi
+n/false %U
+ ....
+ _________________________________________________________________
+
+Chapter 6. Troubleshooting and Bug Reporting
+
+Diagnostic tools
+
+What are some diagnostics tools I can use to debug the domain logon process
+and where can I find them?
+
+ One of the best diagnostic tools for debugging problems is Samba
+ itself. You can use the -d option for both smbd and nmbd to specifiy
+ what 'debug level' at which to run. See the man pages on smbd, nmbd
+ and smb.conf for more information on debugging options. The debug
+ level can range from 1 (the default) to around 100 but a debug level
+ of about 20 will normally help you find any errors that samba is
+ encountering. Another helpful method of debugging is to compile samba
+ using the gcc -g flag. This will include debug information in the
+ binaries and allow you to attch gdb to the running smbd / nmbd
+ process. In order to attach gdb to an smbd process for an NT
+ workstation, first get the workstation to make the connection.
+ Pressing ctrl-alt-delete and going down to the domain box is
+ sufficient (at least, on the first time you join the domain) to
+ generate a 'LsaEnumTrustedDomains'. Thereafter, the workstation
+ maintains an open connection, and therefore there will be an smbd
+ process running (assuming that you haven't set a really short smbd
+ idle timeout) So, in between pressing ctrl alt delete, and actually
+ typing in your password, you can gdb attach and continue.
+
+ Some usefull samba commands worth investigating:
+ * testparam | more
+ * smbclient -L //{netbios name of server}
+
+ An SMB enabled version of tcpdump is available from
+ ftp://samba.org/pub/samba/tcpdump-smb/
+
+ Capconvert is a small C program for translating output from
+ tcpdump-smb to CAP format that can be read by netmon. You will need to
+ use the raw output from tcp dump ( ie. tcpdump -w output.dump ). Good
+ news! Now you can convert Solaris' snoop output as well. The C source
+ code for snoop2cap is available for download.
+
+ For tracing things on the Microsoft Windows NT, Network Monitor (aka.
+ netmon) is available on the Microsoft Developer Network CD's, the
+ Windows NT Server install CD and the SMS CD's. The version of netmon
+ that ships with SMS allows for dumping packets between any two
+ computers (ie. placing the network interface in promiscuous mode). The
+ version on the NT Server install CD will only allow monitoring of
+ network traffic directed to the local NT box and broadcasts on the
+ local subnet.
+ _________________________________________________________________
+
+How do I install 'Network Monitor' on an NT Workstation or a Windows 9x box?
+
+ Installing netmon on an NT workstation requires a couple of steps. The
+ following are for installing Netmon V4.00.349, which comes with
+ Microsoft Windows NT Server 4.0, on Microsoft Windows NT Workstation
+ 4.0. The process should be similar for other version of Windows NT /
+ Netmon. You will need both the Microsoft Windows NT Server 4.0 Install
+ CD and the Workstation 4.0 Install CD.
+
+ Initially you will need to install 'Network Monitor Tools and Agent'
+ on the NT Server. To do this
+
+ * Goto Start - Settings - Control Panel - Network - Services - Add
+ * Select the 'Network Monitor Tools and Agent' and click on 'OK'.
+ * Click 'OK' on the Network Control Panel.
+ * Insert the Windows NT Server 4.0 install CD when prompted.
+
+ At this point the Netmon files should exist in
+ %SYSTEMROOT%\System32\netmon\*.*. Two subdirectories exist as well,
+ parsers\ which contains the necessary DLL's for parsing the netmon
+ packet dump, and captures\.
+
+ In order to install the Netmon tools on an NT Workstation, you will
+ first need to install the 'Network Monitor Agent' from the Workstation
+ install CD.
+
+ * Goto Start - Settings - Control Panel - Network - Services - Add
+ * Select the 'Network Monitor Agent' and click on 'OK'.
+ * Click 'OK' on the Network Control Panel.
+ * Insert the Windows NT Workstation 4.0 install CD when prompted.
+
+ Now copy the files from the NT Server in
+ %SYSTEMROOT%\System32\netmon\*.* to %SYSTEMROOT%\System32\netmon\*.*
+ on the Workstation and set permissions as you deem appropriate for
+ your site. You will need administrative rights on the NT box to run
+ netmon.
+
+ To install Netmon on a Windows 9x box install the network monitor
+ agent from the Windows 9x CD (\admin\nettools\netmon). There is a
+ readme file located with the netmon driver files on the CD if you need
+ information on how to do this. Copy the files from a working Netmon
+ installation.
+ _________________________________________________________________
+
+What other help can I get ?
+
+ There are many sources of information available in the form of mailing
+ lists, RFC's and documentation. The docs that come with the samba
+ distribution contain very good explanations of general SMB topics such
+ as browsing.
+ _________________________________________________________________
+
+URLs and similar
+
+ * Home of Samba site http://samba.org. We have a mirror near you !
+ * The Development document on the Samba mirrors might mention your
+ problem. If so, it might mean that the developers are working on
+ it.
+ * Ignacio Coupeau has a very comprehesive look at LDAP with Samba at
+ http://www.unav.es/cti/ldap-smb-howto.html Be a little carefull
+ however, I suspect that it does not specificly address samba
+ 2.2.x. The HEAD pre-2.1 may possibly be the best stream to look
+ at.
+ * Lars Kneschke's site covers Samba-TNG at
+ http://www.kneschke.de/projekte/samba_tng, but again, a lot of it
+ does not apply to the main stream Samba.
+ * See how Scott Merrill simulates a BDC behaviour at
+ http://www.skippy.net/linux/smb-howto.html.
+ * Although 2.0.7 has almost had its day as a PDC, I (drb) will keep
+ the 2.0.7 PDC pages at http://bioserve.latrobe.edu.au/samba going
+ for a while yet.
+ * Misc links to CIFS information http://samba.org/cifs/
+ * NT Domains for Unix http://mailhost.cb1.com/~lkcl/ntdom/
+ * FTP site for older SMB specs:
+ ftp://ftp.microsoft.com/developr/drg/CIFS/
+
+ There are a number of documents that no longer appear to live at their
+ origional home. Any one know where the following may be found ?
+ * CIFS/E Browser Protocol draft-leach-cifs-browser-spec-00.txt
+ * CIFS Remote Administration Protocol
+ draft-leach-cifs-rap-spec-00.txt
+ * CIFS Logon and Pass Through Authentication
+ draft-leach-cifs-logon-spec-00.txt
+ * A Common Internet File System (CIFS/1.0) Protocol
+ draft-leach-cifs-v1-spec-01.txt
+ * CIFS Printing Specification draft-leach-cifs-print-spec-00.txt
+ * RFC1001 (March '87) Protocol standard for a NetBIOS service on a
+ TCP/UDP transport: Concepts and methods.
+ http://ds.internic.net/rfc/rfc1001.txt
+ * RFC1002 (March '87) Protocol standard for a NetBIOS service on a
+ TCP/UDP transport: Detailed specifications.
+ http://ds.internic.net/rfc/rfc1002.txt
+ * Microsoft's main CIFS page:
+ http://www.microsoft.com/workshop/networking/cifs/
+ _________________________________________________________________
+
+How do I get help from the mailing lists ?
+
+ There are a number of Samba related mailing lists. Go to
+ http://samba.org, click on your nearest mirror and then click on
+ Support and then click on Samba related mailing lists.
+
+ For questions relating to Samba TNG go to http://www.samba-tng.org/ It
+ has been requested that you don't post questions about Samba-TNG to
+ the main stream Samba lists.
+
+ If you post a message to one of the lists please observe the following
+ guide lines :
+ * Always remember that the developers are volunteers, they are not
+ paid and they never guarantee to produce a particular feature at a
+ particular time. Any time lines are 'best guess' and nothing more.
+ * Always mention what version of samba you are using and what
+ operating system its running under. You should probably list the
+ relevant sections of your smb.conf file, at least the options in
+ [global] that affect PDC support.
+ * In addition to the version, if you obtained Samba via CVS mention
+ the date when you last checked it out.
+ * Try and make your question clear and brief, lots of long,
+ convoluted questions get deleted before they are completely read !
+ Don't post html encoded messages (if you can select colour or font
+ size its html).
+ * If you run one of those niffy 'I'm on holidays' things when you
+ are away, make sure its configured to not answer mailing lists.
+ * Don't cross post. Work out which is the best list to post to and
+ see what happens, ie don't post to both samba-ntdom and
+ samba-technical. Many people active on the lists subscribe to more
+ than one list and get annoyed to see the same message two or more
+ times. Often someone will see a message and thinking it would be
+ better dealt with on another, will forward it on for you.
+ * You might include partial log files written at a debug level set
+ to as much as 20. Please don't send the entire log but enough to
+ give the context of the error messages.
+ * (Possibly) If you have a complete netmon trace ( from the opening
+ of the pipe to the error ) you can send the *.CAP file as well.
+ * Please think carefully before attaching a document to an email.
+ Consider pasting the relevant parts into the body of the message.
+ The samba mailing lists go to a huge number of people, do they all
+ need a copy of your smb.conf in their attach directory ?
+ _________________________________________________________________
+
+How do I get off the mailing lists ?
+
+ To have your name removed from a samba mailing list, go to the same
+ place you went to to get on it. Go to http://samba.org, click on your
+ nearest mirror and then click on Support and then click on Samba
+ related mailing lists. Or perhaps see here
+
+ Please don't post messages to the list asking to be removed, you will
+ just be refered to the above address (unless that process failed in
+ some way...)
diff --git a/docs/textdocs/samba-pdc-howto.txt b/docs/textdocs/samba-pdc-howto.txt
new file mode 100644
index 00000000000..2d7997551d3
--- /dev/null
+++ b/docs/textdocs/samba-pdc-howto.txt
@@ -0,0 +1,715 @@
+!==
+!== samba-pdc-howto.txt for Samba release 2.2.0a 23 Jun 2001
+!==
+
+The Samba 2.2 PDC HowTo
+
+David Bannon
+
+ La Trobe University
+ _________________________________________________________________
+ _________________________________________________________________
+
+ Comments, corrections and additions to <dbannon@samba.org>
+
+ This document explains how to setup Samba as a Primary Domain
+ Controller and applies to version 2.2.0. Before using these functions
+ make sure you understand what the controller can and cannot do. Please
+ read the sections below in the Introduction. As 2.2.0 is incrementally
+ updated this document will change or become out of date very quickly,
+ make sure you are reading the most current version.
+
+ Please note this document does not apply to Samba2.2alpha0,
+ Samba2.2alpha1, Samba 2.0.7, TNG nor HEAD branch.
+
+ It does apply to the current (post November 27th) cvs.
+
+ Also available is an updated version of Jerry Carter's NTDom FAQ that
+ will answer lots of the special 'tuning' questions that are not
+ covered here. Over the next couple of weeks some of the items here
+ will be moved to the FAQ.
+
+ Table of Contents
+ 1. Introduction
+
+ What can we do ?
+ What can't we do ?
+
+ 2. Installing
+
+ Start Up Script
+ Config File
+
+ A sample conf file
+ PDC Config Parameters
+
+ Special directories
+
+ 3. User and Machine Accounts
+
+ Logon Accounts
+ Machine Accounts
+ Joining the Domain
+ User Accounts
+ Domain Admin Accounts
+
+ 4. Profiles, Policies and Logon Scripts
+
+ Profiles
+ Policies
+ Logon Scripts
+
+ 5. Passwords and Authentication
+
+ Syncing Passwords
+ Using PAM
+ Authenticating other Samba Servers
+
+ 6. Background
+
+ History
+ The Future
+ Getting further help
+ _________________________________________________________________
+
+Chapter 1. Introduction
+
+ This document will show you one way of making Version 2.2.0 of Samba
+ perform some of the tasks of a NT Primary Domain Controller. The
+ facilities described are built into Samba as a result of development
+ work done over a number of years by a large number of people. These
+ facilities are only just beginning to be officially supported and
+ although they do appear to work reliably, if you use them then you
+ take the risks upon your self. This document does not cover the
+ developmental versions of Samba, particularly Samba-TNG
+
+ Note that Samba 2.0.7 supports significently less of the NT Domain
+ facilities compared with 2.2.0
+
+ This document does not replace the text files DOMAIN_CONTROL.txt,
+ DOMAIN.txt (by John H Terpstra) or NTDOMAIN.txt (by Luke Kenneth
+ Casson Leighton). Those documents provide more detail and an insight
+ to the development cycle and should be considered 'further reading'.
+ _________________________________________________________________
+
+What can we do ?
+
+ * Permit 'domain logons' for Win95/98, NT4 and W2K workstations from
+ one central password database. WRT W2K, please see the section
+ about adding machine accounts and the Intro in the FAQ.
+ * Grant Administrator privileges to particular domain users on an NT
+ or W2K workstation.
+ * Apply policies from a domain policy file to NT and W2K (?)
+ workstation.
+ * Run the appropriate logon script when a user logs on to the domain
+ .
+ * Maintain a user's local profile on the server.
+ * Validate a user using another system via smb (such as smb_pam) and
+ soon winbind (?).
+ _________________________________________________________________
+
+What can't we do ?
+
+ * Become or work with a Backup Domain Controller (a BDC).
+ * Participate in any sort of trust relationship (with either Samba
+ or NT Servers).
+ * Offer a list of domain users to User Manager for Domains on the
+ Security Tab etc).
+ * Be a W2K type of Domain Controller. Samba PDC will behave like an
+ NT PDC, W2K workstations connect in legacy mode.
+ _________________________________________________________________
+
+Chapter 2. Installing
+
+ Installing consists of the usual download, configure, make and make
+ install process. These steps are well documented elsewhere. The FAQ
+ discusses getting pre-release versions via CVS. Then you need to
+ configure the server.
+ _________________________________________________________________
+
+Start Up Script
+
+ Skip this section if you have a working Samba already. Everyone has
+ their own favourite startup script. Here is mine, offered with no
+ warrantee at all !
+
+
+ #!/bin/sh
+ # Script to control Samba server, David Bannon, 14-6-96
+ #
+ #
+ PATH=/bin:/usr/sbin:/usr/bin
+ export PATH
+ case "$1" in
+ 'start')
+ if [ -f /usr/local/samba/bin/smbd ]
+ then
+ /usr/local/samba/bin/smbd -D
+ /usr/local/samba/bin/nmbd -D
+ echo "Starting Samba Server"
+ fi
+ ;;
+ 'conf')
+ if [ -f /usr/local/samba/lib/smb.conf ]
+ then
+ vi /usr/local/samba/lib/smb.conf
+ fi
+ ;;
+ 'pw')
+ if [ -f /usr/local/samba/private/smbpasswd ]
+ then
+ vi /usr/local/samba/private/smbpasswd
+ fi
+ ;;
+ 'who')
+ /usr/local/samba/bin/smbstatus -b
+ ;;
+ 'restart')
+ psline=`/bin/ps x | grep smbd | grep -v grep`
+
+ if [ "$psline" != "" ]
+ then
+ while [ "$psline" != "" ]
+ do
+ psline=`/bin/ps x | fgrep smbd | grep -v grep`
+ if [ "$psline" ]
+ then
+ set -- $psline
+ pid=$1
+ /bin/kill -HUP $pid
+ echo "Stopped $pid line = $psline"
+ sleep 2
+ fi
+ done
+ fi
+ echo "Stopped Samba servers"
+ ;;
+ 'stop')
+ psline=`/bin/ps x | grep smbd | grep -v grep`
+
+ if [ "$psline" != "" ]
+ then
+ while [ "$psline" != "" ]
+ do
+ psline=`/bin/ps x | fgrep smbd | grep -v grep`
+ if [ "$psline" ]
+ then
+ set -- $psline
+ pid=$1
+ /bin/kill -9 $pid
+ echo "Stopped $pid line = $psline"
+ sleep 2
+ fi
+ done
+ fi
+ echo "Stopped Samba servers"
+ psline=`/bin/ps x | grep nmbd | grep -v grep`
+ if [ "$psline" ]
+ then
+ set -- $psline
+ pid=$1
+ /bin/kill -9 $pid
+ echo "Stopped Name Server "
+ fi
+ echo "Stopped Name Servers"
+ ;;
+ *)
+ echo "usage: samba {start | restart |stop | conf | pw | who}"
+ ;;
+ esac
+
+
+ Use this script, or some other one, you will need to ensure its used
+ while the machine is booting. (This typically involves /etc/rc.d,
+ we'll be assuming that there is a script called samba in
+ /etc/rc.d/init.d further down in this document.)
+ _________________________________________________________________
+
+Config File
+
+A sample conf file
+
+ Here is a fairly minimal config file to do PDC. It will also make the
+ server become the browse master for the specified domain (not
+ necessary but usually desirable). You will need to change only two
+ parameters to make this file work, wins server and workgroup, plus you
+ will need to put your own name (not mine!) in the domain admin users
+ fields. Some of the parameters are discussed further down this
+ document.
+
+ Assuming you have used the default install directories, this file
+ should appear as /usr/local/samba/lib/smb.conf. It should not be
+ writable by anyone except root.
+
+ Note: The 'add user script' parameter is a work-around, watch for
+ changes !
+
+
+
+ [global]
+ security = user
+ status = yes
+ workgroup = { Your domain name here }
+ wins server = { ip of a wins server if you have one }
+ encrypt passwords = yes
+ domain logons =yes
+ logon script = scripts\%U.bat
+ domain admin group = @adm
+ add user script = /usr/sbin/adduser -n -g machines -c Machine -d /dev/n
+ull -s /bin/false %m$
+ guest account = ftp
+ share modes=no
+ os level=65
+ [homes]
+ guest ok = no
+ read only = no
+ create mask = 0700
+ directory mask = 0700
+ oplocks = false
+ locking = no
+ [netlogon]
+ path = /usr/local/samba/netlogon
+ writeable = no
+ guest ok = no
+
+ _________________________________________________________________
+
+PDC Config Parameters
+
+ There are a huge range of parameters that may appear in a smb.conf
+ file. Some that may be of interest to a PDC are :
+
+ add user script
+ This parameter specifies a script (or program) that will be run
+ to add a user to the system. Here it is being used to add a
+ machine, not a user. This is probably not very nice and may
+ change. But it does work !
+
+ For this example, I have a group called 'machines', entries can
+ be added to /etc/passwd using a programme called /usr/adduser
+ and the other parameters are chosen as suitable for a machine
+ account. Works for RH Linux, your system may require changes.
+
+ domain admin group = @adm
+ This parameter specifies a unix group whose members will be
+ granted admin privileges on a NT workstation when logged onto
+ that workstation. See the section called Domain Admin Accounts.
+
+ domain admin users = user1 users2
+ It appears that this parameter does not funtion correctly at
+ present. Use the 'domain admin group' instread. This parameter
+ specifies a unix user who will be granted admin privileges on a
+ NT workstation when logged onto that workstation. See the
+ section called Domain Admin Accounts.
+
+ encrypt passwords = yes
+ This parameter must be 'yes' to allow any of the recent service
+ pack NTs to logon. There are some reg hacks that turn off
+ encrypted passwords on the NTws itself but if you are going to
+ use the smbpasswd system (and you should) you must use
+ encrypted passwords.
+
+ logon script = scripts\%U.bat
+ This will make samba look for a logon script named after the
+ user (eg joeblow.bat). See the section further on called Logon
+ Scripts
+
+ Note: Note that the slash is like this '\', not like this '/'. NT
+ is happy with both, win95 is not !
+
+ logon path
+ Lets you specify where you would like users profiles kept. The
+ default, that is in the users home directory, does encourage a
+ bit of fiddling.
+ _________________________________________________________________
+
+Special directories
+
+ You need to create a couple of special files and directories. Its nice
+ to have some of the binaries handy too, so I create links to them.
+ Assuming you have used the default samba location and have not changed
+ the locations mentioned in the sample config file, do the following :
+
+
+ mkdir /usr/local/samba/netlogon
+ mkdir /usr/local/samba/netlogon/scripts
+ mkdir /usr/local/samba/private
+ touch /usr/local/samba/private/smbpasswd
+ chmod go-rwx /usr/local/samba/private/smbpasswd
+ cd /usr/local/sbin
+ ln -s /usr/local/samba/bin/smbpasswd
+ ln -s /usr/local/samba/bin/smbclient
+ ln -s /etc/rc.d/init.d/samba
+
+ Make sure permissions are appropriate !
+
+ OK, if you have used the scripts above and have a path to where the
+ links are do this to start up the Samba Server :
+
+ samba start
+
+ Instead, you might like to reboot the machine to make sure that you
+ got the init stuff right. Any way, a quick look in the logs
+ /usr/local/samba/var/log.smbd and /usr/local/samba/var/log/nmbd will
+ give you an idea of what's happening. Assuming all is well, lets
+ create some accounts...
+ _________________________________________________________________
+
+Chapter 3. User and Machine Accounts
+
+Logon Accounts
+
+ This section is very nearly out of date already ! It appears that
+ while you are reading it, Jean Francois Micou is making it redundant !
+ Jean Francois is adding facilities to add users (via User Manager) and
+ machines (when joining the domain) and it looks like these facilities
+ will make it into the official release of 2.2.
+
+ Every user and NTws (and other samba servers) that will be on the
+ domain must have its own passwd entry in both /etc/passwd and
+ /usr/local/samba/private/smbpasswd . The /etc/passwd entry is really
+ only to reserve a user ID. The NT encrypted password is stored in
+ /usr/local/samba/private/smbpasswd. (Note that win95/98 machines don't
+ need an account as they don't do any security aware things.)
+
+ Samba 2.2 will now create these entries for us. Carefull set up is
+ required and there may well be some changes to this system before its
+ released.
+ _________________________________________________________________
+
+Machine Accounts
+
+ Note: There is an entry in the ntdom FAQ explaining how to create
+ machine entries manually.
+
+ At present to have the machine accounts created when a machine joins
+ the domain a number of conditions must be met :
+
+ Only root can do it !
+ There must be an entry in /usr/local/samba/private/smbpasswd
+ for root and root must be mentioned in domain admins. This may
+ be fixed some time in the future so any 'domain admin' can do
+ it. If you don't like having root as a windows logon account,
+ make the machine entries manually (both of them).
+
+ Use the add user script
+ Again, this looks a bit like a 'work around'. Use a suitable
+ command line to add a machine account see above, and pass it
+ %m$, that is %m to get machine name plus the '$'. Now, this
+ means you cannot use the add user script to really add users
+ ....
+
+ Only for W2K
+ This automatic creation of machine accounts does not work for
+ NT4ws at present. Watch this space.
+ _________________________________________________________________
+
+Joining the Domain
+
+ You must have either added the machine account entries manually (NT4
+ ws) or set up the automatic system (W2K), see Machine Accounts before
+ proceeding.
+
+ Windows NT
+
+ + (this step may not be necessary some time in the near
+ future). On the samba server that is the PDC, add a machine
+ account manually as per the instructions in the FAQ Then give
+ the command smbpasswd -a -m {machine} substituting in the
+ client machine name.
+ + Logon to the NTws in question as a local admin, go to the
+ Control Panel, Network IdentificationTag.
+ + Press the Change button.
+ + Enter the Domain name (from the 'Workgroup' parameter,
+ smb.conf) in the Domain Field.
+ + Press OK and after a few seconds you will get a 'Welcome to
+ Whatever Domain'. Allow to reboot.
+
+ Windows 2000
+
+ + Logon to the W2k machine as Administrator, go to the Control
+ Panel and double click on Network and Dialup Connections.
+ + Pull down the Advanced menu and choose Network
+ Identification. Press Properties .
+ + Choose Domain and enter the domain name. Press 'OK'.
+ + Now enter a user name and password for a Domain Admin (Who
+ must be root until a pre-release bug is fixed) and press
+ 'OK'.
+ + Wait for the confirmation, reboot when prompted.
+
+ To remove a W2K machine from the domain, follow the first two
+ steps then choose Workgroup, enter a work group name (or just
+ WORKGROUP) and follow the prompts.
+ _________________________________________________________________
+
+User Accounts
+
+ Again, doing it manually (cos' the auto way is not working
+ pre-release). In our simple case every domain user should have an
+ account on the PDC. The account may have a null shell if they are not
+ allowed to log on to the unix prompt. Again they need an entry in both
+ the /etc/passwd and /usr/local/samba/private/smbpasswd. Again a
+ password is not necessary in /etc/passwd but the location of the home
+ directory is honoured. To make an entry for a user called Joe Blow you
+ would typically do the following :
+
+ adduser -g users -c 'Joe Blow' -s /bin/false -n joeblow
+
+ smbpasswd -a joeblow
+
+ And you will prompted to enter a password for Joe. Ideally he will be
+ hovering over your shoulder and will, when asked, type in a password
+ of his choice. There are a number of scripts and systems to ease the
+ migration of users from somewhere to samba. Better start looking !
+ _________________________________________________________________
+
+Domain Admin Accounts
+
+ Certain operations demand that the logged on user has Administrator
+ privileges, typically installing software and doing maintenance tasks.
+ It is very simple to appoint some users as Domain Admins, most likely
+ yourself. Make sure you trust the appointee !
+
+ Samba 2.2 recognizes particular users as being domain admins and tells
+ the NTws when it thinks that it has got one logged on. In the smb.conf
+ file we declare that the Domain Admin group = @adm. Any user who is a
+ menber of the unix group 'adm' is treated as a Domain Admin by a NTws
+ when logged onto the Domain. They will have full Administrator rights
+ including the rights to change permissions on files and run the system
+ utilities such as Disk Administrator. Add users to the group by
+ editing /etc/group/. You do not need to use the 'adm' group, choose
+ any one you like.
+
+ Further, and this is very new, they will be allowed to create a new
+ machine account when first connecting a new NT or W2K machine to the
+ domain. However, at present, ie pre-release, only a Domain Admin who
+ also happens to be root can do so.
+ _________________________________________________________________
+
+Chapter 4. Profiles, Policies and Logon Scripts
+
+Profiles
+
+ NT Profiles should work if you have followed the setup so far. A
+ user's profile contains a whole lot of their personal settings, the
+ contents of their desktop, personal 'My Documents' and so on. When
+ they log off, all of the profile is copied to their directory on the
+ server and is downloaded again when they logon on again, possibly on
+ another client machine.
+
+ Sounds great but can be a bit of a bug bear sometimes. Users let their
+ profiles get too big and then complain about how long it takes to log
+ on each time. This sample setup only supports NT profiles, rumor has
+ it that it is also possible to do the same on Win95, my users don't
+ know and I'm not telling them.
+
+ Note: There is more info about Profiles (including for W95/98) in
+ the FAQ.
+ _________________________________________________________________
+
+Policies
+
+ Policies are an easy way to make or enforce specific characteristics
+ across your network. You create a ntconfig.pol file and every time
+ someone logs on with their NTws, the settings you put in ntconfig.pol
+ are applied to the NTws. Typical setting are things like making the
+ date appear the way you want it (none of these 2 figure years here) or
+ maybe suppressing one of the splash screens. Perhaps you want to set
+ the NTws so it does not keep users profiles on the local machine.
+ Cool. The only problem is making the ntconfig.pol file itself. You
+ cannot use the policy editor that comes with NTws.
+
+ Note: See the FAQ for pointers on how to get a suitable Policy
+ Editor.
+
+ The Policy Editor (and associated files) will create a ntconfig.pol
+ file using the parameters Microsoft thought of and parameters you
+ specify by making your own template file.
+
+ In our example configuration here, Samba will expect to find the
+ ntconfig.pol file in /usr/local/samba/netlogon. Needless to say (I
+ hope !), it is vitally important that ordinary users don't have write
+ permission to the Policy files.
+ _________________________________________________________________
+
+Logon Scripts
+
+ In the sample config file above there is a line logon script =
+ scripts\%U.bat
+
+ Note: Note that the slash is like this '\' not like this '/'. NT is
+ happy with both, win95 is not !
+
+ This allows you to run a dos batch file every time someone logs on.
+ The batch file is located on the server, in the sample install
+ mentioned here, its in /usr/local/samba/netlogon/scripts and is named
+ after the user with .bat appended, eg Joe Blow's script is called
+ /usr/local/samba/netlogon/scripts/joeblow.bat.
+
+ Note: There is a suggestion that user names longer than 8
+ characters may cause problems with some systems being unable to run
+ logon scripts. This is confirmed in earlier versions when
+ connecting using W95, comments about other combinations ??
+
+ You could use a line like this logon script = default.bat and samba
+ will supply /usr/local/samba/netlogon/default.bat for any client and
+ every user. Maybe you could use %m and get a client machine dependant
+ logon script. You get the idea...
+
+ Note that the file is a dos batch file not a Unix script. It runs dos
+ commands on the client computer with the logon user's permissions. It
+ must be a dos file with each line ending with the dos cr/lf not a nice
+ clean newline. Generally, its best to create the initial file on a DOS
+ system and copy it across.
+
+ There is lots of very clever uses of the Samba replaceable variables
+ such ( %U = user, %G = primary group, %H = client machine, see the
+ 'man 5 smb.conf') to give you control over which script runs when a
+ particular person logs on. (Gee, it would be nice to have a
+ default.bat run when nothing else is available.)
+
+ Again, it is vitally important that ordinary users don't have write
+ permission to other peoples, or even probably their own, logon script
+ files.
+
+ A typical logon script is reproduced below. Note that it runs separate
+ commands for win95 and NT, that's because NT has slightly different
+ behaviour when using the net use .. command. Its useful for lots of
+ other situations too. I don't know what syntax to use for win98, I
+ don't use it here.
+
+
+ rem Default logon script, create links to this file.
+
+ net time \\bioserve /set /yes
+ @echo off
+ if %OS%.==Windows_NT. goto WinNT
+
+ :Win95
+ net use k: \\trillion\bio_prog
+ net use p: \\bcfile\homes
+ goto end
+ :WinNT
+ net use k: \\trillion\bio_prog /persistent:no
+ net use p: \\bcfile\homes /persistent:no
+
+ :end
+ _________________________________________________________________
+
+Chapter 5. Passwords and Authentication
+
+ So far our configuration assumes that ordinary users don't have unix
+ logon access. A change to the adduser line above would allow unix
+ logon but it would be with passwords that may be different from the NT
+ logon. Clearly that won't suit everyone. Trying to explain to users
+ that they need to change their passwords in two seperate places is not
+ fun. Further, even if they cannot do a unix logon there are other
+ processes that might require authentication. We have a nice securely
+ encrypted password in /usr/local/samba/private/smbpasswd, why not use
+ it ?
+ _________________________________________________________________
+
+Syncing Passwords
+
+ Yes, its possible and seems the easiest way (initially anyway). The
+ FAQ details how to do so in the sections What is password sync and
+ should I use it ? and How do I get remote password (unix and SMB)
+ changing working ?
+ _________________________________________________________________
+
+Using PAM
+
+ Pam enabled systems have a much better solution available. The Samba
+ PDC server will offer to authenticate domain users to other processes
+ (either on this server or on the domain). With a suitable pam stack
+ such as Pam_smb you can get any pam aware application looking to the
+ samba password and can leave the password field in /etc/shadow or
+ /etc/passwd invalid.
+ _________________________________________________________________
+
+Authenticating other Samba Servers
+
+ In a domain that has a number of servers you only need one password
+ database. The machines that don't have their own ask the PDC to check
+ for them. This will work fine for a domain controlled by either a
+ Samba or NT machine.
+
+ To do so the Samba machine must be told to refer to the PDC and where
+ the PDC is. See the section in the NTDom FAQ called How do I get my
+ samba server to become a member ( not PDC ) of an NT domain?
+ _________________________________________________________________
+
+Chapter 6. Background
+
+History
+
+ It might help you understand the limitations of the PDC in Samba if
+ you read something of its history. Well, the history as I understand
+ it anyway.
+
+ For many years the Samba team have been developing Samba, some time
+ ago a number of people, possibly lead by Luke Leighton started
+ contributing NT PDC stuff. This was added to the 'head' stream (that
+ would eventually become the next version) and later to a seperate
+ stream (NTDom). They did so much that eventually this development
+ stream was so mutated that it could not be merged back into the main
+ stream and was abandoned towards the end of 1999. And that was very
+ sad because many users, myself include had become heavily dependant on
+ the NTController facilities it offered. Oh well...
+
+ The NTDom team continued on with their new found knowledge however and
+ built the TNG stream. Intended to be carefully controlled so that it
+ can be merged back into the main stream and benefiting from what they
+ learnt, it is a very different product to the origional NTDom product.
+ However, for a number of reasons, the merge did not take place and now
+ TNG is being developed at http://www.samba-tng.org.
+
+ Now, the NTDom things that the main strean 2.0.x version does is based
+ more on the old (initial version) abandoned code than on the TNG
+ ideas. It appears that version 2.2.0 will also include an improved
+ version of the 2.0.7 domain controller charactistics, not the TNG
+ ways. The developers have indicated that 2.2.0 will be further
+ developed incrementally and the ideas from TNG incorporated into it.
+
+ One more little wriggle is worth mentioning. At one stage the NTDom
+ stream was called Samba 2.1.0-prealpha and similar names. This is most
+ unfortunate because at least one book published advises people who
+ want to use NTDom Samba to get version 2.1.0 or later. As main stream
+ Samba will soon be called 2.2.0 and NOT officially supporting NTDom
+ Controlling functions, the potential for confusion is certainly there.
+ _________________________________________________________________
+
+The Future
+
+ There is a document on the Samba mirrors called 'Development' . It
+ offers the 'best guess' of what is planned for future releases of
+ Samba.
+
+ The future of Samba as a Primary Domain Controller appears rosie,
+ however be aware that its the future, not the present. The developers
+ are strongly committed to building a full featured PDC into Samba but
+ it will take time. If this version does not meet your requirements
+ then you should consider (in no particular order) :
+
+ * Wait. No, we don't know how long. Repeated asking won't help.
+ * Investigate the development versions, TNG perhaps or HEAD where
+ new code is being added all the time. Realise that development
+ code is often unstable, poorly documented and subject to change.
+ You will need to use cvs to download development versions.
+ * Join one of the Samba mailing lists so that you can find out what
+ is happening on the 'bleeding edge'.
+ _________________________________________________________________
+
+Getting further help
+
+ This document cannot possibly answer all your questions. Please
+ understand that its very likely that someone has been confrounted by
+ the same problem that you have. The FAQ discusses a number of possible
+ paths to take to get further help :
+
+ * Documents on the Samba Sites.
+ * Other web sites.
+ * Mailing list.
+
+ There is some discussion about guide lines for using the Mailing Lists
+ on the accompanying FAQ, please read them before posting.
diff --git a/docs/textdocs/security_level.txt b/docs/textdocs/security_level.txt
index dad4bd78314..e0e20662af7 100644
--- a/docs/textdocs/security_level.txt
+++ b/docs/textdocs/security_level.txt
@@ -1,5 +1,5 @@
!==
-!== security_level.txt for Samba release 2.2.0-alpha3 24 Mar 2001
+!== security_level.txt for Samba release 2.2.0a 23 Jun 2001
!==
Contributor: Andrew Tridgell
Updated: June 27, 1997
diff --git a/docs/yodldocs/README-NOW b/docs/yodldocs/README-NOW
new file mode 100644
index 00000000000..592d38c1351
--- /dev/null
+++ b/docs/yodldocs/README-NOW
@@ -0,0 +1,14 @@
+!==
+!== Notice of change of documentation format
+!==
+
+Samba is no longer using yodl as the source markup
+language for our documentation. As of release 2.2.0,
+we are using DocBook V4.1 exclusively (assuming you are not
+counting the ASCII files yet to be converted).
+
+Please see ../docbook/docbook.txt for more information
+on this.
+
+jerry carter
+SAMBA Team
diff --git a/examples/LDAP/README b/examples/LDAP/README
deleted file mode 100644
index e82289008bb..00000000000
--- a/examples/LDAP/README
+++ /dev/null
@@ -1,56 +0,0 @@
-!==
-!== README File for storing smbpasswd in LDAP
-!==
-!== written by Gerald Carter <jerry@samba.org>
-!==
-
-This is a quick and dirty means of storing smbpasswd entries
-in smbpasswd. Samba 2.2.x does not have any ability to grab
-this information directly from LDAP so you will need to
-periodically generate an smbpasswd from an ldapsearch
-"(objectclass=smbPasswordEntry)".
-
-Be aware of search limits on your client or server which prevent
-all entries from being returned in the search result.
-
-OpenLDAP 2.0.x
---------------
-
-A sample schema file (samba.schema) has been included for use
-with OpenLDAP 2.0.x. The OIDs used in this file are owned by
-the Samba team and generated from its own Enterprise number
-of 7165 (as issued by IANA).
-
-
-import_smnbpasswd.pl
---------------------
-
-Make sure you customize the local site variable in the perl script
-(i.e. ldapserver, rootdn, rootpw, etc...). The script reads from
-standard input and requires that user entries already exist
-in your directories containing the 'objectclass: posixAccount'
-value pair. For more information on this object and related schema,
-refer to RFC2307 and http://www.padl.com/software.html).
-
-The following will import an smbpasswd file into an LDAP directory
-
- $ cat smbpasswd | import_smbpasswd.pl
-
-export_smbpasswd.pl
--------------------
-
-Make sure you customize the local site variable in the perl script
-(i.e. ldapserver, rootdn, rootpw, etc...). You can then generate
-an smbpasswd file by executing
-
- $ export_smbpasswd.pl > smbpasswd
-
-NOTE: Server side (or client side) search limites may prevent
-all users from being listed. Check you directory server documentation
-for details.
-
-
-
-!==
-!== end of README
-!==
diff --git a/examples/LDAP/export_smbpasswd.pl b/examples/LDAP/export_smbpasswd.pl
deleted file mode 100644
index 3f67dc62427..00000000000
--- a/examples/LDAP/export_smbpasswd.pl
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/perl
-##
-## Example script to export ldap entries into an smbpasswd file format
-## using the Mozilla PerLDAP module.
-##
-## writen by jerry@samba.org
-##
-
-use Mozilla::LDAP::Conn;
-use Mozilla::LDAP::Entry;
-
-######################################################
-## Set these values to whatever you need for your site
-##
-
-$DN="ou=people,dc=plainjoe,dc=org";
-$ROOTDN="cn=Manager,dc=plainjoe,dc=org";
-$rootpw = "secret";
-$LDAPSERVER="localhost";
-
-##
-## end local site variables
-######################################################
-
-
-$conn = new Mozilla::LDAP::Conn ("$LDAPSERVER", "389", $ROOTDN, $rootpw );
-die "Unable to connect to LDAP server $LDAPSERVER" unless $conn;
-
-print "##\n";
-print "## Autogenerated smbpasswd file via ldapsearch\n";
-print "## from $LDAPSERVER ($DN)\n";
-print "##\n";
-
-## scheck for the existence of the posixAccount first
-$result = $conn->search ("$DN", "sub", "(objectclass=smbPasswordEntry)");
-
-
-## loop over the entries we found
-while ($result) {
-
- @uid = $result->getValue("uid");
- @uidNumber = $result->getValue("uidNumber");
- @lm_pw = $result->getValue("lmpassword");
- @nt_pw = $result->getValue("ntpassword");
- @acct = $result->getValue("acctFlags");
- @pwdLastSet = $result->getValue("pwdLastSet");
-
- if (($#uid+1) && ($#uidNumber+1)) {
-
- $lm_pw[0] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" if (! ($#lm_pw+1));
- $nt_pw[0] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" if (! ($#nt_pw+1));
- $acct[0] = "[DU ]" if (! ($#acct+1));
- $pwdLastSet[0] = "FFFFFFFF" if (! ($#pwdLastSet+1));
-
- print "$uid[0]:$uidNumber[0]:$lm_pw[0]:$nt_pw[0]:$acct[0]:LCT-$pwdLastSet[0]\n";
- }
-
- $result = $conn->nextEntry();
-
-}
-
-$conn->close();
-exit 0;
diff --git a/examples/LDAP/import_smbpasswd.pl b/examples/LDAP/import_smbpasswd.pl
deleted file mode 100644
index d19ee64488f..00000000000
--- a/examples/LDAP/import_smbpasswd.pl
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/perl
-##
-## Example script of how you could import and smbpasswd file into an LDAP
-## directory using the Mozilla PerLDAP module.
-##
-## writen by jerry@samba.org
-##
-
-use Mozilla::LDAP::Conn;
-use Mozilla::LDAP::Entry;
-
-#################################################
-## set these to a value appropriate for your site
-##
-
-$DN="ou=people,dc=plainjoe,dc=org";
-$ROOTDN="cn=Manager,dc=plainjoe,dc=org";
-$rootpw = "secret";
-$LDAPSERVER="localhost";
-
-##
-## end local site variables
-#################################################
-
-$conn = new Mozilla::LDAP::Conn ("$LDAPSERVER", "389", $ROOTDN, $rootpw );
-die "Unable to connect to LDAP server $LDAPSERVER" unless $conn;
-
-
-while ( $string = <$infile> ) {
- chop ($string);
-
- ## get the account information
- @smbentry = split (/:/, $string);
-
- ## check for the existence of the posixAccount first
-
- ## FIXME!! Should do a getownam() and let the NSS modules lookup the account
- ## This way you can have a UNIX account in /etc/passwd and the smbpasswd i
- ## entry in LDAP.
- $result = $conn->search ("$DN", "sub", "(&(uid=$smbentry[0])(objectclass=posixAccount))");
- if ( ! $result ) {
- print STDERR "uid=$smbentry[0] does not have a posixAccount entry in the directory!\n";
- next;
- }
-
- print "Updating [" . $result->getDN() . "]\n";
-
- ## Do we need to add the 'objectclass: smbPasswordEntry' attribute?
- if (! $result->hasValue("objectclass", "smbPasswordEntry")) {
- $result->addValue("objectclass", "smbPasswordEntry");
- }
-
- ## Set other attribute values
- $result->setValues ("lmPassword", $smbentry[2]);
- $result->setValues ("ntPassword", $smbentry[3]);
- $result->setValues ("acctFlags", $smbentry[4]);
- $result->setValues ("pwdLastSet", substr($smbentry[5],4));
-
- if (! $conn->update($result)) {
- print "Error updating!\n";
- }
-}
-
-$conn->close();
-exit 0;
diff --git a/examples/LDAP/samba.schema b/examples/LDAP/samba.schema
deleted file mode 100644
index 8d26cc5612c..00000000000
--- a/examples/LDAP/samba.schema
+++ /dev/null
@@ -1,36 +0,0 @@
-##
-## schema file for OpenLDAP 2.0.x
-## Schema for storing Samba's smbpasswd file in LDAP
-## OIDs are owned by the Samba Team
-##
-## Prerequisite schemas - uid & uidNumber (nis.schema)
-##
-## 1.3.1.5.1.4.1.7165.2.1.x - attributetypes
-## 1.3.1.5.1.4.1.7165.2.2.x - objectclasses
-##
-
-attributetype ( 1.3.6.1.4.1.7165.2.1.1 NAME 'lmPassword'
- DESC 'LanManager Passwd'
- EQUALITY caseIgnoreIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} )
-
-attributetype ( 1.3.6.1.4.1.7165.2.1.2 NAME 'ntPassword'
- DESC 'NT Passwd'
- EQUALITY caseIgnoreIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} )
-
-attributetype ( 1.3.6.1.4.1.7165.2.1.3 NAME 'pwdLastSet'
- DESC 'NT pwdLastSet'
- EQUALITY caseIgnoreIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{8} )
-
-attributetype ( 1.3.6.1.4.1.7165.2.1.4 NAME 'acctFlags'
- DESC 'Account Flags'
- EQUALITY caseIgnoreIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} )
-
-objectclass ( 1.3.1.5.1.4.1.7165.2.2.1 NAME 'smbPasswordEntry' SUP top AUXILIARY
- DESC 'Samba smbpasswd entry'
- MUST ( uid $ uidNumber )
- MAY ( lmPassword $ ntPassword $ pwdLastSet $ acctFlags ))
-
diff --git a/examples/VFS/README b/examples/VFS/README
index 825f8a961ff..c2f39f9727d 100644
--- a/examples/VFS/README
+++ b/examples/VFS/README
@@ -17,11 +17,6 @@ construction. The following VFS modules are given:
connect/disconnect, directory opens/create/remove,
file open/close/rename/unlink/chmod.
- block/
-
- A directory containing a sample module by Ronald Kuetemeier
- <ronald@kuetemeier.com> to block named symbolic link following.
-
The libtool program, available from your favourite GNU software
archive, is required to compile these programs.
diff --git a/examples/libsmbclient/testsmbc.c b/examples/libsmbclient/testsmbc.c
deleted file mode 100644
index 7aae9d85616..00000000000
--- a/examples/libsmbclient/testsmbc.c
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 2.0
- SMB client library test program
- Copyright (C) Andrew Tridgell 1998
- Copyright (C) Richard Sharpe 2000
- Copyright (C) John Terpsra 2000
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include <stdio.h>
-#include <errno.h>
-#include <sys/time.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <libsmbclient.h>
-
-void auth_fn(const char *server, const char *share,
- char *workgroup, int wgmaxlen, char *username, int unmaxlen,
- char *password, int pwmaxlen)
-{
- char temp[128];
-
- fprintf(stdout, "Need password for //%s/%s\n", server, share);
-
- fprintf(stdout, "Enter workgroup: [%s] ", workgroup);
- fgets(temp, sizeof(temp), stdin);
-
- if (temp[strlen(temp) - 1] == 0x0a) /* A new line? */
- temp[strlen(temp) - 1] = 0x00;
-
- if (temp[0]) strncpy(workgroup, temp, wgmaxlen - 1);
-
- fprintf(stdout, "Enter username: [%s] ", username);
- fgets(temp, sizeof(temp), stdin);
-
- if (temp[strlen(temp) - 1] == 0x0a) /* A new line? */
- temp[strlen(temp) - 1] = 0x00;
-
- if (temp[0]) strncpy(username, temp, unmaxlen - 1);
-
- fprintf(stdout, "Enter password: [%s] ", password);
- fgets(temp, sizeof(temp), stdin);
-
- if (temp[strlen(temp) - 1] == 0x0a) /* A new line? */
- temp[strlen(temp) - 1] = 0x00;
-
- if (temp[0]) strncpy(password, temp, pwmaxlen - 1);
-
-}
-
-int global_id = 0;
-
-void print_list_fn(struct print_job_info *pji)
-{
-
- fprintf(stdout, "Print job: ID: %u, Prio: %u, Size: %u, User: %s, Name: %s\n",
- pji->id, pji->priority, pji->size, pji->user, pji->name);
-
- global_id = pji->id;
-
-}
-
-int main(int argc, char *argv[])
-{
- int err, fd, dh1, dh2, dh3, dsize, dirc;
- const char *file = "smb://samba/public/testfile.txt";
- const char *file2 = "smb://samba/public/testfile2.txt";
- char buff[256];
- char dirbuf[512];
- char *dirp;
- struct stat st1, st2;
-
- err = smbc_init(auth_fn, 10); /* Initialize things */
-
- if (err < 0) {
-
- fprintf(stderr, "Initializing the smbclient library ...: %s\n", strerror(errno));
-
- }
-
- if (argc > 1) {
-
- /* Try to list the print jobs ... */
-
- if (smbc_list_print_jobs("smb://samba/pclp", print_list_fn) < 0) {
-
- fprintf(stderr, "Could not list print jobs: %s, %d\n", strerror(errno), errno);
- exit(1);
-
- }
-
- /* Try to delete the last job listed */
-
- if (global_id > 0) {
-
- fprintf(stdout, "Trying to delete print job %u\n", global_id);
-
- if (smbc_unlink_print_job("smb://samba/pclp", global_id) < 0) {
-
- fprintf(stderr, "Failed to unlink job id %u, %s, %u\n", global_id,
- strerror(errno), errno);
-
- exit(1);
-
- }
-
- }
-
- /* Try to print a file ... */
-
- if (smbc_print_file("smb://samba/public/testfile2.txt", "smb://samba/pclp") < 0) {
-
- fprintf(stderr, "Failed to print job: %s %u\n", strerror(errno), errno);
- exit(1);
-
- }
-
- /* Try to delete argv[1] as a file ... */
-
- if (smbc_unlink(argv[1]) < 0) {
-
- fprintf(stderr, "Could not unlink: %s, %s, %d\n",
- argv[1], strerror(errno), errno);
-
- exit(0);
-
- }
-
- if ((dh1 = smbc_opendir("smb://"))<1) {
-
- fprintf(stderr, "Could not open directory: smb://: %s\n",
- strerror(errno));
-
- exit(1);
-
- }
-
- if ((dh2 = smbc_opendir("smb://sambanet")) < 0) {
-
- fprintf(stderr, "Could not open directory: smb://sambanet: %s\n",
- strerror(errno));
-
- exit(1);
-
- }
-
- if ((dh3 = smbc_opendir("smb://samba")) < 0) {
-
- fprintf(stderr, "Could not open directory: smb://samba: %s\n",
- strerror(errno));
-
- exit(1);
-
- }
-
- fprintf(stdout, "Directory handles: %u, %u, %u\n", dh1, dh2, dh3);
-
- /* Now, list those directories, but in funny ways ... */
-
- dirp = (char *)dirbuf;
-
- if ((dirc = smbc_getdents(dh1, (struct smbc_dirent *)dirp,
- sizeof(dirbuf))) < 0) {
-
- fprintf(stderr, "Problems getting directory entries: %s\n",
- strerror(errno));
-
- exit(1);
-
- }
-
- /* Now, process the list of names ... */
-
- fprintf(stdout, "Directory listing, size = %u\n", dirc);
-
- while (dirc > 0) {
-
- dsize = ((struct smbc_dirent *)dirp)->dirlen;
- fprintf(stdout, "Dir Ent, Type: %u, Name: %s, Comment: %s\n",
- ((struct smbc_dirent *)dirp)->smbc_type,
- ((struct smbc_dirent *)dirp)->name,
- ((struct smbc_dirent *)dirp)->comment);
-
- dirp += dsize;
- (char *)dirc -= dsize;
-
- }
-
- dirp = (char *)dirbuf;
-
- if ((dirc = smbc_getdents(dh2, (struct smbc_dirent *)dirp,
- sizeof(dirbuf))) < 0) {
-
- fprintf(stderr, "Problems getting directory entries: %s\n",
- strerror(errno));
-
- exit(1);
-
- }
-
- /* Now, process the list of names ... */
-
- fprintf(stdout, "\nDirectory listing, size = %u\n", dirc);
-
- while (dirc > 0) {
-
- dsize = ((struct smbc_dirent *)dirp)->dirlen;
- fprintf(stdout, "Dir Ent, Type: %u, Name: %s, Comment: %s\n",
- ((struct smbc_dirent *)dirp)->smbc_type,
- ((struct smbc_dirent *)dirp)->name,
- ((struct smbc_dirent *)dirp)->comment);
-
- dirp += dsize;
- (char *)dirc -= dsize;
-
- }
-
- dirp = (char *)dirbuf;
-
- if ((dirc = smbc_getdents(dh3, (struct smbc_dirent *)dirp,
- sizeof(dirbuf))) < 0) {
-
- fprintf(stderr, "Problems getting directory entries: %s\n",
- strerror(errno));
-
- exit(1);
-
- }
-
- /* Now, process the list of names ... */
-
- fprintf(stdout, "Directory listing, size = %u\n", dirc);
-
- while (dirc > 0) {
-
- dsize = ((struct smbc_dirent *)dirp)->dirlen;
- fprintf(stdout, "\nDir Ent, Type: %u, Name: %s, Comment: %s\n",
- ((struct smbc_dirent *)dirp)->smbc_type,
- ((struct smbc_dirent *)dirp)->name,
- ((struct smbc_dirent *)dirp)->comment);
-
- (char *)dirp += dsize;
- (char *)dirc -= dsize;
-
- }
-
- exit(1);
-
- }
-
- /* For now, open a file on a server that is hard coded ... later will
- * read from the command line ...
- */
-
- fd = smbc_open(file, O_RDWR | O_CREAT | O_TRUNC, 0666);
-
- if (fd < 0) {
-
- fprintf(stderr, "Creating file: %s: %s\n", file, strerror(errno));
- exit(0);
-
- }
-
- fprintf(stdout, "Opened or created file: %s\n", file);
-
- /* Now, write some date to the file ... */
-
- bzero(buff, sizeof(buff));
- strcpy(buff, "Some test data for the moment ...");
-
- err = smbc_write(fd, buff, sizeof(buff));
-
- if (err < 0) {
-
- fprintf(stderr, "writing file: %s: %s\n", file, strerror(errno));
- exit(0);
-
- }
-
- fprintf(stdout, "Wrote %d bytes to file: %s\n", sizeof(buff), buff);
-
- /* Now, seek the file back to offset 0 */
-
- err = smbc_lseek(fd, SEEK_SET, 0);
-
- if (err < 0) {
-
- fprintf(stderr, "Seeking file: %s: %s\n", file, strerror(errno));
- exit(0);
-
- }
-
- fprintf(stdout, "Completed lseek on file: %s\n", file);
-
- /* Now, read the file contents back ... */
-
- err = smbc_read(fd, buff, sizeof(buff));
-
- if (err < 0) {
-
- fprintf(stderr, "Reading file: %s: %s\n", file, strerror(errno));
- exit(0);
-
- }
-
- fprintf(stdout, "Read file: %s\n", buff); /* Should check the contents */
-
- fprintf(stdout, "Now fstat'ing file: %s\n", file);
-
- err = smbc_fstat(fd, &st1);
-
- if (err < 0) {
-
- fprintf(stderr, "Fstat'ing file: %s: %s\n", file, strerror(errno));
- exit(0);
-
- }
-
-
- /* Now, close the file ... */
-
- err = smbc_close(fd);
-
- if (err < 0) {
-
- fprintf(stderr, "Closing file: %s: %s\n", file, strerror(errno));
-
- }
-
- /* Now, rename the file ... */
-
- err = smbc_rename(file, file2);
-
- if (err < 0) {
-
- fprintf(stderr, "Renaming file: %s to %s: %s\n", file, file2, strerror(errno));
-
- }
-
- fprintf(stdout, "Renamed file %s to %s\n", file, file2);
-
- /* Now, create a file and delete it ... */
-
- fprintf(stdout, "Now, creating file: %s so we can delete it.\n", file);
-
- fd = smbc_open(file, O_RDWR | O_CREAT, 0666);
-
- if (fd < 0) {
-
- fprintf(stderr, "Creating file: %s: %s\n", file, strerror(errno));
- exit(0);
-
- }
-
- fprintf(stdout, "Opened or created file: %s\n", file);
-
- err = smbc_close(fd);
-
- if (err < 0) {
-
- fprintf(stderr, "Closing file: %s: %s\n", file, strerror(errno));
- exit(0);
-
- }
-
- /* Now, delete the file ... */
-
- fprintf(stdout, "File %s created, now deleting ...\n", file);
-
- err = smbc_unlink(file);
-
- if (err < 0) {
-
- fprintf(stderr, "Deleting file: %s: %s\n", file, strerror(errno));
- exit(0);
-
- }
-
- /* Now, stat the file, file 2 ... */
-
- fprintf(stdout, "Now stat'ing file: %s\n", file);
-
- err = smbc_stat(file2, &st2);
-
- if (err < 0) {
-
- fprintf(stderr, "Stat'ing file: %s: %s\n", file, strerror(errno));
- exit(0);
-
- }
-
- fprintf(stdout, "Stat'ed file: %s. Size = %d, mode = %04X\n", file2,
- (int)st2.st_size, st2.st_mode);
- fprintf(stdout, " time: %s\n", ctime(&st2.st_atime));
- fprintf(stdout, "Earlier stat: %s, Size = %d, mode = %04X\n", file,
- (int)st1.st_size, st1.st_mode);
- fprintf(stdout, " time: %s\n", ctime(&st1.st_atime));
-
- /* Now, make a directory ... */
-
- fprintf(stdout, "Making directory smb://samba/public/make-dir\n");
-
- if (smbc_mkdir("smb://samba/public/make-dir", 0666) < 0) {
-
- fprintf(stderr, "Error making directory: smb://samba/public/make-dir: %s\n",
- strerror(errno));
-
- if (errno == EEXIST) { /* Try to delete the directory */
-
- fprintf(stdout, "Trying to delete directory: smb://samba/public/make-dir\n");
-
- if (smbc_rmdir("smb://samba/public/make-dir") < 0) { /* Error */
-
- fprintf(stderr, "Error removing directory: smb://samba/public/make-dir: %s\n", strerror(errno));
-
- exit(0);
-
- }
-
- fprintf(stdout, "Making directory: smb://samba/public/make-dir\n");
-
- if (smbc_mkdir("smb://samba/public/make-dir", 666) < 0) {
-
- fprintf(stderr, "Error making directory: smb://samba/public/make-dir: %s\n",
- strerror(errno));
-
- fprintf(stderr, "I give up!\n");
-
- exit(1);
-
- }
-
- }
-
- exit(0);
-
- }
-
- fprintf(stdout, "Made dir: make-dir\n");
- return 0;
-}
diff --git a/examples/libsmbclient/tree.c b/examples/libsmbclient/tree.c
deleted file mode 100644
index da60236e601..00000000000
--- a/examples/libsmbclient/tree.c
+++ /dev/null
@@ -1,812 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 2.0
- SMB client GTK+ tree-based application
- Copyright (C) Andrew Tridgell 1998
- Copyright (C) Richard Sharpe 2001
- Copyright (C) John Terpstra 2001
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* example-gtk+ application, ripped off from the gtk+ tree.c sample */
-
-#include <stdio.h>
-#include <errno.h>
-#include <gtk/gtk.h>
-#include "libsmbclient.h"
-
-static GtkWidget *clist;
-
-struct tree_data {
-
- guint32 type; /* Type of tree item, an SMBC_TYPE */
- char name[256]; /* May need to change this later */
-
-};
-
-void error_message(gchar *message) {
-
- GtkWidget *dialog, *label, *okay_button;
-
- /* Create the widgets */
-
- dialog = gtk_dialog_new();
- gtk_window_set_modal(GTK_WINDOW(dialog), TRUE);
- label = gtk_label_new (message);
- okay_button = gtk_button_new_with_label("Okay");
-
- /* Ensure that the dialog box is destroyed when the user clicks ok. */
-
- gtk_signal_connect_object (GTK_OBJECT (okay_button), "clicked",
- GTK_SIGNAL_FUNC (gtk_widget_destroy), dialog);
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area),
- okay_button);
-
- /* Add the label, and show everything we've added to the dialog. */
-
- gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox),
- label);
- gtk_widget_show_all (dialog);
-}
-
-/*
- * We are given a widget, and we want to retrieve its URL so we
- * can do a directory listing.
- *
- * We walk back up the tree, picking up pieces until we hit a server or
- * workgroup type and return a path from there
- */
-
-static char path_string[1024];
-
-char *get_path(GtkWidget *item)
-{
- GtkWidget *p = item;
- struct tree_data *pd;
- char *comps[1024]; /* We keep pointers to the components here */
- int i = 0, j, level,type;
-
- /* Walk back up the tree, getting the private data */
-
- level = GTK_TREE(item->parent)->level;
-
- /* Pick up this item's component info */
-
- pd = (struct tree_data *)gtk_object_get_user_data(GTK_OBJECT(item));
-
- comps[i++] = pd->name;
- type = pd->type;
-
- while (level > 0 && type != SMBC_SERVER && type != SMBC_WORKGROUP) {
-
- /* Find the parent and extract the data etc ... */
-
- p = GTK_WIDGET(p->parent);
- p = GTK_WIDGET(GTK_TREE(p)->tree_owner);
-
- pd = (struct tree_data *)gtk_object_get_user_data(GTK_OBJECT(p));
-
- level = GTK_TREE(item->parent)->level;
-
- comps[i++] = pd->name;
- type = pd->type;
-
- }
-
- /*
- * Got a list of comps now, should check that we did not hit a workgroup
- * when we got other things as well ... Later
- *
- * Now, build the path
- */
-
- snprintf(path_string, sizeof(path_string), "smb:/");
-
- for (j = i - 1; j >= 0; j--) {
-
- strncat(path_string, "/", sizeof(path_string) - strlen(path_string));
- strncat(path_string, comps[j], sizeof(path_string) - strlen(path_string));
-
- }
-
- fprintf(stdout, "Path string = %s\n", path_string);
-
- return path_string;
-
-}
-
-struct tree_data *make_tree_data(guint32 type, const char *name)
-{
- struct tree_data *p = (struct tree_data *)malloc(sizeof(struct tree_data));
-
- if (p) {
-
- p->type = type;
- strncpy(p->name, name, sizeof(p->name));
-
- }
-
- return p;
-
-}
-
-/* Note that this is called every time the user clicks on an item,
- whether it is already selected or not. */
-static void cb_select_child (GtkWidget *root_tree, GtkWidget *child,
- GtkWidget *subtree)
-{
- gint dh, err, dirlen;
- char dirbuf[512];
- struct smbc_dirent *dirp;
- struct stat st1;
- char path[1024], path1[1024];
-
- g_print ("select_child called for root tree %p, subtree %p, child %p\n",
- root_tree, subtree, child);
-
- /* Now, figure out what it is, and display it in the clist ... */
-
- gtk_clist_clear(GTK_CLIST(clist)); /* Clear the CLIST */
-
- /* Now, get the private data for the subtree */
-
- strncpy(path, get_path(child), 1024);
-
- if ((dh = smbc_opendir(path)) < 0) { /* Handle error */
-
- g_print("cb_select_child: Could not open dir %s, %s\n", path,
- strerror(errno));
-
- gtk_main_quit();
-
- return;
-
- }
-
- while ((err = smbc_getdents(dh, (struct smbc_dirent *)dirbuf,
- sizeof(dirbuf))) != 0) {
-
- if (err < 0) {
-
- g_print("cb_select_child: Could not read dir %s, %s\n", path,
- strerror(errno));
-
- gtk_main_quit();
-
- return;
-
- }
-
- dirp = (struct smbc_dirent *)dirbuf;
-
- while (err > 0) {
- gchar col1[128], col2[128], col3[128], col4[128];
- gchar *rowdata[4] = {col1, col2, col3, col4};
-
- dirlen = dirp->dirlen;
-
- /* Format each of the items ... */
-
- strncpy(col1, dirp->name, 128);
-
- col2[0] = col3[0] = col4[0] = (char)0;
-
- switch (dirp->smbc_type) {
-
- case SMBC_WORKGROUP:
-
- break;
-
- case SMBC_SERVER:
-
- strncpy(col2, (dirp->comment?dirp->comment:""), 128);
-
- break;
-
- case SMBC_FILE_SHARE:
-
- strncpy(col2, (dirp->comment?dirp->comment:""), 128);
-
- break;
-
- case SMBC_PRINTER_SHARE:
-
- strncpy(col2, (dirp->comment?dirp->comment:""), 128);
- break;
-
- case SMBC_COMMS_SHARE:
-
- break;
-
- case SMBC_IPC_SHARE:
-
- break;
-
- case SMBC_DIR:
- case SMBC_FILE:
-
- /* Get stats on the file/dir and see what we have */
-
- if ((strcmp(dirp->name, ".") != 0) &&
- (strcmp(dirp->name, "..") != 0)) {
-
- strncpy(path1, path, sizeof(path1));
- strncat(path1, "/", sizeof(path) - strlen(path));
- strncat(path1, dirp->name, sizeof(path) - strlen(path));
-
- if (smbc_stat(path1, &st1) < 0) {
-
- if (errno != EBUSY) {
-
- g_print("cb_select_child: Could not stat file %s, %s\n", path1,
- strerror(errno));
-
- gtk_main_quit();
-
- return;
-
- }
- else {
-
- strncpy(col2, "Device or resource busy", sizeof(col2));
-
- }
- }
- else {
- /* Now format each of the relevant things ... */
-
- snprintf(col2, sizeof(col2), "%c%c%c%c%c%c%c%c%c(%0X)",
- (st1.st_mode&S_IRUSR?'r':'-'),
- (st1.st_mode&S_IWUSR?'w':'-'),
- (st1.st_mode&S_IXUSR?'x':'-'),
- (st1.st_mode&S_IRGRP?'r':'-'),
- (st1.st_mode&S_IWGRP?'w':'-'),
- (st1.st_mode&S_IXGRP?'x':'-'),
- (st1.st_mode&S_IROTH?'r':'-'),
- (st1.st_mode&S_IWOTH?'w':'-'),
- (st1.st_mode&S_IXOTH?'x':'-'),
- st1.st_mode);
- snprintf(col3, sizeof(col3), "%u", st1.st_size);
- snprintf(col4, sizeof(col4), "%s", ctime(&st1.st_mtime));
- }
- }
-
- break;
-
- default:
-
- break;
- }
-
- gtk_clist_append(GTK_CLIST(clist), rowdata);
-
- (char *)dirp += dirlen;
- err -= dirlen;
-
- }
-
- }
-
-}
-
-/* Note that this is never called */
-static void cb_unselect_child( GtkWidget *root_tree,
- GtkWidget *child,
- GtkWidget *subtree )
-{
- g_print ("unselect_child called for root tree %p, subtree %p, child %p\n",
- root_tree, subtree, child);
-}
-
-/* for all the GtkItem:: and GtkTreeItem:: signals */
-static void cb_itemsignal( GtkWidget *item,
- gchar *signame )
-{
- GtkWidget *real_tree, *aitem, *subtree;
- gchar *name;
- GtkLabel *label;
- gint dh, err, dirlen, level;
- char dirbuf[512];
- struct smbc_dirent *dirp;
-
- label = GTK_LABEL (GTK_BIN (item)->child);
- /* Get the text of the label */
- gtk_label_get (label, &name);
-
- level = GTK_TREE(item->parent)->level;
-
- /* Get the level of the tree which the item is in */
- g_print ("%s called for item %s->%p, level %d\n", signame, name,
- item, GTK_TREE (item->parent)->level);
-
- real_tree = GTK_TREE_ITEM_SUBTREE(item); /* Get the subtree */
-
- if (strncmp(signame, "expand", 6) == 0) { /* Expand called */
- char server[128];
-
- if ((dh = smbc_opendir(get_path(item))) < 0) { /* Handle error */
- gchar errmsg[256];
-
- g_print("cb_itemsignal: Could not open dir %s, %s\n", get_path(item),
- strerror(errno));
-
- snprintf(errmsg, sizeof(errmsg), "cb_itemsignal: Could not open dir %s, %s\n", get_path(item), strerror(errno));
-
- error_message(errmsg);
-
- /* gtk_main_quit();*/
-
- return;
-
- }
-
- while ((err = smbc_getdents(dh, (struct smbc_dirent *)dirbuf,
- sizeof(dirbuf))) != 0) {
-
- if (err < 0) { /* An error, report it */
- gchar errmsg[256];
-
- g_print("cb_itemsignal: Could not read dir smbc://, %s\n",
- strerror(errno));
-
- snprintf(errmsg, sizeof(errmsg), "cb_itemsignal: Could not read dir smbc://, %s\n", strerror(errno));
-
- error_message(errmsg);
-
- /* gtk_main_quit();*/
-
- return;
-
- }
-
- dirp = (struct smbc_dirent *)dirbuf;
-
- while (err > 0) {
- struct tree_data *my_data;
-
- dirlen = dirp->dirlen;
-
- my_data = make_tree_data(dirp->smbc_type, dirp->name);
-
- if (!my_data) {
-
- g_print("Could not allocate space for tree_data: %s\n",
- dirp->name);
-
- gtk_main_quit();
- return;
-
- }
-
- aitem = gtk_tree_item_new_with_label(dirp->name);
-
- /* Connect all GtkItem:: and GtkTreeItem:: signals */
- gtk_signal_connect (GTK_OBJECT(aitem), "select",
- GTK_SIGNAL_FUNC(cb_itemsignal), "select");
- gtk_signal_connect (GTK_OBJECT(aitem), "deselect",
- GTK_SIGNAL_FUNC(cb_itemsignal), "deselect");
- gtk_signal_connect (GTK_OBJECT(aitem), "toggle",
- GTK_SIGNAL_FUNC(cb_itemsignal), "toggle");
- gtk_signal_connect (GTK_OBJECT(aitem), "expand",
- GTK_SIGNAL_FUNC(cb_itemsignal), "expand");
- gtk_signal_connect (GTK_OBJECT(aitem), "collapse",
- GTK_SIGNAL_FUNC(cb_itemsignal), "collapse");
- /* Add it to the parent tree */
- gtk_tree_append (GTK_TREE(real_tree), aitem);
-
- gtk_widget_show (aitem);
-
- gtk_object_set_user_data(GTK_OBJECT(aitem), (gpointer)my_data);
-
- fprintf(stdout, "Added: %s, len: %u\n", dirp->name, dirlen);
-
- if (dirp->smbc_type != SMBC_FILE &&
- dirp->smbc_type != SMBC_IPC_SHARE &&
- (strcmp(dirp->name, ".") != 0) &&
- (strcmp(dirp->name, "..") !=0)){
-
- subtree = gtk_tree_new();
- gtk_tree_item_set_subtree(GTK_TREE_ITEM(aitem), subtree);
-
- gtk_signal_connect(GTK_OBJECT(subtree), "select_child",
- GTK_SIGNAL_FUNC(cb_select_child), real_tree);
- gtk_signal_connect(GTK_OBJECT(subtree), "unselect_child",
- GTK_SIGNAL_FUNC(cb_unselect_child), real_tree);
-
- }
-
- (char *)dirp += dirlen;
- err -= dirlen;
-
- }
-
- }
-
- smbc_closedir(dh);
-
- }
- else if (strncmp(signame, "collapse", 8) == 0) {
- GtkWidget *subtree = gtk_tree_new();
-
- gtk_tree_remove_items(GTK_TREE(real_tree), GTK_TREE(real_tree)->children);
-
- gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), subtree);
-
- gtk_signal_connect (GTK_OBJECT(subtree), "select_child",
- GTK_SIGNAL_FUNC(cb_select_child), real_tree);
- gtk_signal_connect (GTK_OBJECT(subtree), "unselect_child",
- GTK_SIGNAL_FUNC(cb_unselect_child), real_tree);
-
- }
-
-}
-
-static void cb_selection_changed( GtkWidget *tree )
-{
- GList *i;
-
- g_print ("selection_change called for tree %p\n", tree);
- g_print ("selected objects are:\n");
-
- i = GTK_TREE_SELECTION(tree);
- while (i){
- gchar *name;
- GtkLabel *label;
- GtkWidget *item;
-
- /* Get a GtkWidget pointer from the list node */
- item = GTK_WIDGET (i->data);
- label = GTK_LABEL (GTK_BIN (item)->child);
- gtk_label_get (label, &name);
- g_print ("\t%s on level %d\n", name, GTK_TREE
- (item->parent)->level);
- i = i->next;
- }
-}
-
-/*
- * Expand or collapse the whole network ...
- */
-static void cb_wholenet(GtkWidget *item, gchar *signame)
-{
- GtkWidget *real_tree, *aitem, *subtree;
- gchar *name;
- GtkLabel *label;
- gint dh, err, dirlen;
- char dirbuf[512];
- struct smbc_dirent *dirp;
-
- label = GTK_LABEL (GTK_BIN (item)->child);
- gtk_label_get (label, &name);
- g_print ("%s called for item %s->%p, level %d\n", signame, name,
- item, GTK_TREE (item->parent)->level);
-
- real_tree = GTK_TREE_ITEM_SUBTREE(item); /* Get the subtree */
-
- if (strncmp(signame, "expand", 6) == 0) { /* Expand called */
-
- if ((dh = smbc_opendir("smb://")) < 0) { /* Handle error */
-
- g_print("cb_wholenet: Could not open dir smbc://, %s\n",
- strerror(errno));
-
- gtk_main_quit();
-
- return;
-
- }
-
- while ((err = smbc_getdents(dh, (struct smbc_dirent *)dirbuf,
- sizeof(dirbuf))) != 0) {
-
- if (err < 0) { /* An error, report it */
-
- g_print("cb_wholenet: Could not read dir smbc://, %s\n",
- strerror(errno));
-
- gtk_main_quit();
-
- return;
-
- }
-
- dirp = (struct smbc_dirent *)dirbuf;
-
- while (err > 0) {
- struct tree_data *my_data;
-
- dirlen = dirp->dirlen;
-
- my_data = make_tree_data(dirp->smbc_type, dirp->name);
-
- aitem = gtk_tree_item_new_with_label(dirp->name);
-
- /* Connect all GtkItem:: and GtkTreeItem:: signals */
- gtk_signal_connect (GTK_OBJECT(aitem), "select",
- GTK_SIGNAL_FUNC(cb_itemsignal), "select");
- gtk_signal_connect (GTK_OBJECT(aitem), "deselect",
- GTK_SIGNAL_FUNC(cb_itemsignal), "deselect");
- gtk_signal_connect (GTK_OBJECT(aitem), "toggle",
- GTK_SIGNAL_FUNC(cb_itemsignal), "toggle");
- gtk_signal_connect (GTK_OBJECT(aitem), "expand",
- GTK_SIGNAL_FUNC(cb_itemsignal), "expand");
- gtk_signal_connect (GTK_OBJECT(aitem), "collapse",
- GTK_SIGNAL_FUNC(cb_itemsignal), "collapse");
-
- gtk_tree_append (GTK_TREE(real_tree), aitem);
- /* Show it - this can be done at any time */
- gtk_widget_show (aitem);
-
- gtk_object_set_user_data(GTK_OBJECT(aitem), (gpointer)my_data);
-
- fprintf(stdout, "Added: %s, len: %u\n", dirp->name, dirlen);
-
- subtree = gtk_tree_new();
-
- gtk_tree_item_set_subtree(GTK_TREE_ITEM(aitem), subtree);
-
- gtk_signal_connect(GTK_OBJECT(subtree), "select_child",
- GTK_SIGNAL_FUNC(cb_select_child), real_tree);
- gtk_signal_connect(GTK_OBJECT(subtree), "unselect_child",
- GTK_SIGNAL_FUNC(cb_unselect_child), real_tree);
-
- (char *)dirp += dirlen;
- err -= dirlen;
-
- }
-
- }
-
- smbc_closedir(dh);
-
- }
- else { /* Must be collapse ... FIXME ... */
- GtkWidget *subtree = gtk_tree_new();
-
- gtk_tree_remove_items(GTK_TREE(real_tree), GTK_TREE(real_tree)->children);
-
- gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), subtree);
-
- gtk_signal_connect (GTK_OBJECT(subtree), "select_child",
- GTK_SIGNAL_FUNC(cb_select_child), real_tree);
- gtk_signal_connect (GTK_OBJECT(subtree), "unselect_child",
- GTK_SIGNAL_FUNC(cb_unselect_child), real_tree);
-
-
- }
-
-}
-
-/* Should put up a dialog box to ask the user for username and password */
-
-static void
-auth_fn(const char *server, const char *share,
- char *workgroup, int wgmaxlen, char *username, int unmaxlen,
- char *password, int pwmaxlen)
-{
-
- strncpy(username, "test", unmaxlen);
- strncpy(password, "test", pwmaxlen);
-
-}
-
-static char *col_titles[] = {
- "Name", "Attributes", "Size", "Modification Date",
-};
-
-int main( int argc,
- char *argv[] )
-{
- GtkWidget *window, *scrolled_win, *scrolled_win2, *tree;
- GtkWidget *subtree, *item, *main_hbox, *r_pane, *l_pane;
- gint err, dh;
- gint i;
- char dirbuf[512];
- struct smbc_dirent *dirp;
-
- gtk_init (&argc, &argv);
-
- /* Init the smbclient library */
-
- err = smbc_init(auth_fn, 10);
-
- /* Print an error response ... */
-
- if (err < 0) {
-
- fprintf(stderr, "smbc_init returned %s (%i)\nDo you have a ~/.smb/smb.conf file?\n", strerror(errno), errno);
- exit(1);
-
- }
-
- /* a generic toplevel window */
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_widget_set_name(window, "main browser window");
- gtk_signal_connect (GTK_OBJECT(window), "delete_event",
- GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
- gtk_window_set_title(GTK_WINDOW(window), "The Linux Windows Network Browser");
- gtk_widget_set_usize(GTK_WIDGET(window), 750, -1);
- gtk_container_set_border_width (GTK_CONTAINER(window), 5);
-
- gtk_widget_show (window);
-
- /* A container for the two panes ... */
-
- main_hbox = gtk_hbox_new(FALSE, 1);
- gtk_container_border_width(GTK_CONTAINER(main_hbox), 1);
- gtk_container_add(GTK_CONTAINER(window), main_hbox);
-
- gtk_widget_show(main_hbox);
-
- l_pane = gtk_hpaned_new();
- gtk_paned_gutter_size(GTK_PANED(l_pane), (GTK_PANED(l_pane))->handle_size);
- r_pane = gtk_hpaned_new();
- gtk_paned_gutter_size(GTK_PANED(r_pane), (GTK_PANED(r_pane))->handle_size);
- gtk_container_add(GTK_CONTAINER(main_hbox), l_pane);
- gtk_widget_show(l_pane);
-
- /* A generic scrolled window */
- scrolled_win = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_widget_set_usize (scrolled_win, 150, 200);
- gtk_container_add (GTK_CONTAINER(l_pane), scrolled_win);
- gtk_widget_show (scrolled_win);
-
- /* Another generic scrolled window */
- scrolled_win2 = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win2),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_widget_set_usize (scrolled_win2, 150, 200);
- gtk_paned_add2 (GTK_PANED(l_pane), scrolled_win2);
- gtk_widget_show (scrolled_win2);
-
- /* Create the root tree */
- tree = gtk_tree_new();
- g_print ("root tree is %p\n", tree);
- /* connect all GtkTree:: signals */
- gtk_signal_connect (GTK_OBJECT(tree), "select_child",
- GTK_SIGNAL_FUNC(cb_select_child), tree);
- gtk_signal_connect (GTK_OBJECT(tree), "unselect_child",
- GTK_SIGNAL_FUNC(cb_unselect_child), tree);
- gtk_signal_connect (GTK_OBJECT(tree), "selection_changed",
- GTK_SIGNAL_FUNC(cb_selection_changed), tree);
- /* Add it to the scrolled window */
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrolled_win),
- tree);
- /* Set the selection mode */
- gtk_tree_set_selection_mode (GTK_TREE(tree),
- GTK_SELECTION_MULTIPLE);
- /* Show it */
- gtk_widget_show (tree);
-
- /* Now, create a clist and attach it to the second pane */
-
- clist = gtk_clist_new_with_titles(4, col_titles);
-
- gtk_container_add (GTK_CONTAINER(scrolled_win2), clist);
-
- gtk_widget_show(clist);
-
- /* Now, build the top level display ... */
-
- if ((dh = smbc_opendir("smb:///")) < 0) {
-
- fprintf(stderr, "Could not list default workgroup: smb:///: %s\n",
- strerror(errno));
-
- exit(1);
-
- }
-
- /* Create a tree item for Whole Network */
-
- item = gtk_tree_item_new_with_label ("Whole Network");
- /* Connect all GtkItem:: and GtkTreeItem:: signals */
- gtk_signal_connect (GTK_OBJECT(item), "select",
- GTK_SIGNAL_FUNC(cb_itemsignal), "select");
- gtk_signal_connect (GTK_OBJECT(item), "deselect",
- GTK_SIGNAL_FUNC(cb_itemsignal), "deselect");
- gtk_signal_connect (GTK_OBJECT(item), "toggle",
- GTK_SIGNAL_FUNC(cb_itemsignal), "toggle");
- gtk_signal_connect (GTK_OBJECT(item), "expand",
- GTK_SIGNAL_FUNC(cb_wholenet), "expand");
- gtk_signal_connect (GTK_OBJECT(item), "collapse",
- GTK_SIGNAL_FUNC(cb_wholenet), "collapse");
- /* Add it to the parent tree */
- gtk_tree_append (GTK_TREE(tree), item);
- /* Show it - this can be done at any time */
- gtk_widget_show (item);
-
- subtree = gtk_tree_new(); /* A subtree for Whole Network */
-
- gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), subtree);
-
- gtk_signal_connect (GTK_OBJECT(subtree), "select_child",
- GTK_SIGNAL_FUNC(cb_select_child), tree);
- gtk_signal_connect (GTK_OBJECT(subtree), "unselect_child",
- GTK_SIGNAL_FUNC(cb_unselect_child), tree);
-
- /* Now, get the items in smb:/// and add them to the tree */
-
- dirp = (struct smbc_dirent *)dirbuf;
-
- while ((err = smbc_getdents(dh, (struct smbc_dirent *)dirbuf,
- sizeof(dirbuf))) != 0) {
-
- if (err < 0) { /* Handle the error */
-
- fprintf(stderr, "Could not read directory for smbc:///: %s\n",
- strerror(errno));
-
- exit(1);
-
- }
-
- fprintf(stdout, "Dir len: %u\n", err);
-
- while (err > 0) { /* Extract each entry and make a sub-tree */
- struct tree_data *my_data;
- int dirlen = dirp->dirlen;
-
- my_data = make_tree_data(dirp->smbc_type, dirp->name);
-
- item = gtk_tree_item_new_with_label(dirp->name);
- /* Connect all GtkItem:: and GtkTreeItem:: signals */
- gtk_signal_connect (GTK_OBJECT(item), "select",
- GTK_SIGNAL_FUNC(cb_itemsignal), "select");
- gtk_signal_connect (GTK_OBJECT(item), "deselect",
- GTK_SIGNAL_FUNC(cb_itemsignal), "deselect");
- gtk_signal_connect (GTK_OBJECT(item), "toggle",
- GTK_SIGNAL_FUNC(cb_itemsignal), "toggle");
- gtk_signal_connect (GTK_OBJECT(item), "expand",
- GTK_SIGNAL_FUNC(cb_itemsignal), "expand");
- gtk_signal_connect (GTK_OBJECT(item), "collapse",
- GTK_SIGNAL_FUNC(cb_itemsignal), "collapse");
- /* Add it to the parent tree */
- gtk_tree_append (GTK_TREE(tree), item);
- /* Show it - this can be done at any time */
- gtk_widget_show (item);
-
- gtk_object_set_user_data(GTK_OBJECT(item), (gpointer)my_data);
-
- fprintf(stdout, "Added: %s, len: %u\n", dirp->name, dirlen);
-
- subtree = gtk_tree_new();
-
- gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), subtree);
-
- gtk_signal_connect (GTK_OBJECT(subtree), "select_child",
- GTK_SIGNAL_FUNC(cb_select_child), tree);
- gtk_signal_connect (GTK_OBJECT(subtree), "unselect_child",
- GTK_SIGNAL_FUNC(cb_unselect_child), tree);
-
- (char *)dirp += dirlen;
- err -= dirlen;
-
- }
-
- }
-
- smbc_closedir(dh); /* FIXME, check for error :-) */
-
- /* Show the window and loop endlessly */
- gtk_main();
- return 0;
-}
-/* example-end */
diff --git a/examples/misc/modify_samba_config.pl b/examples/misc/modify_samba_config.pl
deleted file mode 100755
index eb997f9b0c8..00000000000
--- a/examples/misc/modify_samba_config.pl
+++ /dev/null
@@ -1,154 +0,0 @@
-#!/usr/bin/perl
-
-##
-## Simple example of how to implement a '[add|delete] share command' for
-## use with the Windows NT Server Manager. See smb.conf(5) for details
-## on the '[add|delete] share command'
-##
-## Author : Gerald (Jerry) Carter <jerry@samba.org>
-##
-
-use POSIX qw(tmpnam);
-
-##
-## local variables
-##
-my $delete_mode = undef;
-my $add_mode = undef;
-my $tmp_file_name = undef;
-
-
-## check for correct parameters
-if ($#ARGV == 1) {
- $delete_mode = 1;
-}
-elsif ($#ARGV == 3) {
- $add_mode = 1;
-}
-else {
- print "Usage: $0 configfile share [path] [comment]\n";
- exit -1;
-}
-
-## first param is always the config file
-open (CONFIGFILE, "$ARGV[0]") || die "Unable to open $ARGV[0] for reading!\n";
-
-## FIXME!! Right now we throw away all comments in the file.
-while (<CONFIGFILE>) {
-
- chomp($_);
-
- ## eat leading whitespace
- $_ =~ s/^\s*//;
-
- ## eat trailing whitespace
- $_ =~ s/\s*$//;
-
-
- ## throw away comments
- next if (($_ =~ /^#/) || ($_ =~ /^;/));
-
- ## set the current section name for storing the hash
- if ($_ =~ /^\[.*\]$/) {
-
- $_ = substr($_, 1, length($_)-2);
-
- if ( length($_) ) {
- $section = $_;
- }
- else {
- print "Bad Section Name - no closing ]\n";
- exit -1;
- }
-
- next;
- }
-
- ## check for a param = value
- if ($_ =~ /=/) {
- ($param, $value) = split (/=/, $_);
- $param =~ s/./\l$&/g;
- $param =~ s/\s+//g;
- $value =~ s/^\s+//;
-
- $config{$section}{$param} = $value;
-
- next;
- }
-
- ## should have a hash of hashes indexed by section name
-}
-close (CONFIGFILE);
-
-##
-## We have the smb.conf in our hash of hashes now.
-## Add or delete
-##
-if ($add_mode) {
- $config{$ARGV[1]}{'path'} = $ARGV[2];
- $config{$ARGV[1]}{'comment'} = $ARGV[3];
-}
-elsif ($delete_mode) {
- delete $config{$ARGV[1]};
-}
-
-##
-## Print the resulting configuration
-##
-#do {
-# $tmp_file_name = tmpnam();
-# print "Using temporary file - $tmp_file_name\n";
-#} while (!sysopen(TMP, $tmp_file_name, O_RDWR|O_CREAT|O_EXCL));
-$tmp_file_name = tmpnam();
-open (TMP, ">$tmp_file_name") || die "Unable to open temporary file for writing!\n";
-
-PrintConfigFile(TMP);
-
-## now overwrite the original config file
-close (TMP);
-system ("cp -pf $ARGV[0] $ARGV[0].bak");
-system ("cp -pf $tmp_file_name $ARGV[0]");
-unlink $tmp_file_name;
-
-
-exit 0;
-
-
-
-
-
-#######################################################################################
-## PrintConfigFile()
-##
-sub PrintConfigFile {
- my ($output) = @_;
-
- ## print the file back out, beginning with the global section
- print $output "#\n# Generated by $0\n#\n";
-
- PrintSection ($output, 'global', $config{'global'});
-
- foreach $section (keys %config) {
-
- if ("$section" ne "global") {
- print $output "## Section - [$section]\n";
- PrintSection ($output, $section, $config{$section});
- }
- }
-
- print $output "#\n# end of generated smb.conf\n#\n";
-}
-
-#######################################################################################
-## PrintSection()
-##
-sub PrintSection {
- my ($outfile, $name, $section) = @_;
-
- print $outfile "[$name]\n";
- foreach $param (keys %$section) {
- print $outfile "\t$param".' 'x(25-length($param)). " = $$section{$param}\n";
- }
- print $outfile "\n";
-
-}
diff --git a/packaging/Caldera/OpenLinux/makerpms.sh.tmpl b/packaging/Caldera/OpenLinux/makerpms.sh.tmpl
index e7ba1d96230..5166db9b768 100644
--- a/packaging/Caldera/OpenLinux/makerpms.sh.tmpl
+++ b/packaging/Caldera/OpenLinux/makerpms.sh.tmpl
@@ -5,38 +5,15 @@ SPECDIR=${SPECDIR:-/usr/src/OpenLinux/SPECS}
SRCDIR=${SRCDIR:-/usr/src/OpenLinux/SOURCES}
USERID=`id -u`
GRPID=`id -g`
-devel=0;
-old=0;
-# Do some argument parsing...
-if [ z$1 = z"devel" ]; then
- devel=1;
- shift
-fi
-if [ z$1 = z"old" ]; then
- old=1;
- shift
-fi
-
-# Start preparing the packages...
-if [ $devel -ne 0 ]; then
- ( cd ../../../.. ; chown -R ${USERID}.${GRPID} samba; mv samba samba-PVERSION )
- ( cd ../../../.. ; tar czvf ${SRCDIR}/samba-PVERSION.tar.gz samba-PVERSION; mv samba-PVERSION samba )
-else
- ( cd ../../../.. ; chown -R ${USERID}.${GRPID} samba-PVERSION )
- ( cd ../../../.. ; tar czvf ${SRCDIR}/samba-PVERSION.tar.gz samba-PVERSION )
-fi
-
-cp -af *.spec *.spec-lsb $SPECDIR
+( cd ../../../.. ; chown -R ${USERID}.${GRPID} ${SRCDIR}/samba )
+( cd ../../../.. ; tar czvf ${SRCDIR}/samba-PVERSION-PRELEASE.tar.gz samba )
+cp -a *.spec *.spec-lsb $SPECDIR
for src in *.patch; do
trg=`echo $src | sed 's;xxxxxx;PVERSION;'`
cp -a $src $SRCDIR/$trg
done
-
-# Start building the package
cd $SPECDIR
-if [ $old -eq 0 ]; then
-mv -f samba2.spec samba2.spec-nonlsb
-ln -f samba2.spec-lsb samba2.spec
-fi
+mv samba2.spec samba2.spec-nonlsb
+ln samba2.spec-lsb samba2.spec
rpm -ba -v samba2.spec
diff --git a/packaging/Caldera/OpenLinux/samba.pam b/packaging/Caldera/OpenLinux/samba.pam
index 8802f78e56b..baa8ca37205 100644
--- a/packaging/Caldera/OpenLinux/samba.pam
+++ b/packaging/Caldera/OpenLinux/samba.pam
@@ -3,9 +3,7 @@
#
# The PAM configuration file for the `samba' service
#
-auth required /lib/security/pam_pwdb.so nullok nodelay # audit
-# auth required /lib/security/pam_smbpass.so nodelay
-account required /lib/security/pam_pwdb.so nodelay # audit
+auth required /lib/security/pam_pwdb.so nullok nodelay # shadow audit
+account required /lib/security/pam_pwdb.so audit nodelay
session required /lib/security/pam_pwdb.so nodelay
password required /lib/security/pam_pwdb.so # shadow md5
-#password required /lib/security/pam_smbpass.so nodelay smbconf=/etc/samba.d/smb.conf
diff --git a/packaging/Caldera/OpenLinux/samba2.spec-lsb.tmpl b/packaging/Caldera/OpenLinux/samba2.spec-lsb.tmpl
index 47050a8c861..d527b07ecee 100644
--- a/packaging/Caldera/OpenLinux/samba2.spec-lsb.tmpl
+++ b/packaging/Caldera/OpenLinux/samba2.spec-lsb.tmpl
@@ -27,7 +27,7 @@ Requires : libpam >= 0.66, SysVinit-scripts >= 1.04-6
BuildRoot : /tmp/%{Name}-%{Version}
-Source: ftp://ftp.samba.org/pub/samba/%{Name}-%{Version}.tar.gz
+Source: ftp://ftp.samba.org/pub/samba/%{Name}-%{Version}-%{date}.tar.gz
#Patch0: %{Name}-%{Version}-smbmount.patch
#Patch1: %{Name}-%{Version}-install.patch
#Patch2: %{Name}-%{Version}-smbconf.patch
@@ -182,7 +182,7 @@ verificar rapidamente o efeite de qualquer alteração.
%Prep
-%setup
+%setup -n samba
#%patch0 -p1
#%patch1 -p1
#%patch2 -p1
@@ -241,7 +241,8 @@ for i in htmldocs/DOMAIN_MEMBER.html htmldocs/Samba-HOWTO-Collection.html \
docbook/projdoc/DOMAIN_MEMBER.sgml docbook/projdoc/DOMAIN_MEMBER.sgml \
docbook/faq/samba-pdc-faq.sgml docbook/howto/samba-pdc-howto.sgml \
docbook/manpages/smbclient.1.sgml docbook/manpages/smbd.8.sgml \
- docbook/projdoc/ENCRYPTION.sgml manpages/smbclient.1 manpages/smbd.8 ; do
+ docbook/projdoc/ENCRYPTION.sgml textdocs/samba-pdc-faq.txt \
+ textdocs/samba-pdc-howto.txt manpages/smbclient.1 manpages/smbd.8 ; do
%{fixUP} -vT docs/$i -e '
s:/usr/local/samba/private/FOREST.SLEEPY.SID:/var/lock/samba.d/FOREST.SLEEPY.SID: +
s:/usr/local/samba/private:/usr/bin:g +
@@ -255,6 +256,9 @@ done
%{fixUP} -vT docs/htmldocs/samba-pdc-faq.html -e '
s:/usr/local/src:/usr/src:g ;
'
+%{fixUP} -vT docs/textdocs/PRINTER_DRIVER.txt -e '
+ s:/usr/local/samba/printer:/var/spool/samba:g ;
+'
# End of DirtyHack(TM)
@@ -272,17 +276,15 @@ CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \
--with-swatdir='$(DESTDIR)/usr/share/swat' \
--with-sambabook='$(DESTDIR)/usr/share/swat/using_samba' \
--with-configdir='$(DESTDIR)'%{EtcSamba} \
- --with-codepagedir='$(DESTDIR)'/usr/share/samba/codepages \
--without-smbwrapper \
--with-smbmount \
--with-pam \
- --with-pam_smbpass \
--with-netatalk \
--with-quotas \
--with-utmp \
--with-syslog
-make LOGFILEBASE=/var/log/samba.d all nsswitch/libnss_wins.so debug2html bin/smbspool
+make LOGFILEBASE=/var/log/samba.d all nsswitch debug2html bin/smbspool
%Install
@@ -292,10 +294,11 @@ VVS=packaging/%{Vendor}/%{Dist}
mkdir -p $DESTDIR/etc/{{logrotate,pam}.d,sysconfig/daemons}
mkdir -p $DESTDIR/var/{lo{ck,g}/samba.d,spool/samba}
mkdir -p $DESTDIR/usr/share/swat/using_samba/{gifs,figs}
+mkdir -p $DESTDIR/usr/share/samba/codepages
mkdir -p $DESTDIR/lib/security
mkdir -p $DESTDIR/%{LSBservedir}/{netlogon,profiles,Public}
mkdir -p $DESTDIR/etc/skel/Samba
-mkdir -p $DESTDIR/usr/share/samba/codepages/src $DESTDIR/sbin
+mkdir -p $DESTDIR%{EtcSamba}/codepages/src $DESTDIR/sbin
mkdir -p $DESTDIR/%{SVIdir}
make LOGFILEBASE=/var/log/samba.d -C source install
@@ -303,7 +306,7 @@ make LOGFILEBASE=/var/log/samba.d -C source install
strip $DESTDIR/usr/bin/smb{mnt,umount}
#mv $DESTDIR/usr/bin/{make,add,conv}* $DESTDIR/usr/bin
-cp -p source/codepages/codepage_def.??? $DESTDIR/usr/share/samba/codepages/src
+cp -p source/codepages/codepage_def.??? $DESTDIR%{EtcSamba}/codepages/src
# Install the nsswitch library extension file
install -m 755 source/nsswitch/libnss_wins.so $DESTDIR/lib/libnss_wins.so.2.0
@@ -341,9 +344,6 @@ cp -p $VVS/README.home $DESTDIR/etc/skel/Samba/README.txt
cp -p $VVS/README.Public $DESTDIR/%{LSBservedir}/Public/README.txt
cp -p $VVS/README.profiles $DESTDIR/%{LSBservedir}/profiles/README.txt
-# Add PAM smbpass facility
-mv $DESTDIR/usr/bin/pam_smbpass.so $DESTDIR/lib/security
-
install -m 755 $VVS/samba.init-lsb $DESTDIR/%{SVIdir}/%{Name}
for f in testparm testprns; do
@@ -414,9 +414,6 @@ swat swat
%{_defaultdocdir}/samba- doc
tmp IGNORED
man IGNORED
-lib/security IGNORED
-/src/$ IGNORED
-/usr/private/$ IGNORED
@default@
EOF
cat << 'EOF' | %{mkLists} -f -a samba
@@ -424,8 +421,7 @@ cat << 'EOF' | %{mkLists} -f -a samba
Samba/README.txt base
^/etc config-IGNORED
%{_defaultdocdir}/samba-[^/]+/(COPYING|README$) base
-libnss_wins.* base
-pam_smbpass.so base
+libnss_wins.so base
%{_defaultdocdir}/samba-[^/]+/(COPYING|README$) base
%{_defaultdocdir}/samba- doc
smb(mount|mnt|umount) smbfs
@@ -454,16 +450,7 @@ test "$1" = "0" || exit 0
/usr/lib/LSB/init-remove %{Name}
# We want to remove the browse.dat and wins.dat files so they can not
# interfer with a new version of samba!
-rm -f /var/lock/samba/browse.dat
-rm -f /var/lock/samba/{brlock,connections,locking,messages}.tdb
-if [ -e /var/lock/samba.d/namelist.debug ]; then
- rm -f /var/lock/samba.d/namelist.debug
-fi
-rm -f /var/lock/samba/unexpected.tdb
-rm -f /var/lock/samba/{smbd,nmbd}.pid
-
-# Note: We MUST keep:
-# winbindd_*, sshare_info*, printing*, ntdrivers*
+rm -f /var/lock/samba/{browse,wins}.dat
%PostUn -n swat
@@ -503,4 +490,4 @@ test "$1" = "0" || exit 0
%ChangeLog
* Mon Jan 01 1997 ...
-$Id: samba2.spec-lsb.tmpl,v 1.1.2.20 2001/05/19 06:33:06 jht Exp $
+$Id: samba2.spec-lsb.tmpl,v 1.1.2.17 2001/04/15 00:33:29 jht Exp $
diff --git a/packaging/Caldera/OpenLinux/samba2.spec.tmpl b/packaging/Caldera/OpenLinux/samba2.spec.tmpl
index b57c5ad9733..ebe501dcc24 100644
--- a/packaging/Caldera/OpenLinux/samba2.spec.tmpl
+++ b/packaging/Caldera/OpenLinux/samba2.spec.tmpl
@@ -28,7 +28,7 @@ Requires : libpam >= 0.66, SysVinit-scripts >= 1.04-6
BuildRoot : /tmp/%{Name}-%{Version}
-Source: ftp://ftp.samba.org/pub/samba/%{Name}-%{Version}.tar.gz
+Source: ftp://ftp.samba.org/pub/samba/%{Name}-%{Version}-%{date}.tar.gz
#Patch0: %{Name}-%{Version}-smbmount.patch
#Patch1: %{Name}-%{Version}-install.patch
#Patch2: %{Name}-%{Version}-smbconf.patch
@@ -82,7 +82,7 @@ Maschinen ein.
%Description -l es
Samba dispone de un servidor SMB que puede utilizarse para proporcionar
-servicios de red a clientes SMB (a veces conocido como "Lan Manager"),
+servicios de red a clientes SMB (a veces conocido como "Lan Manager"),
incluyendo varias versiones de MS Windows, OS/2 y otras máquinas Linux.
%Description -l fr
@@ -152,8 +152,8 @@ ficheiros de servidores SMB.
%Description -n swat
SWAT allows a Samba administrator to configure the complex smb.conf
-file via a Web browser. It also provides links to all the configurable
-options in the smb.conf file allowing an administrator to easily look
+file via a Web browser. It also provides links to all the configurable
+options in the smb.conf file allowing an administrator to easily look
up the effects of any change.
%Description -l de -n swat
@@ -186,8 +186,13 @@ todas as opções configuraveis no smb.conf, permitindo a um admnistrador
verificar rapidamente o efeite de qualquer alteração.
+%Description debug
+This package contains programs that can be used to crash test any SMB
+server. Please use it with care. If you do not need it then do NOT install.
+
+
%Prep
-%setup
+%setup -n samba
#%patch0 -p1
#%patch1 -p1
#%patch2 -p1
@@ -241,10 +246,11 @@ done
for i in htmldocs/DOMAIN_MEMBER.html htmldocs/Samba-HOWTO-Collection.html \
htmldocs/samba-pdc-faq.html htmldocs/samba-pdc-howto.html \
htmldocs/smbclient.1.html htmldocs/smbd.8.html \
- docbook/projdoc/DOMAIN_MEMBER.sgml htmldocs/DOMAIN_MEMBER.html \
+ docbook/projdoc/DOMAIN_MEMBER.sgml docbook/howto/DOMAIN_MEMBER.sgml \
docbook/faq/samba-pdc-faq.sgml docbook/howto/samba-pdc-howto.sgml \
docbook/manpages/smbclient.1.sgml docbook/manpages/smbd.8.sgml \
- docbook/projdoc/ENCRYPTION.sgml manpages/smbclient.1 manpages/smbd.8 ; do
+ docbook/projdoc/ENCRYPTION.sgml textdocs/samba-pdc-faq.txt \
+ textdocs/samba-pdc-howto.txt manpages/smbclient.1 manpages/smbd.8 ; do
%{fixUP} -vT docs/$i -e '
s:/usr/local/samba/private/FOREST.SLEEPY.SID:/var/lock/samba.d/FOREST.SLEEPY.SID: +
s:/usr/local/samba/private:/usr/bin:g +
@@ -258,6 +264,9 @@ done
%{fixUP} -vT docs/htmldocs/samba-pdc-faq.html -e '
s:/usr/local/src:/usr/src:g ;
'
+%{fixUP} -vT docs/textdocs/PRINTER_DRIVER.txt -e '
+ s:/usr/local/samba/printer:/var/spool/samba:g ;
+'
# End of DirtyHack(TM)
@@ -275,19 +284,18 @@ CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="-s" ./configure \
--with-swatdir='$(DESTDIR)/usr/share/swat' \
--with-sambabook='$(DESTDIR)/usr/share/swat/using_samba' \
--with-configdir='$(DESTDIR)'%{EtcSamba} \
- --with-codepagedir='$(DESTDIR)'/usr/share/samba/codepages \
--without-smbwrapper \
--with-smbmount \
--with-pam \
- --with-pam_smbpass \
--with-netatalk \
--with-quotas \
--with-syslog \
--with-utmp
make LOGFILEBASE=/var/log/samba.d all
-make LOGFILEBASE=/var/log/samba.d nsswitch/libnss_wins.so
-make LOGFILEBASE=/var/log/samba.d smbfilter debug2html
+make LOGFILEBASE=/var/log/samba.d nsswitch
+# debug package:
+make LOGFILEBASE=/var/log/samba.d smbfilter debug2html
make LOGFILEBASE=/var/log/samba.d bin/smbspool
@@ -300,7 +308,7 @@ mkdir -p $DESTDIR/var/{lo{ck,g}/samba.d,spool/samba}
mkdir -p $DESTDIR/usr/share/swat/using_samba/{gifs,figs}
mkdir -p $DESTDIR/lib/security
mkdir -p $DESTDIR/%{LSBservedir}/{netlogon,profiles,Public}
-mkdir -p $DESTDIR/usr/share/samba/codepages/src $DESTDIR/sbin
+mkdir -p $DESTDIR%{EtcSamba}/codepages/src $DESTDIR/sbin
make -C source install
make LOGFILEBASE=/var/log/samba.d -C source install
@@ -308,7 +316,7 @@ make LOGFILEBASE=/var/log/samba.d -C source install
strip $DESTDIR/usr/bin/smb{mnt,umount}
#mv $DESTDIR/usr/bin/{make,add,conv}* $DESTDIR/usr/sbin
-cp -p source/codepages/codepage_def.??? $DESTDIR/usr/share/samba/codepages/src
+cp -p source/codepages/codepage_def.??? $DESTDIR%{EtcSamba}/codepages/src
# Install the nsswitch library extension file
install -m 755 source/nsswitch/libnss_wins.so $DESTDIR/lib/libnss_wins.so.2.0
@@ -348,9 +356,6 @@ cp -p $VVS/README.home $DESTDIR/etc/skel/Samba/README.txt
cp -p $VVS/README.Public $DESTDIR/%{LSBservedir}/Public/README.txt
cp -p $VVS/README.profiles $DESTDIR/%{LSBservedir}/profiles/README.txt
-# Add PAM smbpass facility
-mv $DESTDIR/usr/bin/pam_smbpass.so $DESTDIR/lib/security
-
for f in testparm testprns; do
ln -s $f $DESTDIR/usr/bin/smb$f
ln -s $f.1 $DESTDIR/usr/man/man1/smb$f.1
@@ -481,4 +486,4 @@ lisa --inetd disable swat $1
%ChangeLog
* Mon Jan 01 1997 ...
-$Id: samba2.spec.tmpl,v 1.1.6.18 2001/05/19 06:33:06 jht Exp $
+$Id: samba2.spec.tmpl,v 1.1.6.15 2001/04/15 00:33:29 jht Exp $
diff --git a/packaging/Caldera/OpenServer/Install b/packaging/Caldera/OpenServer/Install
index ab27b6f67fa..1065fcdec32 100755
--- a/packaging/Caldera/OpenServer/Install
+++ b/packaging/Caldera/OpenServer/Install
@@ -54,7 +54,7 @@ for i in nmblookup smbclient smbpasswd smbstatus testparm testprns \
do
$V install -m755 -s source/bin/$i ${BLDFIX}/bin
done
-for i in mksmbpasswd.sh smbtar
+for i in addtosmbpass mksmbpasswd.sh smbtar
do
$V install -m755 source/script/$i ${BLDFIX}/bin
done
diff --git a/packaging/Caldera/OpenServer/pkg/input/Samba.pkg b/packaging/Caldera/OpenServer/pkg/input/Samba.pkg
index ea76e74a610..986eb11218a 100644
--- a/packaging/Caldera/OpenServer/pkg/input/Samba.pkg
+++ b/packaging/Caldera/OpenServer/pkg/input/Samba.pkg
@@ -146,6 +146,12 @@ owner = root
group = sys
flags =
+FILE:Samba:SHARED:usr/local/samba/bin/addtosmbpass:
+mode = 0755
+owner = root
+group = sys
+flags =
+
FILE:Samba:SHARED:usr/local/samba/bin/mksmbpasswd.sh:
mode = 0755
owner = root
diff --git a/packaging/Caldera/UnixWare/Install b/packaging/Caldera/UnixWare/Install
index 3fffc37d25a..a379d08400d 100755
--- a/packaging/Caldera/UnixWare/Install
+++ b/packaging/Caldera/UnixWare/Install
@@ -30,10 +30,7 @@ $V mkdir -p ${BLDFIX}/var/locks
$V mkdir -p ${BLDFIX}/lib/codepages/src
# Copy into the dist tree the pkg data files
-for i in pkg/*
-do
- [ -f $i ] && $V cp $i ${BUILD_ROOT}
-done
+$V cp pkg/* ${BUILD_ROOT}
cd ../../..
@@ -44,7 +41,7 @@ for i in nmblookup smbclient smbpasswd smbstatus testparm testprns \
do
$V install -m755 -s source/bin/$i ${BLDFIX}/bin
done
-for i in mksmbpasswd.sh smbtar
+for i in addtosmbpass mksmbpasswd.sh smbtar
do
$V install -m755 source/script/$i ${BLDFIX}/bin
done
diff --git a/packaging/Caldera/UnixWare/pkg/prototype b/packaging/Caldera/UnixWare/pkg/prototype
index 13a64b6feb1..273678ab522 100644
--- a/packaging/Caldera/UnixWare/pkg/prototype
+++ b/packaging/Caldera/UnixWare/pkg/prototype
@@ -24,6 +24,7 @@ f samba usr/local/samba/bin/rpcclient 0755 root sys
f samba usr/local/samba/bin/smbspool 0755 root sys
f samba usr/local/samba/bin/smbsh 0755 root sys
f samba usr/local/samba/bin/smbwrapper.so 0755 root sys
+f samba usr/local/samba/bin/addtosmbpass 0755 root sys
f samba usr/local/samba/bin/mksmbpasswd.sh 0755 root sys
f samba usr/local/samba/bin/smbtar 0755 root sys
f samba usr/local/samba/bin/smbprint 0755 root sys
@@ -219,7 +220,7 @@ f samba usr/local/samba/swat/help/lmhosts.5.html 0644 root sys
f samba usr/local/samba/swat/help/make_smbcodepage.1.html 0644 root sys
f samba usr/local/samba/swat/help/nmbd.8.html 0644 root sys
f samba usr/local/samba/swat/help/nmblookup.1.html 0644 root sys
-f samba usr/local/samba/swat/help/rpcclient.1.html 0644 root sys
+f samba usr/local/samba/swat/help/rpcclient.8.html 0644 root sys
f samba usr/local/samba/swat/help/samba-pdc-faq.html 0644 root sys
f samba usr/local/samba/swat/help/samba-pdc-howto.html 0644 root sys
f samba usr/local/samba/swat/help/samba.7.html 0644 root sys
diff --git a/packaging/Example/samba.init b/packaging/Example/samba.init
index 4f02cd8a1af..c1d605cda06 100755
--- a/packaging/Example/samba.init
+++ b/packaging/Example/samba.init
@@ -1,8 +1,5 @@
#!/bin/sh
#
-SMBD=/usr/local/samba/bin/smbd
-NMBD=/usr/local/samba/bin/nmbd
-
if [ ! -d /usr/bin ]; then
echo "The /usr file system is not mounted."
exit 1
@@ -22,8 +19,8 @@ case "$1" in
'start')
echo "Starting Samba"
- $SMBD
- $NMBD
+ /usr/local/samba/sbin/smbd
+ /usr/local/samba/sbin/nmbd
echo "Done."
;;
'stop')
diff --git a/packaging/Mandrake/empty.patch b/packaging/Mandrake/empty.patch
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/packaging/Mandrake/empty.patch
+++ /dev/null
diff --git a/packaging/Mandrake/makerpms.sh.tmpl b/packaging/Mandrake/makerpms.sh.tmpl
index c4ad9c6b581..cdea6b140e5 100644
--- a/packaging/Mandrake/makerpms.sh.tmpl
+++ b/packaging/Mandrake/makerpms.sh.tmpl
@@ -5,11 +5,9 @@ SPECDIR=/usr/src/RPM/SPECS
SRCDIR=/usr/src/RPM/SOURCES
USERID=`id -u`
GRPID=`id -g`
-VERSION='PVERSION'
-( cd ../../.. ; mv samba samba-$VERSION; chown -R ${USERID}.${GRPID} ${SRCDIR}/samba-$VERSION )
-( cd ../../.. ; tar --exclude=CVS -czvf ${SRCDIR}/samba-$VERSION.tar.gz samba-$VERSION )
-( cd ../../.. ; mv samba-$VERSION samba )
+( cd ../../.. ; chown -R ${USERID}.${GRPID} ${SRCDIR}/samba )
+( cd ../../.. ; tar czvf ${SRCDIR}/samba-PVERSION.tar.gz samba )
cp -a *.spec $SPECDIR
cp -a *.patch smb.* samba.log $SRCDIR
cd $SPECDIR
diff --git a/packaging/Mandrake/samba.log b/packaging/Mandrake/samba.log
index 7dc1667bafe..4e8b44b60e7 100644
--- a/packaging/Mandrake/samba.log
+++ b/packaging/Mandrake/samba.log
@@ -1,4 +1,4 @@
-/var/log/samba/log.nmbd {
+/var/log/samba/log.nmb {
notifempty
missingok
postrotate
@@ -6,7 +6,7 @@
endscript
}
-/var/log/samba/log.smbd {
+/var/log/samba/log.smb {
notifempty
missingok
postrotate
diff --git a/packaging/Mandrake/samba.pamd b/packaging/Mandrake/samba.pamd
index 30912de1726..7d7274e37cf 100644
--- a/packaging/Mandrake/samba.pamd
+++ b/packaging/Mandrake/samba.pamd
@@ -1,5 +1,5 @@
#%PAM-1.0
-auth required /lib/security/pam_nologin.so
-auth required /lib/security/pam_stack.so service=system-auth
-account required /lib/security/pam_stack.so service=system-auth
-session required /lib/security/pam_stack.so service=system-auth
+auth required pam_nologin.so
+auth required pam_stack.so service=system-auth
+account required pam_stack.so service=system-auth
+session required pam_stack.so service=system-auth
diff --git a/packaging/Mandrake/samba2.spec.tmpl b/packaging/Mandrake/samba2.spec.tmpl
index 5bc92535f80..32e2b7771f8 100644
--- a/packaging/Mandrake/samba2.spec.tmpl
+++ b/packaging/Mandrake/samba2.spec.tmpl
@@ -5,8 +5,8 @@ Release: PRELEASE
Copyright: GNU GPL version 2
Group: Networking
Source: ftp://samba.org/pub/samba/samba-%{version}.tar.gz
-Packager: Gerald (Jerry) Carter [Samba-Team] <jerry@samba.org>
-Requires: pam >= 0.72 kernel >= 2.2.1 glibc >= 2.1.2
+Packager: John H Terpstra [Samba-Team] <jht@samba.org>
+Requires: pam >= 0.72 /etc/pam.d/sytem-auth kernel >= 2.2.1 glibc >= 2.1.2
Prereq: chkconfig fileutils
BuildRoot: /var/tmp/samba
Prefix: /usr
@@ -38,22 +38,17 @@ This binary release includes encrypted password support.
Please read the smb.conf file and ENCRYPTION.txt in the
docs directory for implementation details.
-%changelog
-* Mon May 21 2001 Gerald (Jerry) Carter <jerry@samba.org>
- - removed docs/htmldocs and docs/manpages from /usr/share/docs
- These het installed in /usr/share/swat already
- - Fix for codepages and src not getting installed in the RPM
- - Fixed minor typos
-
-* Mon Apr 23 2001 Gerald (Jerry) Carter <jerry@samba.org>
- - Added a few bug fixes to release the first Mandrake RPMS
+NOTE: Red Hat Linux uses PAM which has integrated support
+for Shadow passwords and quotas. Do NOT recompile with the
+SHADOW_PWD option enabled
+%changelog
* Sat Apr 14 2001 John H Terpstra <jht@samba.org>
- - Added official samba-team support for Mandrakesoft
+ - Added official samba-team support for Mandrakesoft
- We get a lot of requests for this!
%prep
-%setup
+%setup -n samba
%build
cd source
@@ -68,22 +63,21 @@ EXTRA="-D_LARGEFILE64_SOURCE"
NUMCPU=`grep processor /proc/cpuinfo | wc -l`
CFLAGS="$RPM_OPT_FLAGS $EXTRA" ./configure \
- --prefix=%{prefix} \
+ --prefix=%{prefix} \
--with-fhs \
- --libdir=/etc/samba \
+ --libdir=/etc \
--localstatedir=/var \
- --with-codepagedir=%{prefix}/share/samba/codepages \
--with-configdir=/etc/samba \
- --with-lockdir=/var/lock/samba \
- --with-swatdir=%{prefix}/share/swat \
- --with-quotas \
- --with-smbmount \
- --with-pam \
- --with-pam_smbpass \
- --with-syslog \
- --with-utmp \
- --with-netatalk \
- --with-sambabook=%{prefix}/share/swat/using_samba
+ --with-lockdir=/var/lock/samba \
+ --with-privatedir=/etc/samba \
+ --with-swatdir=%{prefix}/share/swat \
+ --with-quotas \
+ --with-smbmount \
+ --with-pam \
+ --with-syslog \
+ --with-utmp \
+ --with-netatalk \
+ --with-sambabook=%{prefix}/share/swat/using_samba
make -j${NUMCPU} proto
make -j${NUMCPU} all smbfilter nsswitch/libnss_wins.so debug2html
@@ -91,15 +85,13 @@ make -j${NUMCPU} all smbfilter nsswitch/libnss_wins.so debug2html
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT
-mkdir -p $RPM_BUILD_ROOT/etc/{logrotate.d,pam.d,samba,xinetd.d}
-mkdir -p $RPM_BUILD_ROOT/etc/samba/security
+mkdir -p $RPM_BUILD_ROOT/etc/{logrotate.d,pam.d,samba/codepages}
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
-mkdir -p $RPM_BUILD_ROOT/lib/security
+mkdir -p $RPM_BUILD_ROOT/lib
mkdir -p $RPM_BUILD_ROOT%{prefix}/{bin,sbin}
mkdir -p $RPM_BUILD_ROOT/home/samba
mkdir -p $RPM_BUILD_ROOT/sbin
mkdir -p $RPM_BUILD_ROOT%{prefix}/share/swat/{images,help,include}
-mkdir -p $RPM_BUILD_ROOT%{prefix}/share/samba/codepages/src
mkdir -p $RPM_BUILD_ROOT%{prefix}/share/swat/using_samba/{figs,gifs}
mkdir -p $RPM_BUILD_ROOT%{prefix}/share/man/{man1,man5,man7,man8}
mkdir -p $RPM_BUILD_ROOT/var/lock/samba
@@ -108,32 +100,40 @@ mkdir -p $RPM_BUILD_ROOT/var/spool/samba
# Install standard binary files
for i in nmblookup smbclient smbpasswd smbstatus testparm testprns \
- make_smbcodepage make_unicodemap make_printerdef rpcclient smbspool \
- smbmount smbumount smbmnt
+ make_smbcodepage make_unicodemap make_printerdef rpcclient smbspool
do
- install -m755 -s source/bin/$i $RPM_BUILD_ROOT%{prefix}/bin
+install -m755 -s source/bin/$i $RPM_BUILD_ROOT%{prefix}/bin
done
-for i in smbtar
+for i in addtosmbpass mksmbpasswd.sh smbtar
do
- install -m755 source/script/$i $RPM_BUILD_ROOT%{prefix}/bin
+install -m755 source/script/$i $RPM_BUILD_ROOT%{prefix}/bin
done
# Install secure binary files
-for i in smbd nmbd swat debug2html smbfilter
+for i in smbd nmbd swat smbmount smbumount smbmnt debug2html \
+ smbfilter
do
- install -m755 -s source/bin/$i $RPM_BUILD_ROOT%{prefix}/sbin
+install -m755 -s source/bin/$i $RPM_BUILD_ROOT%{prefix}/sbin
done
# we need a symlink for mount to recognise the smb and smbfs filesystem types
-ln -sf %{prefix}/bin/smbmount $RPM_BUILD_ROOT/sbin/mount.smbfs
-ln -sf %{prefix}/bin/smbmount $RPM_BUILD_ROOT/sbin/mount.smb
+ln -sf %{prefix}/sbin/smbmount $RPM_BUILD_ROOT/sbin/mount.smbfs
+ln -sf %{prefix}/sbin/smbmount $RPM_BUILD_ROOT/sbin/mount.smb
+# Install level 1 man pages
+for i in *.1
+do
+install -m644 docs/manpages/$i $RPM_BUILD_ROOT%{prefix}/share/man/man1
+done
+
# Install codepage source files
-for i in 437 737 775 850 852 861 866 932 936 949 950 1251; do
- install -m644 source/codepages/codepage_def.$i $RPM_BUILD_ROOT%{prefix}/share/samba/codepages/src
+for i in 437 737 775 850 852 861 866 932 936 949 950 1251
+do
+install -m644 source/codepages/codepage_def.$i $RPM_BUILD_ROOT/etc/codepages/src
done
-for i in 437 737 850 852 861 866 932 936 949 950 ISO8859-1 ISO8859-2 ISO8859-5 ISO8859-7 KOI8-R; do
- install -m644 source/codepages/CP$i.TXT $RPM_BUILD_ROOT%{prefix}/share/samba/codepages/src
+for i in 437 737 850 852 861 866 932 936 949 950 ISO8859-1 ISO8859-2 ISO8859-5 ISO8859-7 KOI8-R
+do
+install -m644 source/codepages/CP$i.TXT $RPM_BUILD_ROOT/etc/codepages/src
done
# Install the nsswitch library extenstion file
@@ -141,43 +141,40 @@ install -m755 source/nsswitch/libnss_wins.so $RPM_BUILD_ROOT/lib
# Make link for wins resolver
( cd $RPM_BUILD_ROOT/lib; ln -s libnss_wins.so libnss_wins.so.2; )
-# PAM Authentication file
-install -m755 source/bin/pam_smbpass.so $RPM_BUILD_ROOT/lib/security
-
# Install SWAT helper files
-for i in swat/help/*.html docs/htmldocs/*.html; do
- install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/help
+for i in swat/help/*.html docs/htmldocs/*.html
+do
+install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/help
done
-for i in swat/images/*.gif; do
- install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/images
+for i in swat/images/*.gif
+do
+install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/images
done
-for i in swat/include/*.html; do
- install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/include
+for i in swat/include/*.html
+do
+install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/include
done
# This is the O'Reily Samba Book - on-line
-for i in docs/htmldocs/using_samba/*.html; do
- install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/using_samba
+for i in docs/htmldocs/using_samba/*.html
+do
+install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/using_samba
done
-for i in docs/htmldocs/using_samba/figs/*.gif; do
- install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/using_samba/figs
+for i in docs/htmldocs/using_samba/figs/*.gif
+do
+install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/using_samba/figs
done
-for i in docs/htmldocs/using_samba/gifs/*.gif; do
- install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/using_samba/gifs
+for i in docs/htmldocs/using_samba/gifs/*.gif
+do
+install -m644 $i $RPM_BUILD_ROOT%{prefix}/share/swat/using_samba/gifs
done
# Install the miscellany
install -m644 swat/README $RPM_BUILD_ROOT%{prefix}/share/swat
-# Install level 1 man pages
-for i in *.1; do
- install -m644 docs/manpages/$i $RPM_BUILD_ROOT%{prefix}/share/man/man1
-done
install -m644 docs/manpages/smb.conf.5 $RPM_BUILD_ROOT%{prefix}/share/man/man5
install -m644 docs/manpages/lmhosts.5 $RPM_BUILD_ROOT%{prefix}/share/man/man5
install -m644 docs/manpages/smbpasswd.5 $RPM_BUILD_ROOT%{prefix}/share/man/man5
-
install -m644 docs/manpages/samba.7 $RPM_BUILD_ROOT%{prefix}/share/man/man7
-
install -m644 docs/manpages/smbd.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
install -m644 docs/manpages/nmbd.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
install -m644 docs/manpages/smbpasswd.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
@@ -185,14 +182,12 @@ install -m644 docs/manpages/swat.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
install -m644 docs/manpages/smbmount.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
install -m644 docs/manpages/smbmnt.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
install -m644 docs/manpages/smbumount.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
-install -m644 docs/manpages/smbspool.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
-
install -m644 swat/README $RPM_BUILD_ROOT%{prefix}/share/swat
-
install -m644 packaging/Mandrake/smb.con* $RPM_BUILD_ROOT/etc/samba/
install -m644 packaging/Mandrake/smbusers $RPM_BUILD_ROOT/etc/samba/smbusers
install -m755 packaging/Mandrake/smbprint $RPM_BUILD_ROOT%{prefix}/bin
install -m755 packaging/Mandrake/findsmb $RPM_BUILD_ROOT%{prefix}/bin
+install -m755 packaging/Mandrake/smbadduser $RPM_BUILD_ROOT%{prefix}/bin
install -m755 packaging/Mandrake/smb.init $RPM_BUILD_ROOT/etc/rc.d/init.d/smb
install -m755 packaging/Mandrake/smb.init $RPM_BUILD_ROOT%{prefix}/sbin/samba
install -m644 packaging/Mandrake/samba.pamd $RPM_BUILD_ROOT/etc/pam.d/samba
@@ -200,12 +195,9 @@ install -m644 packaging/Mandrake/samba.log $RPM_BUILD_ROOT/etc/logrotate.d/samba
install -m644 packaging/Mandrake/samba.xinetd $RPM_BUILD_ROOT/etc/xinetd.d/swat
echo 127.0.0.1 localhost > $RPM_BUILD_ROOT/etc/samba/lmhosts
-##
-## remove these directories so they don't get installed twice
-##
-/bin/rm -rf docs/htmldocs
-/bin/rm -rf docs/manpages
-
+# Link smbmount to /sbin/mount.smb and /sbin/mount.smbfs
+ln -sf %{prefix}/sbin/smbmount $RPM_BUILD_ROOT/sbin/mount.smb
+ln -sf %{prefix}/sbin/smbmount $RPM_BUILD_ROOT/sbin/mount.smbfs
%clean
rm -rf $RPM_BUILD_ROOT
@@ -215,14 +207,14 @@ rm -rf $RPM_BUILD_ROOT
/sbin/chkconfig smb off
# Build codepage load files
-cd %{prefix}/share/samba/codepages
+cd /etc
for i in 437 737 775 850 852 861 866 932 936 949 950 1251
do
-%{prefix}/bin/make_smbcodepage c $i %{prefix}/share/samba/codepages/src/codepage_def.$i %{prefix}/share/samba/codepages/codepage.$i
+%{prefix}/bin/make_smbcodepage c $i /etc/codepages/src/codepage_def.$i /etc/codepages/codepage.$i
done
for i in 437 737 850 852 861 866 932 936 949 950 ISO8859-1 ISO8859-2 ISO8859-5 ISO8859-7 KOI8-R
do
-%{prefix}/bin/make_unicodemap $i %{prefix}/share/samba/codepages/src/CP$i.TXT %{prefix}/share/samba/codepages/unicode_map.$i
+%{prefix}/bin/make_unicodemap $i /etc/codepages/src/CP$i.TXT /etc/codepages/unicode_map.$i
done
# Add swat entry to /etc/services if not already there
@@ -230,14 +222,25 @@ if !( grep ^[:space:]*swat /etc/services > /dev/null ) then
echo 'swat 901/tcp # Add swat service used via inetd' >> /etc/services
fi
+# Add swat entry to /etc/inetd.conf if needed
+if [ -f /etc/inetd.conf ]; then
+ if !( grep ^[:space:]*swat /etc/inetd.conf > /dev/null ) then
+ echo '#swat stream tcp nowait.400 root %{prefix}/sbin/swat swat' >> /etc/inetd.conf
+ killall -1 inetd || :
+ fi
+fi
+
%preun
if [ $1 = 0 ] ; then
/sbin/chkconfig --del smb
- # We want to remove the browse.dat file
+ # We want to remove the browse.dat and wins.dat files so they can not interfer with a new version of samba!
if [ -e /var/lock/samba/browse.dat ]; then
rm -f /var/lock/samba/browse.dat
fi
+ if [ -e /var/lock/samba/wins.dat ]; then
+ rm -f /var/lock/samba/wins.dat
+ fi
fi
%postun
@@ -256,6 +259,10 @@ if [ $1 = 0 ] ; then
# Remove swat entries from /etc/inetd.conf and /etc/services
cd /etc
tmpfile=/etc/tmp.$$
+ if [ -f /etc/inetd.conf ]; then
+ sed -e '/^[:space:]*swat.*$/d' /etc/inetd.conf > $tmpfile
+ mv $tmpfile inetd.conf
+ fi
sed -e '/^[:space:]*swat.*$/d' /etc/services > $tmpfile
mv $tmpfile services
fi
@@ -275,13 +282,14 @@ fi
%attr(-,root,root) /sbin/*
%attr(-,root,root) %{prefix}/bin/*
%attr(755,root,root) /lib/*
-%attr(-,root,root) %{prefix}/share/swat/help/*
-%attr(-,root,root) %{prefix}/share/swat/images/*
-%attr(-,root,root) %{prefix}/share/swat/include/*
-%attr(-,root,root) %{prefix}/share/swat/using_samba/*
+%attr(-,root,root) %{prefix}/share/samba/swat/help/*
+%attr(-,root,root) %{prefix}/share/samba/swat/images/*
+%attr(-,root,root) %{prefix}/share/samba/swat/include/*
+%attr(-,root,root) %{prefix}/share/samba/swat/using_samba/*
%attr(-,root,root) %config(noreplace) /etc/samba/lmhosts
%attr(-,root,root) %config(noreplace) /etc/samba/smb.conf
%attr(-,root,root) %config(noreplace) /etc/samba/smbusers
+%attr(-,root,root) /etc/samba/smb.conf.sample
%attr(-,root,root) /etc/rc.d/init.d/smb
%attr(-,root,root) /etc/logrotate.d/samba
%attr(-,root,root) %config(noreplace) /etc/pam.d/samba
@@ -289,9 +297,8 @@ fi
%attr(-,root,root) %{prefix}/share/man/man5/*
%attr(-,root,root) %{prefix}/share/man/man7/*
%attr(-,root,root) %{prefix}/share/man/man8/*
-%attr(-,root,root) %dir /etc/samba/
-%attr(-,root,root) %dir /usr/share/samba/codepages/*
-%attr(-,root,root) %dir /usr/share/samba/codepages/src/*
+%attr(-,root,root) %dir %{prefix}/share/samba/codepages/*
+%attr(-,root,root) %dir %{prefix}/share/samba/codepages/src/*
%attr(-,root,root) %dir /var/lock/samba
%attr(-,root,root) %dir /var/log/samba
%attr(1777,root,root) %dir /var/spool/samba
diff --git a/packaging/Mandrake/smb.conf b/packaging/Mandrake/smb.conf
index a14e90ec16b..4098e8d0dae 100644
--- a/packaging/Mandrake/smb.conf
+++ b/packaging/Mandrake/smb.conf
@@ -1,320 +1,51 @@
-# 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 = MDKGROUP
-
-# server string is the equivalent of the NT Description field
- server string = Samba Server %v
-
-# 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.
-
-# Enabling internationalization:
-# you can match a Windows code page with a UNIX character set.
-# Windows: 437 (US), 737 (GREEK), 850 (Latin1 - Western European),
-# 852 (Eastern Eu.), 861 (Icelandic), 932 (Cyrillic - Russian),
-# 936 (Japanese - Shift-JIS), 936 (Simpl. Chinese), 949 (Korean Hangul),
-# 950 (Trad. Chin.).
-# UNIX: ISO8859-1 (Western European), ISO8859-2 (Eastern Eu.),
-# ISO8859-5 (Russian Cyrillic), KOI8-R (Alt-Russ. Cyril.)
-# This is an example for french users:
-; client code page = 850
-; character set = ISO8859-1
-
-
-# CHANGES TO ENABLE PRINTING ON ALL CUPS PRINTERS IN THE NETWORK
-# (as cups is now used in linux-mandrake 7.2 by default)
-# if you want to automatically load your printer list rather
-# than setting them up individually then you'll need this
- printcap name = lpstat
- 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, cups
- printing = cups
-
-
-# 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
-
-# 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/private/smbpasswd
-
-# The following are needed to allow password changing from Windows to
-# update the Linux sytsem 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/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/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
+# Samba config file created using SWAT
+# from localhost (127.0.0.1)
-# 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
+# Global parameters
+[global]
+ workgroup = MDKGROUP
+ server string = Samba Server on Mandrake Linux
+ encrypt passwords = Yes
+ smb passwd file = /etc/samba/smbpasswd
+ username map = /etc/samba/smbusers
+ password level = 8
+ username level = 8
+ log file = /var/log/samba/log.%m
+ max log size = 50
+ socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
+ printcap name = lpstat
+ dns proxy = No
+ printing = cups
-#============================ Share Definitions ==============================
[homes]
- comment = Home Directories
- browseable = no
- writable = yes
+ comment = Home Directories
+ read only = No
+ browseable = No
-# Un-comment the following and create the netlogon directory for Domain Logons
-; [netlogon]
-; comment = Network Logon Service
-; path = /var/lib/samba/netlogon
-; guest ok = yes
-; writable = no
-; share modes = no
+[netlogon]
+ comment = Network Logon Service
+ path = /home/samba/netlogon
+ guest ok = Yes
+ share modes = No
-#Uncomment the following 2 lines if you would like your login scripts to
-#be created dynamically by ntlogon (check that you have it in the correct
-#locationn (the default of the ntlogon rpm available in contribs)
-;root preexec = /usr/bin/ntlogon -u %U -g %G -o %a -d /var/lib/samba/netlogon
-;root postexec = rm -f /var/lib/samba/netlogon/%U.bat
+[Profiles]
+ path = /home/samba/profiles
+ guest ok = Yes
+ browseable = No
-# Un-comment the following to provide a specific roving profile share
-# the default is to use the user's home directory
-;[Profiles]
-; path = /var/lib/samba/profiles
-; browseable = no
-; guest ok = yes
-
-
-# NOTE: If you have a CUPS print system there is no need to
-# specifically define each individual printer.
-# You must configure the samba printers with the appropriate Windows
-# drivers on your Windows clients. On the Samba server no filtering is
-# done. If you wish that the server provides the driver and the clients
-# send PostScript ("Generic PostScript Printer" under Windows), you have
-# to swap the 'print command' line below with the commented one.
[printers]
- comment = All Printers
- path = /var/spool/samba
- browseable = no
-# to allow user 'guest account' to print.
- guest ok = yes
- writable = no
- printable = yes
- create mode = 0700
-# =====================================
-# print command: see above for details.
-# =====================================
- print command = lpr-cups -P %p -o raw %s -r # using client side printer drivers.
-; print command = lpr-cups -P %p %s # using cups own drivers (use generic PostScript on clients).
- lpq command = lpstat -o %p
- lprm command = cancel %p-%j
-
-# 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
-; public = yes
-; writable = no
-; 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
-
-
+ comment = All Printers
+ path = /var/spool/samba
+ create mask = 0700
+ guest ok = Yes
+ printable = Yes
+ print command = lpr-cups -P %p -o raw %s
+ lpq command = lpstat -o %p
+ lprm command = cancel %p-%j
+ browseable = No
+
+[public]
+ comment = Public Stuff
+ path = /home/samba
+ write list = @staff
+ guest ok = Yes
diff --git a/packaging/Mandrake/smb.conf.sample b/packaging/Mandrake/smb.conf.sample
new file mode 100644
index 00000000000..08e974b664e
--- /dev/null
+++ b/packaging/Mandrake/smb.conf.sample
@@ -0,0 +1,319 @@
+# 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 = MDKGROUP
+
+# server string is the equivalent of the NT Description field
+ server string = Samba Server %v
+
+# 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.
+
+# Enabling internationalization:
+# you can match a Windows code page with a UNIX character set.
+# Windows: 437 (US), 737 (GREEK), 850 (Latin1 - Western European),
+# 852 (Eastern Eu.), 861 (Icelandic), 932 (Cyrillic - Russian),
+# 936 (Japanese - Shift-JIS), 936 (Simpl. Chinese), 949 (Korean Hangul),
+# 950 (Trad. Chin.).
+# UNIX: ISO8859-1 (Western European), ISO8859-2 (Eastern Eu.),
+# ISO8859-5 (Russian Cyrillic), KOI8-R (Alt-Russ. Cyril.)
+# This is an example for french users:
+; client code page = 850
+; character set = ISO8859-1
+
+
+# CHANGES TO ENABLE PRINTING ON ALL CUPS PRINTERS IN THE NETWORK
+# (as cups is now used in linux-mandrake 7.2 by default)
+# if you want to automatically load your printer list rather
+# than setting them up individually then you'll need this
+ printcap name = lpstat
+ 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, cups
+ printing = cups
+
+
+# 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
+
+# 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/private/smbpasswd
+
+# The following are needed to allow password changing from Windows to
+# update the Linux sytsem 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
+
+# Use only if you have an NT server on your network that has been
+# configured at install time to be a primary domain controller.
+; domain controller = <NT-Domain-Controller-SMBName>
+
+# 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 CUPS print system there is no need to
+# specifically define each individual printer.
+# You must configure the samba printers with the appropriate Windows
+# drivers on your Windows clients. On the Samba server no filtering is
+# done. If you wish that the server provides the driver and the clients
+# send PostScript ("Generic PostScript Printer" under Windows), you have
+# to swap the 'print command' line below with the commented one.
+[printers]
+ comment = All Printers
+ path = /var/spool/samba
+ browseable = yes
+# to allow user 'guest account' to print.
+ guest ok = yes
+ writable = no
+ printable = yes
+ create mode = 0700
+# =====================================
+# print command: see above for details.
+# =====================================
+ print command = lpr-cups -P %p -o raw %s # using client side printer drivers.
+; print command = lpr-cups -P %p %s # using cups own drivers (use generic PostScript on clients).
+ lpq command = lpstat -o %p
+ lprm command = cancel %p-%j
+
+# 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/packaging/Mandrake/smb.init b/packaging/Mandrake/smb.init
index 8855f04efba..09ece8db1e0 100755
--- a/packaging/Mandrake/smb.init
+++ b/packaging/Mandrake/smb.init
@@ -26,68 +26,65 @@ RETVAL=0
start() {
- echo -n "Starting SMB services: "
- daemon smbd -D
- RETVAL=$?
- echo
- echo -n "Starting NMB services: "
- daemon nmbd -D
- RETVAL2=$?
- echo
- [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/smb || \
- RETVAL=1
- return $RETVAL
-}
+ echo -n "Starting SMB services: "
+ daemon smbd -D
+ RETVAL=$?
+ echo
+ echo -n "Starting NMB services: "
+ daemon nmbd -D
+ RETVAL2=$?
+ echo
+ [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/smb || \
+ RETVAL=1
+ return $RETVAL
+}
stop() {
- echo -n "Shutting down SMB services: "
- killproc smbd
- RETVAL=$?
- echo
- echo -n "Shutting down NMB services: "
- killproc nmbd
- RETVAL2=$?
- [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/smb
- echo ""
- return $RETVAL
-}
+ echo -n "Shutting down SMB services: "
+ killproc smbd
+ RETVAL=$?
+ echo
+ echo -n "Shutting down NMB services: "
+ killproc nmbd
+ RETVAL2=$?
+ [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/smb
+ echo ""
+ return $RETVAL
+}
restart() {
- stop
- start
-}
+ stop
+ start
+}
reload() {
echo -n "Reloading smb.conf file: "
- killproc smbd -HUP
- RETVAL=$?
- echo
- return $RETVAL
-}
+ killproc smbd -HUP
+ RETVAL=$?
+ echo
+ return $RETVAL
+}
mdkstatus() {
- status smbd
- status nmbd
-}
+ status smbd
+ status nmbd
+}
-case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- restart
- ;;
- reload)
- reload
- ;;
- status)
- mdkstatus
- ;;
- condrestart)
- [ -f /var/lock/subsys/smb ] && restart || :
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|status|condrestart}"
- exit 1
-esac
-exit $?
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ restart
+ ;;
+ reload)
+ reload
+ ;;
+ status)
+ mdkstatus
+ ;;
+ condrestart)
+ [ -f /var/lock/subsys/smb ] && restart || :
+ ;;
+ *)
diff --git a/packaging/PHT/TurboLinux/samba.pamd b/packaging/PHT/TurboLinux/samba.pamd
index 225ab724ec9..1b4a93fb19e 100644
--- a/packaging/PHT/TurboLinux/samba.pamd
+++ b/packaging/PHT/TurboLinux/samba.pamd
@@ -1,11 +1,4 @@
-#%PAM-1.0
-#[For version 1.0 syntax, the above header is optional]
-#
-# The PAM configuration file for the `samba' service
-#
-auth required /lib/security/pam_pwdb.so nullok nodelay # shadow audit
-# auth required /lib/security/pam_smbpass.so nodelay
-account required /lib/security/pam_pwdb.so audit nodelay
-session required /lib/security/pam_pwdb.so nodelay
-password required /lib/security/pam_pwdb.so # shadow md5
-#password required /lib/security/pam_smbpass.so nodelay smbconf=/etc/samba.d/smb.conf
+auth required /lib/security/pam_pwdb.so nullok shadow
+account required /lib/security/pam_pwdb.so
+session required /lib/security/pam_pwdb.so
+password required /lib/security/pam_pwdb.so
diff --git a/packaging/PHT/TurboLinux/samba2.spec.tmpl b/packaging/PHT/TurboLinux/samba2.spec.tmpl
index 0633f62a7e7..fd89c16f38b 100644
--- a/packaging/PHT/TurboLinux/samba2.spec.tmpl
+++ b/packaging/PHT/TurboLinux/samba2.spec.tmpl
@@ -194,14 +194,13 @@ autoheader
NUMCPU=`grep processor /proc/cpuinfo | wc -l`
CFLAGS="$RPM_OPT_FLAGS $EXTRA" ./configure \
--prefix=%{prefix} \
- --libdir=/etc/samba \
+ --libdir=/etc \
--with-lockdir=/var/lock/samba \
--with-privatedir=/etc \
--with-swatdir=%{prefix}/share/swat \
--with-quotas \
--with-smbmount \
--with-pam \
- --with-pam_smbpass \
--with-profile \
--with-syslog \
--with-utmp \
@@ -215,8 +214,7 @@ make -j${NUMCPU} debug2html
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/sbin
-mkdir -p $RPM_BUILD_ROOT%{prefix}/share/samba/codepages/src
-mkdir -p $RPM_BUILD_ROOT/etc/samba
+mkdir -p $RPM_BUILD_ROOT/etc/codepages/src
mkdir -p $RPM_BUILD_ROOT/etc/{logrotate.d,pam.d}
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
mkdir -p $RPM_BUILD_ROOT/lib
@@ -256,11 +254,11 @@ done
# Install codepage source files
for i in 437 737 775 850 852 861 866 932 936 949 950 1251
do
-install -m644 source/codepages/codepage_def.$i $RPM_BUILD_ROOT%{prefix}/samba/codepages/src
+install -m644 source/codepages/codepage_def.$i $RPM_BUILD_ROOT/etc/codepages/src
done
for i in 437 737 850 852 861 866 932 936 949 950 ISO8859-1 ISO8859-2 ISO8859-5 ISO8859-7 KOI8-R
do
-install -m644 source/codepages/CP$i.TXT $RPM_BUILD_ROO%{prefix}/samba/codepages/src
+install -m644 source/codepages/CP$i.TXT $RPM_BUILD_ROOT/etc/codepages/src
done
# Install the nsswitch library extension file
@@ -268,9 +266,6 @@ install -m755 source/nsswitch/libnss_wins.so $RPM_BUILD_ROOT/lib
# Make link for wins resolver
( cd $RPM_BUILD_ROOT/lib; ln -s libnss_wins.so libnss_wins.so.2; )
-# Install PAM pam_smbpass.so
-install -m644 source/bin/pam_smbpass.so $RPM_BUILD_ROOT/lib/security
-
# Install SWAT helper files
for i in swat/help/*.html docs/htmldocs/*.html
do
@@ -312,8 +307,8 @@ install -m644 docs/manpages/swat.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
install -m644 docs/manpages/smbmount.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
install -m644 docs/manpages/smbmnt.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
install -m644 docs/manpages/smbumount.8 $RPM_BUILD_ROOT%{prefix}/share/man/man8
-install -m644 packaging/PHT/TurboLinux/smb.conf $RPM_BUILD_ROOT/etc/samba/smb.conf
-install -m644 packaging/PHT/TurboLinux/smbusers $RPM_BUILD_ROOT/etc/samba/smbusers
+install -m644 packaging/PHT/TurboLinux/smb.conf $RPM_BUILD_ROOT/etc/smb.conf
+install -m644 packaging/PHT/TurboLinux/smbusers $RPM_BUILD_ROOT/etc/smbusers
install -m755 packaging/PHT/TurboLinux/smbprint $RPM_BUILD_ROOT%{prefix}/bin
install -m755 packaging/PHT/TurboLinux/findsmb $RPM_BUILD_ROOT%{prefix}/bin
install -m755 packaging/PHT/TurboLinux/smb.init $RPM_BUILD_ROOT/etc/rc.d/init.d/smb
@@ -334,14 +329,14 @@ rm -rf $RPM_BUILD_ROOT
/sbin/chkconfig smb off
# Build codepage load files
-cd %{prefix}/share/samba
+cd /etc
for i in 437 737 775 850 852 861 866 932 936 949 950 1251
do
-%{prefix}/bin/make_smbcodepage c $i %{prefix}/share/samba/codepages/src/codepage_def.$i %{prefix}/share/samba/codepages/codepage.$i
+%{prefix}/bin/make_smbcodepage c $i /etc/codepages/src/codepage_def.$i /etc/codepages/codepage.$i
done
for i in 437 737 850 852 861 866 932 936 949 950 ISO8859-1 ISO8859-2 ISO8859-5 ISO8859-7 KOI8-R
do
-%{prefix}/bin/make_unicodemap $i %{prefix}/share/samba/codepages/src/CP$i.TXT %{prefix}/share/samba/codepages/unicode_map.$i
+%{prefix}/bin/make_unicodemap $i /etc/codepages/src/CP$i.TXT /etc/codepages/unicode_map.$i
done
# Add swat entry to /etc/services if not already there
@@ -366,8 +361,8 @@ fi
if [ $1 = 0 ] ; then
/sbin/chkconfig --del smb
- for n in %{prefix}/share/samba/codepages/*; do
- if [ $n != %{prefix}/share/samba/codepages/src ]; then
+ for n in /etc/codepages/*; do
+ if [ $n != /etc/codepages/src ]; then
rm -rf $n
fi
done
@@ -389,18 +384,8 @@ if [ $1 = 0 ] ; then
if [ -e /var/log/samba ]; then
rm -rf /var/log/samba
fi
-
-# Note: We MUST keep:
-# winbindd_*, sshare_info*, printing*, ntdrivers*
-
- if [ -x /var/lock/samba ]; then
- rm -f /var/lock/samba/browse.dat
- rm -f /var/lock/samba/{brlock,connections,locking,messages}.tdb
- if [ -e /var/lock/samba.d/namelist.debug ]; then
- rm -f /var/lock/samba.d/namelist.debug
- fi
- rm -f /var/lock/samba/unexpected.tdb
- rm -f /var/lock/samba/{smbd,nmbd}.pid
+ if [ -e /var/lock/samba ]; then
+ rm -rf /var/lock/samba
fi
# Remove swat entries from /etc/inetd.conf and /etc/services
@@ -452,20 +437,19 @@ fi
%attr(-,root,root) %{prefix}/bin/smbspool
%attr(-,root,root) %{prefix}/bin/smbadduser
%attr(755,root,root) /lib/libnss_wins.s*
-%attr(755,root,root) /lib/security/pam_smbpass.so
%attr(-,root,root) %{prefix}/share/swat/help/*
%attr(-,root,root) %{prefix}/share/swat/images/*
%attr(-,root,root) %{prefix}/share/swat/include/header.html
%attr(-,root,root) %{prefix}/share/swat/include/footer.html
%attr(-,root,root) %{prefix}/share/swat/using_samba/*
-%attr(-,root,root) %config(noreplace) /etc/samba/lmhosts
-%attr(-,root,root) %config(noreplace) /etc/samba/smb.conf
-%attr(-,root,root) %config(noreplace) /etc/samba/smbusers
+%attr(-,root,root) %config(noreplace) /etc/lmhosts
+%attr(-,root,root) %config(noreplace) /etc/smb.conf
+%attr(-,root,root) %config(noreplace) /etc/smbusers
%attr(-,root,root) /etc/rc.d/init.d/smb
%attr(-,root,root) /etc/logrotate.d/samba
%attr(-,root,root) /etc/pam.d/samba
-%attr(-,root,root) %{prefix}/share/samba/codepages/src/codepage_def.*
-%attr(-,root,root) %{prefix}/share/samba/codepages/src/CP*
+%attr(-,root,root) /etc/codepages/src/codepage_def.*
+%attr(-,root,root) /etc/codepages/src/CP*
# %attr(-,root,root) %{prefix}/share/man/man1/smbsh.1
%attr(-,root,root) %{prefix}/share/man/man1/make_smbcodepage.1
%attr(-,root,root) %{prefix}/share/man/man1/make_unicodemap.1
@@ -485,8 +469,8 @@ fi
%attr(-,root,root) %{prefix}/share/man/man8/smbpasswd.8
%attr(-,root,root) %{prefix}/share/man/man8/swat.8
%attr(-,root,nobody) %dir /home/samba
-%attr(-,root,root) %dir %{prefix}/share/samba/codepages
-%attr(-,root,root) %dir %{prefix}/share/samba/codepages/src
+%attr(-,root,root) %dir /etc/codepages
+%attr(-,root,root) %dir /etc/codepages/src
%attr(-,root,root) %dir /var/lock/samba
%attr(-,root,root) %dir /var/log/samba
%attr(1777,root,root) %dir /var/spool/samba
diff --git a/packaging/RedHat/samba.log b/packaging/RedHat/samba.log
index 4b244099c4f..c8ab3852e27 100644
--- a/packaging/RedHat/samba.log
+++ b/packaging/RedHat/samba.log
@@ -1,10 +1,10 @@
-/var/log/samba/log.nmbd {
+/var/log/samba/log.nmb {
postrotate
/usr/bin/killall -HUP nmbd
endscript
}
-/var/log/samba/log.smbd {
+/var/log/samba/log.smb {
postrotate
/usr/bin/killall -HUP smbd
endscript
diff --git a/packaging/RedHat/samba.pamd b/packaging/RedHat/samba.pamd
index bf7a5b392ca..1b4a93fb19e 100644
--- a/packaging/RedHat/samba.pamd
+++ b/packaging/RedHat/samba.pamd
@@ -1,4 +1,4 @@
-auth required /lib/security/pam_pwdb.so nullok
+auth required /lib/security/pam_pwdb.so nullok shadow
account required /lib/security/pam_pwdb.so
session required /lib/security/pam_pwdb.so
-password required /lib/security/pam_pwdb.so # shadow md5 nullok audit
+password required /lib/security/pam_pwdb.so
diff --git a/packaging/RedHat/samba2.spec.tmpl b/packaging/RedHat/samba2.spec.tmpl
index 44a8fe998e3..d1edfa4562c 100644
--- a/packaging/RedHat/samba2.spec.tmpl
+++ b/packaging/RedHat/samba2.spec.tmpl
@@ -160,8 +160,7 @@ CFLAGS="$RPM_OPT_FLAGS $EXTRA" ./configure \
--with-syslog \
--with-utmp \
--with-netatalk \
- --with-sambabook=%{prefix}/share/swat/using_samba \
- --with-swatdir=%{prefix}/share/swat
+ --with-sambabook=%{prefix}/share/swat/using_samba
make -j${NUMCPU} proto
make -j${NUMCPU} all nsswitch/libnss_wins.so
make -j${NUMCPU} debug2html
diff --git a/packaging/SGI/idb.pl b/packaging/SGI/idb.pl
index ba051495091..82a49ee31a8 100755
--- a/packaging/SGI/idb.pl
+++ b/packaging/SGI/idb.pl
@@ -101,7 +101,6 @@ chdir $curdir;
# the "*.doc" files from the source tree
@docs = sort byfilename grep (!/^docs\/$/ & (/^source\/.*\.doc$/ | /^docs\//),@allfiles);
@docs = grep(!/htmldocs\/using_samba/, @docs);
-@docs = grep(!/docbook/, @docs);
@swatfiles = sort grep(/^packaging\/SGI\/swat/, @allfiles);
@catman = sort grep(/^packaging\/SGI\/catman/ & !/\/$/, @allfiles);
@@ -134,6 +133,7 @@ else {
}
print IDB "d 0755 root sys usr/samba $SRCPFX/packaging/SGI $PKG.sw.base\n";
+print IDB "f 0444 root sys usr/samba/README $SRCPFX/packaging/SGI/README $PKG.sw.base\n";
print IDB "d 0755 root sys usr/samba/bin $SRCPFX/packaging/SGI $PKG.sw.base\n";
while(@bins) {
diff --git a/packaging/SGI/smbprint b/packaging/SGI/smbprint
index 07923a42b1e..0db8b6f7e3a 100644
--- a/packaging/SGI/smbprint
+++ b/packaging/SGI/smbprint
@@ -49,6 +49,6 @@ password=""
echo translate
echo "print -"
cat $*
-) | /usr/samba/bin/smbclient "//$server/$service" $password -N > /dev/null
+) | /usr/samba/bin/smbclient "\\\\$server\\$service" $password -N -P > /dev/null
exit $?
diff --git a/packaging/Solaris/makepkg.sh b/packaging/Solaris/makepkg.sh
index b57e182e4a3..ea15eafbc34 100755
--- a/packaging/Solaris/makepkg.sh
+++ b/packaging/Solaris/makepkg.sh
@@ -52,38 +52,6 @@ add_dynamic_entries()
echo f none samba/bin/$binfile=source/bin/$binfile 0755 root other
fi
done
-
- # Add the scripts to bin/
- echo "#\n# Scripts \n#"
- cd $DISTR_BASE/source/script
- for shfile in *
- do
- if [ -f $shfile ]; then
- echo f none samba/bin/$shfile=source/script/$shfile 0755 root other
- fi
- done
-
- # 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 $DISTR_BASE/docs/manpages
- for i in 1 2 3 4 5 6 7 8 9
- do
- manpages=`ls *.$i 2>/dev/null`
- if [ $? -eq 0 ]
- then
- echo d none /usr/share/man/man$i ? ? ?
- for manpage in $manpages
- do
- echo f none /usr/share/man/man${i}/${manpage}=docs/manpages/$manpage 0644 root other
- done
- fi
- done
-
echo "#\n# HTML documentation \n#"
cd $DISTR_BASE
list=`find docs/htmldocs -type d | grep -v "/CVS$"`
@@ -183,3 +151,4 @@ then
pkgtrans /tmp samba.pkg samba
fi
echo The samba package is in /tmp
+rm -f prototype
diff --git a/packaging/Solaris/prototype.master b/packaging/Solaris/prototype.master
index bfcb3e00492..8f98104cdde 100644
--- a/packaging/Solaris/prototype.master
+++ b/packaging/Solaris/prototype.master
@@ -8,7 +8,6 @@
i pkginfo=./pkginfo
i copyright=./copyright
i request=./request
-i checkinstall
i preremove=./preremove
i postinstall=./postinstall
i i.swat=./i.swat
@@ -16,7 +15,7 @@ i r.swat=./r.swat
#
# Stuff that goes into the system areas of the filesystem.
#
-d none /etc ? ? ?
+d initscript /etc ? ? ?
d initscript /etc/init.d ? ? ?
f initscript /etc/init.d/samba.server=packaging/Solaris/samba.server 0744 root sys
d initscript /etc/rc3.d ? ? ?
@@ -24,9 +23,8 @@ s initscript /etc/rc3.d/S99samba.server=../init.d/samba.server
#
# Stuff to set up SWAT
#
-d swat /etc/inet ? ? ?
-e swat /etc/inet/services=packaging/Solaris/services ? ? ?
-e swat /etc/inet/inetd.conf=packaging/Solaris/inetd.conf ? ? ?
+e swat /etc/services=packaging/Solaris/services ? ? ?
+e swat /etc/inetd.conf=packaging/Solaris/inetd.conf ? ? ?
#
# Create the samba subtree. (Usually /usr/local/samba )
#
@@ -36,6 +34,44 @@ d none samba/bin 0755 root other
d none samba/lib 0755 root other
d none samba/docs 0755 root other
#
+# Scripts
+#
+f none samba/bin/smbtar=source/script/smbtar 0755 root other
+f none samba/bin/addtosmbpass=source/script/addtosmbpass 0755 root other
+f none samba/bin/convert_smbpasswd=source/script/convert_smbpasswd 0755 root other
+f none samba/bin/mksmbpasswd.sh=source/script/mksmbpasswd.sh 0755 root other
+#
+# man pages
+#
+d none /usr ? ? ?
+d none /usr/share ? ? ?
+d none /usr/share/man ? ? ?
+d none /usr/share/man/man1 ? ? ?
+d none /usr/share/man/man5 ? ? ?
+d none /usr/share/man/man7 ? ? ?
+d none /usr/share/man/man8 ? ? ?
+f none /usr/share/man/man1/make_smbcodepage.1=docs/manpages/make_smbcodepage.1 0644 root other
+f none /usr/share/man/man1/nmblookup.1=docs/manpages/nmblookup.1 0644 root other
+f none /usr/share/man/man1/smbclient.1=docs/manpages/smbclient.1 0644 root other
+f none /usr/share/man/man1/smbrun.1=docs/manpages/smbrun.1 0644 root other
+f none /usr/share/man/man1/smbsh.1=docs/manpages/smbsh.1 0644 root other
+f none /usr/share/man/man1/smbstatus.1=docs/manpages/smbstatus.1 0644 root other
+f none /usr/share/man/man1/smbtar.1=docs/manpages/smbtar.1 0644 root other
+f none /usr/share/man/man1/testparm.1=docs/manpages/testparm.1 0644 root other
+f none /usr/share/man/man1/testprns.1=docs/manpages/testprns.1 0644 root other
+f none /usr/share/man/man5/lmhosts.5=docs/manpages/lmhosts.5 0644 root other
+f none /usr/share/man/man5/smb.conf.5=docs/manpages/smb.conf.5 0644 root other
+f none /usr/share/man/man5/smbpasswd.5=docs/manpages/smbpasswd.5 0644 root other
+f none /usr/share/man/man7/samba.7=docs/manpages/samba.7 0644 root other
+f none /usr/share/man/man8/nmbd.8=docs/manpages/nmbd.8 0644 root other
+f none /usr/share/man/man8/smbd.8=docs/manpages/smbd.8 0644 root other
+f none /usr/share/man/man8/smbmnt.8=docs/manpages/smbmnt.8 0644 root other
+f none /usr/share/man/man8/smbmount.8=docs/manpages/smbmount.8 0644 root other
+f none /usr/share/man/man8/smbpasswd.8=docs/manpages/smbpasswd.8 0644 root other
+f none /usr/share/man/man8/smbumount.8=docs/manpages/smbumount.8 0644 root other
+f none /usr/share/man/man8/swat.8=docs/manpages/swat.8 0644 root other
+f none /usr/share/man/man8/smbspool.8=docs/manpages/smbspool.8 0644 root other
+#
# Stuff that goes into lib
#
f none samba/lib/smb.conf.example=examples/smb.conf.default 0644 root other
diff --git a/source/Makefile.in b/source/Makefile.in
index 24d8692f987..4f642994924 100644
--- a/source/Makefile.in
+++ b/source/Makefile.in
@@ -39,7 +39,6 @@ LIBDIR = @libdir@
VARDIR = @localstatedir@
CONFIGDIR = @configdir@
MANDIR = @mandir@
-INCLUDEDIR = @includedir@
# The permissions to give the executables
INSTALLPERMS = 0755
@@ -82,11 +81,11 @@ FLAGS32 = $(ISA32) $(FLAGS5) $(PASSWD_FLAGS)
SPROGS = bin/smbd bin/nmbd bin/swat
PROGS1 = bin/smbclient bin/smbspool bin/testparm bin/testprns bin/smbstatus bin/smbcontrol @RUNPROG@
-PROGS2 = bin/smbpasswd bin/make_smbcodepage bin/rpcclient bin/make_unicodemap bin/smbcacls @WRAP@ @WRAP32@ @PAM_MOD@
+PROGS2 = bin/smbpasswd bin/make_smbcodepage bin/rpcclient bin/make_unicodemap bin/smbcacls @WRAP@ @WRAP32@
MPROGS = @MPROGS@
-PROGS = $(PROGS1) $(PROGS2) $(MPROGS) bin/nmblookup
+PROGS = $(PROGS1) $(PROGS2) $(MPROGS) bin/nmblookup bin/make_printerdef
-SCRIPTS = $(srcdir)/script/smbtar
+SCRIPTS = $(srcdir)/script/smbtar $(srcdir)/script/convert_smbpasswd
QUOTAOBJS=@QUOTAOBJS@
@@ -99,7 +98,7 @@ TDB_OBJ = tdb/tdb.o tdb/spinlock.o tdb/tdbutil.o
LIB_OBJ = lib/charcnv.o lib/charset.o lib/debug.o lib/fault.o \
lib/getsmbpass.o lib/interface.o lib/kanji.o lib/md4.o \
lib/interfaces.o lib/pidfile.o lib/replace.o \
- lib/signal.o lib/system.o lib/doscalls.o lib/time.o \
+ lib/signal.o lib/slprintf.o lib/system.o lib/doscalls.o lib/time.o \
lib/ufc.o lib/genrand.o lib/username.o lib/access.o lib/smbrun.o \
lib/bitmap.o lib/crc32.o lib/snprintf.o lib/wins_srv.o \
lib/util_array.o lib/util_str.o lib/util_sid.o \
@@ -120,13 +119,12 @@ LIBSMB_OBJ = libsmb/clientgen.o libsmb/cliconnect.o libsmb/clifile.o \
libsmb/clirap.o libsmb/clierror.o libsmb/climessage.o \
libsmb/clireadwrite.o libsmb/clilist.o libsmb/cliprint.o \
libsmb/clitrans.o libsmb/clisecdesc.o \
- libsmb/namequery.o libsmb/nmblib.o libsmb/clistr.o \
+ libsmb/namequery.o libsmb/nmblib.o \
libsmb/nterr.o libsmb/smbdes.o libsmb/smbencrypt.o \
libsmb/smberr.o libsmb/credentials.o libsmb/pwd_cache.o \
libsmb/passchange.o libsmb/unexpected.o $(RPC_PARSE_OBJ1)
LIBMSRPC_OBJ = libsmb/cli_lsarpc.o libsmb/cli_samr.o libsmb/cli_spoolss.o \
- libsmb/cli_netlogon.o libsmb/cli_srvsvc.o \
rpc_client/cli_pipe.o
RPC_SERVER_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o \
@@ -135,8 +133,7 @@ RPC_SERVER_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o \
rpc_server/srv_samr.o rpc_server/srv_samr_nt.o rpc_server/srv_srvsvc.o rpc_server/srv_srvsvc_nt.o \
rpc_server/srv_util.o rpc_server/srv_wkssvc.o rpc_server/srv_wkssvc_nt.o \
rpc_server/srv_pipe.o rpc_server/srv_dfs.o rpc_server/srv_dfs_nt.o \
- rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o \
- lib/util_getent.o
+ rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o
# this includes only the low level parse code, not stuff
# that requires knowledge of security contexts
@@ -169,7 +166,6 @@ OPLOCK_OBJ = smbd/oplock.o smbd/oplock_irix.o smbd/oplock_linux.o
NOTIFY_OBJ = smbd/notify.o smbd/notify_hash.o smbd/notify_kernel.o
SMBD_OBJ1 = smbd/server.o smbd/files.o smbd/chgpasswd.o smbd/connection.o \
- smbd/utmp.o smbd/session.o \
smbd/dfree.o smbd/dir.o smbd/password.o smbd/conn.o smbd/fileio.o \
smbd/ipc.o smbd/lanman.o smbd/mangle.o smbd/negprot.o \
smbd/message.o smbd/nttrans.o smbd/pipes.o \
@@ -245,8 +241,7 @@ SMBPASSWD_OBJ = utils/smbpasswd.o $(PARAM_OBJ) \
$(UBIQX_OBJ) $(RPC_PARSE_OBJ) $(RPC_CLIENT_OBJ) $(LIB_OBJ)
RPCCLIENT_OBJ1 = rpcclient/rpcclient.o rpcclient/cmd_spoolss.o \
- rpcclient/cmd_samr.o rpcclient/cmd_lsarpc.o \
- rpcclient/cmd_netlogon.o rpcclient/cmd_srvsvc.o
+ rpcclient/cmd_samr.o rpcclient/cmd_lsarpc.o
RPCCLIENT_OBJ = $(RPCCLIENT_OBJ1) \
$(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \
@@ -263,8 +258,6 @@ SMBW_OBJ = smbwrapper/smbw.o \
SMBWRAPPER_OBJ = $(SMBW_OBJ) smbwrapper/wrapped.o
-LIBSMBCLIENT_OBJ = libsmb/libsmbclient.o $(LIB_OBJ) $(LIBSMB_OBJ) $(PARAM_OBJ) $(UBIQX_OBJ)
-
CLIENT_OBJ = client/client.o client/clitar.o \
$(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \
$(READLINE_OBJ)
@@ -332,21 +325,6 @@ NSS_OBJ = $(NSS_OBJ_0:.o=.po)
PICOBJS = $(SMBWRAPPER_OBJ:.o=.po)
PICOBJS32 = $(SMBWRAPPER_OBJ:.o=.po32)
-PAM_SMBPASS_OBJ_0 = pam_smbpass/pam_smb_auth.o pam_smbpass/pam_smb_passwd.o \
- pam_smbpass/pam_smb_acct.o pam_smbpass/support.o \
- lib/debug.o lib/util_sid.o lib/messages.o lib/util_str.o \
- lib/wins_srv.o lib/substitute.o lib/select.o lib/util.o \
- nsswitch/wb_client.o nsswitch/wb_common.o lib/system.o \
- lib/charset.o lib/util_file.o lib/kanji.o lib/genrand.o \
- lib/username.o lib/charcnv.o lib/time.o lib/md4.o \
- lib/util_unistr.o lib/signal.o lib/talloc.o lib/ms_fnmatch.o \
- lib/util_sock.o lib/doscalls.o lib/smbrun.o lib/util_sec.o \
- ubiqx/ubi_sLinkList.o libsmb/smbencrypt.o libsmb/smbdes.o \
- $(PARAM_OBJ) $(TDB_OBJ) $(PASSDB_OBJ)
-
-PAM_SMBPASS_OBJ = $(PAM_SMBPASS_OBJ_0:.o=.po)
-LIBSMBCLIENT_PICOBJS = $(LIBSMBCLIENT_OBJ:.o=.po)
-
WINBINDD_OBJ1 = \
nsswitch/winbindd.o \
nsswitch/winbindd_user.o \
@@ -378,8 +356,6 @@ NSS_OBJ = $(NSS_OBJ_0:.o=.po)
all : CHECK $(SPROGS) $(PROGS)
-pam_smbpass : CHECK bin/pam_smbpass.@SHLIBEXT@
-
smbwrapper : CHECK bin/smbsh bin/smbwrapper.@SHLIBEXT@ @WRAP32@
smbtorture : CHECK bin/smbtorture
@@ -582,45 +558,33 @@ bin/smbwrapper.32.@SHLIBEXT@: $(PICOBJS32)
@echo Linking shared library $@
@$(LD) -32 @LDSHFLAGS@ -o $@ $(PICOBJS32) $(LIBS)
-bin/libsmbclient.so: $(LIBSMBCLIENT_PICOBJS)
- @echo Linking libsmbclient shared library $@
- @$(LD) -shared -o $@ $(LIBSMBCLIENT_PICOBJS) $(LIBS) # Anything else?
-
bin/smbsh: $(SMBSH_OBJ) bin/.dummy
@echo Linking $@
@$(CC) $(FLAGS) -o $@ $(SMBSH_OBJ) $(LDFLAGS) $(LIBS)
-bin/pam_smbpass.@SHLIBEXT@: $(PAM_SMBPASS_OBJ)
- @echo Linking shared library $@
- $(LD) @LDSHFLAGS@ -symbolic -o $@ $(PAM_SMBPASS_OBJ) -lpam $(LIBS) -lc
-
nsswitch/libnss_wins.so: $(NSS_OBJ)
@echo "Linking $@"
@$(LD) @LDSHFLAGS@ -o $@ $(NSS_OBJ) -lc
-#bin/winbindd: $(WINBINDD_OBJ) bin/.dummy
-# @echo Linking $@
-# @$(LINK) -o $@ $(WINBINDD_OBJ) $(LIBS)
-
-#nsswitch/libnss_winbind.so: $(WINBIND_NSS_PICOBJS)
-# @echo "Linking $@"
-# @$(LINK) -shared -o $@ $(WINBIND_NSS_PICOBJS)
+bin/winbindd: $(WINBINDD_OBJ) bin/.dummy
+ @echo Linking $@
+ @$(LINK) -o $@ $(WINBINDD_OBJ) $(LIBS)
-#nsswitch/pam_winbind.so: $(PAM_WINBIND_OBJ) bin/.dummy
-# @echo Linking $@
-# @$(LINK) -shared -o $@ $(PAM_WINBIND_OBJ)
+nsswitch/libnss_winbind.so: $(WINBIND_NSS_PICOBJS)
+ @echo "Linking $@"
+ @$(LINK) -shared -o $@ $(WINBIND_NSS_PICOBJS)
-#bin/wbinfo: $(WBINFO_OBJ) $(PARAM_OBJ) $(LIB_OBJ) $(NOPROTO_OBJ) $(UBIQX_OBJ) bin/.dummy
-# @echo Linking $@
-# @$(LINK) -o $@ $(WBINFO_OBJ) $(PARAM_OBJ) $(LIB_OBJ) $(NOPROTO_OBJ) \
-# $(UBIQX_OBJ) $(LIBS)
+nsswitch/pam_winbind.so: $(PAM_WINBIND_OBJ) bin/.dummy
+ @echo Linking $@
+ @$(LINK) -shared -o $@ $(PAM_WINBIND_OBJ)
-#nsswitch: nsswitch/libnss_wins.so nsswitch/pam_winbind.so \
-# nsswitch/libnss_winbind.so bin/wbinfo
+bin/wbinfo: $(WBINFO_OBJ) $(PARAM_OBJ) $(LIB_OBJ) $(NOPROTO_OBJ) $(UBIQX_OBJ) bin/.dummy
+ @echo Linking $@
+ @$(LINK) -o $@ $(WBINFO_OBJ) $(PARAM_OBJ) $(LIB_OBJ) $(NOPROTO_OBJ) \
+ $(UBIQX_OBJ) $(LIBS)
-bin/winbindd nsswitch/libnss_winbind.so nsswitch/pam_winbind.so bin/wbinfo nsswitch:
- @echo The winbind code in this branch is not compilable. Please use
- @echo the version in HEAD CVS instead.
+nsswitch: nsswitch/libnss_wins.so nsswitch/pam_winbind.so \
+ nsswitch/libnss_winbind.so bin/wbinfo
install: installbin installman installscripts installcp installswat
diff --git a/source/acconfig.h b/source/acconfig.h
index f2b812409fe..d550a2c4f46 100644
--- a/source/acconfig.h
+++ b/source/acconfig.h
@@ -1,6 +1,5 @@
#undef HAVE_VOLATILE
#undef HAVE_BROKEN_READDIR
-#undef HAVE_C99_VSNPRINTF
#undef HAVE_ERRNO_DECL
#undef HAVE_LONGLONG
#undef HAVE_OFF64_T
@@ -8,7 +7,6 @@
#undef HAVE_UNSIGNED_CHAR
#undef HAVE_UTIMBUF
#undef HAVE_SIG_ATOMIC_T_TYPE
-#undef HAVE_SOCKLEN_T_TYPE
#undef ssize_t
#undef ino_t
#undef ssize_t
@@ -63,7 +61,6 @@
#undef WITH_NISPLUS
#undef WITH_TDBPWD
#undef WITH_PAM
-#undef WITH_PAM_SMBPASS
#undef WITH_NISPLUS_HOME
#undef WITH_AUTOMOUNT
#undef WITH_SMBMOUNT
@@ -147,10 +144,6 @@
#undef HAVE_UNIXWARE_ACLS
#undef HAVE_SOLARIS_ACLS
#undef HAVE_IRIX_ACLS
+#undef HAVE_XFS_ACLS
#undef HAVE_AIX_ACLS
#undef HAVE_NO_ACLS
-#undef HAVE_LIBPAM
-#undef HAVE_ASPRINTF_DECL
-#undef HAVE_VASPRINTF_DECL
-#undef HAVE_SNPRINTF_DECL
-#undef HAVE_VSNPRINTF_DECL
diff --git a/source/aclocal.m4 b/source/aclocal.m4
index 13788f99bea..9a7145402a9 100644
--- a/source/aclocal.m4
+++ b/source/aclocal.m4
@@ -49,20 +49,6 @@ fi
rm -f conftest*
])])
-dnl see if a declaration exists for a function or variable
-dnl defines HAVE_function_DECL if it exists
-dnl AC_HAVE_DECL(var, includes)
-AC_DEFUN(AC_HAVE_DECL,
-[
- AC_CACHE_CHECK([for $1 declaration],ac_cv_have_$1_decl,[
- AC_TRY_COMPILE([$2],[int i = (int)$1],
- ac_cv_have_$1_decl=yes,ac_cv_have_$1_decl=no)])
- if test x"$ac_cv_have_$1_decl" = x"yes"; then
- AC_DEFINE([HAVE_]translit([$1], [a-z], [A-Z])[_DECL])
- fi
-])
-
-
dnl check for a function in a library, but don't
dnl keep adding the same library to the LIBS variable.
dnl AC_LIBTESTFUNC(lib,func)
diff --git a/source/auth/pampass.c b/source/auth/pampass.c
index 53d2a062fdd..e6de54dfe69 100644
--- a/source/auth/pampass.c
+++ b/source/auth/pampass.c
@@ -5,7 +5,6 @@
Copyright (C) Andrew Tridgell 1992-2001
Copyright (C) John H Terpsta 1999-2001
Copyright (C) Andrew Bartlett 2001
- Copyright (C) Jeremy Allison 2001
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
@@ -44,106 +43,65 @@ extern int DEBUGLEVEL;
#include <security/pam_appl.h>
/*
- * Structure used to communicate between the conversation function
- * and the server_login/change password functions.
+ * Static variables used to communicate between the conversation function
+ * and the server_login function
*/
-struct smb_pam_userdata {
- char *PAM_username;
- char *PAM_password;
- char *PAM_newpassword;
-};
-
-typedef int (*smb_pam_conv_fn)(int, const struct pam_message **, struct pam_response **, void *appdata_ptr);
+static char *PAM_username;
+static char *PAM_password;
/*
* Macros to help make life easy
*/
#define COPY_STRING(s) (s) ? strdup(s) : NULL
-/*******************************************************************
- PAM error handler.
- *********************************************************************/
-
-static BOOL smb_pam_error_handler(pam_handle_t *pamh, int pam_error, char *msg, int dbglvl)
+/*
+ * PAM error handler.
+ */
+static BOOL pam_error_handler(pam_handle_t *pamh, int pam_error, char *msg, int dbglvl)
{
- if( pam_error != PAM_SUCCESS) {
- DEBUG(dbglvl, ("smb_pam_error_handler: PAM: %s : %s\n",
- msg, pam_strerror(pamh, pam_error)));
-
+ if( pam_error != PAM_SUCCESS)
+ {
+ DEBUG(dbglvl, ("PAM: %s : %s\n", msg, pam_strerror(pamh, pam_error)));
return False;
}
return True;
}
-/*******************************************************************
- This function is a sanity check, to make sure that we NEVER report
- failure as sucess.
-*********************************************************************/
-
-static BOOL smb_pam_nt_status_error_handler(pam_handle_t *pamh, int pam_error,
- char *msg, int dbglvl, uint32 *nt_status)
-{
- if (smb_pam_error_handler(pamh, pam_error, msg, dbglvl))
- return True;
-
- if (*nt_status == NT_STATUS_NOPROBLEMO) {
- /* Complain LOUDLY */
- DEBUG(0, ("smb_pam_nt_status_error_handler: PAM: BUG: PAM and NT_STATUS \
-error MISMATCH, forcing to NT_STATUS_LOGON_FAILURE"));
- *nt_status = NT_STATUS_LOGON_FAILURE;
- }
- return False;
-}
-
/*
* PAM conversation function
* Here we assume (for now, at least) that echo on means login name, and
* echo off means password.
*/
-static int smb_pam_conv(int num_msg,
+static int PAM_conv(int num_msg,
const struct pam_message **msg,
struct pam_response **resp,
void *appdata_ptr)
{
int replies = 0;
struct pam_response *reply = NULL;
- struct smb_pam_userdata *udp = (struct smb_pam_userdata *)appdata_ptr;
-
- *resp = NULL;
-
- if (num_msg <= 0)
- return PAM_CONV_ERR;
-
- /*
- * Apparantly HPUX has a buggy PAM that doesn't support the
- * appdata_ptr. Fail if this is the case. JRA.
- */
-
- if (udp == NULL) {
- DEBUG(0,("smb_pam_conv: PAM on this system is broken - appdata_ptr == NULL !\n"));
- return PAM_CONV_ERR;
- }
reply = malloc(sizeof(struct pam_response) * num_msg);
if (!reply)
return PAM_CONV_ERR;
- memset(reply, '\0', sizeof(struct pam_response) * num_msg);
-
- for (replies = 0; replies < num_msg; replies++) {
- switch (msg[replies]->msg_style) {
+ for (replies = 0; replies < num_msg; replies++)
+ {
+ switch (msg[replies]->msg_style)
+ {
case PAM_PROMPT_ECHO_ON:
reply[replies].resp_retcode = PAM_SUCCESS;
- reply[replies].resp = COPY_STRING(udp->PAM_username);
+ reply[replies].resp =
+ COPY_STRING(PAM_username);
/* PAM frees resp */
break;
case PAM_PROMPT_ECHO_OFF:
reply[replies].resp_retcode = PAM_SUCCESS;
- reply[replies].resp = COPY_STRING(udp->PAM_password);
+ reply[replies].resp =
+ COPY_STRING(PAM_password);
/* PAM frees resp */
break;
@@ -167,712 +125,291 @@ static int smb_pam_conv(int num_msg,
return PAM_SUCCESS;
}
-/*
- * PAM password change conversation function
- * Here we assume (for now, at least) that echo on means login name, and
- * echo off means password.
- */
-
-static void special_char_sub(char *buf)
-{
- all_string_sub(buf, "\\n", "", 0);
- all_string_sub(buf, "\\r", "", 0);
- all_string_sub(buf, "\\s", " ", 0);
- all_string_sub(buf, "\\t", "\t", 0);
-}
-
-static void pwd_sub(char *buf, char *username, char *oldpass, char *newpass)
-{
- pstring_sub(buf, "%u", username);
- all_string_sub(buf, "%o", oldpass, sizeof(fstring));
- all_string_sub(buf, "%n", newpass, sizeof(fstring));
-}
-
-
-struct chat_struct {
- struct chat_struct *next, *prev;
- fstring prompt;
- fstring reply;
+static struct pam_conv PAM_conversation = {
+ &PAM_conv,
+ NULL
};
-/**************************************************************
- Create a linked list containing chat data.
-***************************************************************/
-
-static struct chat_struct *make_pw_chat(char *p)
-{
- fstring prompt;
- fstring reply;
- struct chat_struct *list = NULL;
- struct chat_struct *t;
- struct chat_struct *tmp;
-
- while (1) {
- t = (struct chat_struct *)malloc(sizeof(*t));
- if (!t) {
- DEBUG(0,("make_pw_chat: malloc failed!\n"));
- return NULL;
- }
-
- ZERO_STRUCTP(t);
-
- DLIST_ADD_END(list, t, tmp);
-
- if (!next_token(&p, prompt, NULL, sizeof(fstring)))
- break;
-
- if (strequal(prompt,"."))
- fstrcpy(prompt,"*");
-
- special_char_sub(prompt);
- fstrcpy(t->prompt, prompt);
-
- if (!next_token(&p, reply, NULL, sizeof(fstring)))
- break;
-
- if (strequal(reply,"."))
- fstrcpy(reply,"");
-
- special_char_sub(reply);
- fstrcpy(t->reply, reply);
-
- }
- return list;
-}
-
-static void free_pw_chat(struct chat_struct *list)
-{
- while (list) {
- struct chat_struct *old_head = list;
- DLIST_REMOVE(list, list);
- free(old_head);
- }
-}
-
-static int smb_pam_passchange_conv(int num_msg,
- const struct pam_message **msg,
- struct pam_response **resp,
- void *appdata_ptr)
-{
- int replies = 0;
- struct pam_response *reply = NULL;
- fstring current_prompt;
- fstring current_reply;
- struct smb_pam_userdata *udp = (struct smb_pam_userdata *)appdata_ptr;
- struct chat_struct *pw_chat= make_pw_chat(lp_passwd_chat());
- struct chat_struct *t;
- BOOL found;
- *resp = NULL;
-
- DEBUG(10,("smb_pam_passchange_conv: starting converstation for %d messages\n", num_msg));
-
- if (num_msg <= 0)
- return PAM_CONV_ERR;
-
- if (pw_chat == NULL)
- return PAM_CONV_ERR;
-
- /*
- * Apparantly HPUX has a buggy PAM that doesn't support the
- * appdata_ptr. Fail if this is the case. JRA.
- */
-
- if (udp == NULL) {
- DEBUG(0,("smb_pam_passchange_conv: PAM on this system is broken - appdata_ptr == NULL !\n"));
- free_pw_chat(pw_chat);
- return PAM_CONV_ERR;
- }
-
- reply = malloc(sizeof(struct pam_response) * num_msg);
- if (!reply) {
- DEBUG(0,("smb_pam_passchange_conv: malloc for reply failed!\n"));
- free_pw_chat(pw_chat);
- return PAM_CONV_ERR;
- }
-
- for (replies = 0; replies < num_msg; replies++) {
- found = False;
- DEBUG(10,("smb_pam_passchange_conv: Processing message %d\n", replies));
- switch (msg[replies]->msg_style) {
- case PAM_PROMPT_ECHO_ON:
- DEBUG(10,("smb_pam_passchange_conv: PAM_PROMPT_ECHO_ON: PAM said: %s\n", msg[replies]->msg));
- fstrcpy(current_prompt, msg[replies]->msg);
- strlower(current_prompt);
- for (t=pw_chat; t; t=t->next) {
- if (ms_fnmatch(t->prompt, current_prompt) == 0) {
- fstrcpy(current_reply, t->reply);
- pwd_sub(current_reply, udp->PAM_username, udp->PAM_password, udp->PAM_newpassword);
- DEBUG(10,("smb_pam_passchange_conv: PAM_PROMPT_ECHO_ON: We sent: %s\n", current_reply));
- reply[replies].resp_retcode = PAM_SUCCESS;
- reply[replies].resp = COPY_STRING(current_reply);
- found = True;
- break;
- }
- }
- /* PAM frees resp */
- if (!found) {
- DEBUG(3,("smb_pam_passchange_conv: Could not find reply for PAM prompt: %s\n",msg[replies]->msg));
- free_pw_chat(pw_chat);
- free(reply);
- reply = NULL;
- return PAM_CONV_ERR;
- }
- break;
-
- case PAM_PROMPT_ECHO_OFF:
- DEBUG(10,("smb_pam_passchange_conv: PAM_PROMPT_ECHO_OFF: PAM said: %s\n", msg[replies]->msg));
- fstrcpy(current_prompt, msg[replies]->msg);
- strlower(current_prompt);
- for (t=pw_chat; t; t=t->next) {
- if (ms_fnmatch(t->prompt, current_prompt) == 0) {
- fstrcpy(current_reply, t->reply);
- DEBUG(10,("smb_pam_passchange_conv: PAM_PROMPT_ECHO_OFF: We sent: %s\n", current_reply));
- pwd_sub(current_reply, udp->PAM_username, udp->PAM_password, udp->PAM_newpassword);
- reply[replies].resp_retcode = PAM_SUCCESS;
- reply[replies].resp = COPY_STRING(current_reply);
-#ifdef DEBUG_PASSWORD
- DEBUG(100,("smb_pam_passchange_conv: PAM_PROMPT_ECHO_OFF: We actualy sent: %s\n", current_reply));
-#endif
- found = True;
- break;
- }
- }
- /* PAM frees resp */
-
- if (!found) {
- DEBUG(3,("smb_pam_passchange_conv: Could not find reply for PAM prompt: %s\n",msg[replies]->msg));
- free_pw_chat(pw_chat);
- free(reply);
- reply = NULL;
- return PAM_CONV_ERR;
- }
- break;
-
- case PAM_TEXT_INFO:
- /* fall through */
-
- case PAM_ERROR_MSG:
- /* ignore it... */
- reply[replies].resp_retcode = PAM_SUCCESS;
- reply[replies].resp = NULL;
- break;
-
- default:
- /* Must be an error of some sort... */
- free_pw_chat(pw_chat);
- free(reply);
- reply = NULL;
- return PAM_CONV_ERR;
- }
- }
-
- free_pw_chat(pw_chat);
- if (reply)
- *resp = reply;
- return PAM_SUCCESS;
-}
-
-/***************************************************************************
- Free up a malloced pam_conv struct.
-****************************************************************************/
-
-static void smb_free_pam_conv(struct pam_conv *pconv)
-{
- if (pconv)
- safe_free(pconv->appdata_ptr);
-
- safe_free(pconv);
-}
-
-/***************************************************************************
- Allocate a pam_conv struct.
-****************************************************************************/
-
-static struct pam_conv *smb_setup_pam_conv(smb_pam_conv_fn smb_pam_conv_fnptr, char *user,
- char *passwd, char *newpass)
-{
- struct pam_conv *pconv = (struct pam_conv *)malloc(sizeof(struct pam_conv));
- struct smb_pam_userdata *udp = (struct smb_pam_userdata *)malloc(sizeof(struct smb_pam_userdata));
-
- if (pconv == NULL || udp == NULL) {
- safe_free(pconv);
- safe_free(udp);
- return NULL;
- }
-
- udp->PAM_username = user;
- udp->PAM_password = passwd;
- udp->PAM_newpassword = newpass;
-
- pconv->conv = smb_pam_conv_fnptr;
- pconv->appdata_ptr = (void *)udp;
- return pconv;
-}
-
/*
* PAM Closing out cleanup handler
*/
-
-static BOOL smb_pam_end(pam_handle_t *pamh, struct pam_conv *smb_pam_conv_ptr)
+static BOOL proc_pam_end(pam_handle_t *pamh)
{
- int pam_error;
-
- smb_free_pam_conv(smb_pam_conv_ptr);
+ int pam_error;
- if( pamh != NULL ) {
+ if( pamh != NULL )
+ {
pam_error = pam_end(pamh, 0);
- if(smb_pam_error_handler(pamh, pam_error, "End Cleanup Failed", 2) == True) {
- DEBUG(4, ("smb_pam_end: PAM: PAM_END OK.\n"));
- return True;
+ if(pam_error_handler(pamh, pam_error, "End Cleanup Failed", 2) == True) {
+ DEBUG(4, ("PAM: PAM_END OK.\n"));
+ return True;
}
- }
- DEBUG(2,("smb_pam_end: PAM: not initialised"));
- return False;
+ }
+ DEBUG(2,("PAM: not initialised"));
+ return False;
}
/*
* Start PAM authentication for specified account
*/
-
-static BOOL smb_pam_start(pam_handle_t **pamh, char *user, char *rhost, struct pam_conv *pconv)
+static BOOL proc_pam_start(pam_handle_t **pamh, char *user)
{
- int pam_error;
+ int pam_error;
+ char * rhost;
- *pamh = (pam_handle_t *)NULL;
+ DEBUG(4,("PAM: Init user: %s\n", user));
- DEBUG(4,("smb_pam_start: PAM: Init user: %s\n", user));
+ pam_error = pam_start("samba", user, &PAM_conversation, pamh);
+ if( !pam_error_handler(*pamh, pam_error, "Init Failed", 0)) {
+ proc_pam_end(*pamh);
+ return False;
+ }
- pam_error = pam_start("samba", user, pconv, pamh);
- if( !smb_pam_error_handler(*pamh, pam_error, "Init Failed", 0)) {
- *pamh = (pam_handle_t *)NULL;
- return False;
- }
-
- if (rhost == NULL) {
- rhost = client_name();
- if (strequal(rhost,"UNKNOWN"))
- rhost = client_addr();
- }
+ rhost = client_name();
+ if (strcmp(rhost,"UNKNOWN") == 0)
+ rhost = client_addr();
#ifdef PAM_RHOST
- DEBUG(4,("smb_pam_start: PAM: setting rhost to: %s\n", rhost));
- pam_error = pam_set_item(*pamh, PAM_RHOST, rhost);
- if(!smb_pam_error_handler(*pamh, pam_error, "set rhost failed", 0)) {
- smb_pam_end(*pamh, pconv);
- *pamh = (pam_handle_t *)NULL;
- return False;
- }
+ DEBUG(4,("PAM: setting rhost to: %s\n", rhost));
+ pam_error = pam_set_item(*pamh, PAM_RHOST, rhost);
+ if(!pam_error_handler(*pamh, pam_error, "set rhost failed", 0)) {
+ proc_pam_end(*pamh);
+ return False;
+ }
#endif
#ifdef PAM_TTY
- DEBUG(4,("smb_pam_start: PAM: setting tty\n"));
- pam_error = pam_set_item(*pamh, PAM_TTY, "samba");
- if (!smb_pam_error_handler(*pamh, pam_error, "set tty failed", 0)) {
- smb_pam_end(*pamh, pconv);
- *pamh = (pam_handle_t *)NULL;
- return False;
- }
+ DEBUG(4,("PAM: setting tty\n"));
+ pam_error = pam_set_item(*pamh, PAM_TTY, "samba");
+ if (!pam_error_handler(*pamh, pam_error, "set tty failed", 0)) {
+ proc_pam_end(*pamh);
+ return False;
+ }
#endif
- DEBUG(4,("smb_pam_start: PAM: Init passed for user: %s\n", user));
- return True;
+ DEBUG(4,("PAM: Init passed for user: %s\n", user));
+ return True;
}
/*
* PAM Authentication Handler
*/
-static uint32 smb_pam_auth(pam_handle_t *pamh, char *user)
+static BOOL pam_auth(pam_handle_t *pamh, char *user, char *password)
{
int pam_error;
- uint32 nt_status = NT_STATUS_LOGON_FAILURE;
/*
* To enable debugging set in /etc/pam.d/samba:
* auth required /lib/security/pam_pwdb.so nullok shadow audit
*/
- DEBUG(4,("smb_pam_auth: PAM: Authenticate User: %s\n", user));
- pam_error = pam_authenticate(pamh, PAM_SILENT | lp_null_passwords() ? 0 : PAM_DISALLOW_NULL_AUTHTOK);
+ DEBUG(4,("PAM: Authenticate User: %s\n", user));
+ pam_error = pam_authenticate(pamh, PAM_SILENT); /* Can we authenticate user? */
switch( pam_error ){
case PAM_AUTH_ERR:
- DEBUG(2, ("smb_pam_auth: PAM: Athentication Error for user %s\n", user));
- nt_status = NT_STATUS_WRONG_PASSWORD;
+ DEBUG(2, ("PAM: Athentication Error\n"));
break;
case PAM_CRED_INSUFFICIENT:
- DEBUG(2, ("smb_pam_auth: PAM: Insufficient Credentials for user %s\n", user));
- nt_status = NT_STATUS_INSUFFICIENT_LOGON_INFO;
+ DEBUG(2, ("PAM: Insufficient Credentials\n"));
break;
case PAM_AUTHINFO_UNAVAIL:
- DEBUG(2, ("smb_pam_auth: PAM: Authentication Information Unavailable for user %s\n", user));
- nt_status = NT_STATUS_LOGON_FAILURE;
+ DEBUG(2, ("PAM: Authentication Information Unavailable\n"));
break;
case PAM_USER_UNKNOWN:
- DEBUG(2, ("smb_pam_auth: PAM: Username %s NOT known to Authentication system\n", user));
- nt_status = NT_STATUS_NO_SUCH_USER;
+ DEBUG(2, ("PAM: Username NOT known to Authentication system\n"));
break;
case PAM_MAXTRIES:
- DEBUG(2, ("smb_pam_auth: PAM: One or more authentication modules reports user limit for user %s exceeeded\n", user));
- nt_status = NT_STATUS_REMOTE_SESSION_LIMIT;
+ DEBUG(2, ("PAM: One or more authentication modules reports user limit exceeeded\n"));
break;
case PAM_ABORT:
- DEBUG(0, ("smb_pam_auth: PAM: One or more PAM modules failed to load for user %s\n", user));
- nt_status = NT_STATUS_LOGON_FAILURE;
- break;
- case PAM_SUCCESS:
- DEBUG(4, ("smb_pam_auth: PAM: User %s Authenticated OK\n", user));
- nt_status = NT_STATUS_NOPROBLEMO;
+ DEBUG(0, ("PAM: One or more PAM modules failed to load\n"));
break;
+ case PAM_SUCCESS:
+ DEBUG(4, ("PAM: User %s Authenticated OK\n", user));
+ break;
default:
- DEBUG(0, ("smb_pam_auth: PAM: UNKNOWN ERROR while authenticating user %s\n", user));
- nt_status = NT_STATUS_LOGON_FAILURE;
- break;
+ DEBUG(0, ("PAM: UNKNOWN ERROR while authenticating user %s\n", user));
}
-
- smb_pam_nt_status_error_handler(pamh, pam_error, "Authentication Failure", 2, &nt_status);
- return nt_status;
+ if(!pam_error_handler(pamh, pam_error, "Authentication Failure", 2)) {
+ proc_pam_end(pamh);
+ return False;
+ }
+ /* If this point is reached, the user has been authenticated. */
+ return (True);
}
/*
* PAM Account Handler
*/
-static uint32 smb_pam_account(pam_handle_t *pamh, char * user)
+static BOOL pam_account(pam_handle_t *pamh, char * user, char * password)
{
int pam_error;
- uint32 nt_status = NT_STATUS_ACCOUNT_DISABLED;
- DEBUG(4,("smb_pam_account: PAM: Account Management for User: %s\n", user));
+ DEBUG(4,("PAM: Account Management for User: %s\n", user));
pam_error = pam_acct_mgmt(pamh, PAM_SILENT); /* Is user account enabled? */
switch( pam_error ) {
case PAM_AUTHTOK_EXPIRED:
- DEBUG(2, ("smb_pam_account: PAM: User %s is valid but password is expired\n", user));
- nt_status = NT_STATUS_PASSWORD_EXPIRED;
+ DEBUG(2, ("PAM: User is valid but password is expired\n"));
break;
case PAM_ACCT_EXPIRED:
- DEBUG(2, ("smb_pam_account: PAM: User %s no longer permitted to access system\n", user));
- nt_status = NT_STATUS_ACCOUNT_EXPIRED;
+ DEBUG(2, ("PAM: User no longer permitted to access system\n"));
break;
case PAM_AUTH_ERR:
- DEBUG(2, ("smb_pam_account: PAM: There was an authentication error for user %s\n", user));
- nt_status = NT_STATUS_LOGON_FAILURE;
+ DEBUG(2, ("PAM: There was an authentication error\n"));
break;
case PAM_PERM_DENIED:
- DEBUG(0, ("smb_pam_account: PAM: User %s is NOT permitted to access system at this time\n", user));
- nt_status = NT_STATUS_ACCOUNT_RESTRICTION;
+ DEBUG(0, ("PAM: User is NOT permitted to access system at this time\n"));
break;
case PAM_USER_UNKNOWN:
- DEBUG(0, ("smb_pam_account: PAM: User \"%s\" is NOT known to account management\n", user));
- nt_status = NT_STATUS_NO_SUCH_USER;
- break;
- case PAM_SUCCESS:
- DEBUG(4, ("smb_pam_account: PAM: Account OK for User: %s\n", user));
- nt_status = NT_STATUS_NOPROBLEMO;
+ DEBUG(0, ("PAM: User \"%s\" is NOT known to account management\n", user));
break;
+ case PAM_SUCCESS:
+ DEBUG(4, ("PAM: Account OK for User: %s\n", user));
+ break;
default:
- nt_status = NT_STATUS_ACCOUNT_DISABLED;
- DEBUG(0, ("smb_pam_account: PAM: UNKNOWN PAM ERROR (%d) during Account Management for User: %s\n", pam_error, user));
- break;
+ DEBUG(0, ("PAM: UNKNOWN ERROR for User: %s\n", user));
+ }
+ if(!pam_error_handler(pamh, pam_error, "Account Check Failed", 2)) {
+ proc_pam_end(pamh);
+ return False;
}
-
- smb_pam_nt_status_error_handler(pamh, pam_error, "Account Check Failed", 2, &nt_status);
- return nt_status;
-}
-
-/*
- * PAM Credential Setting
- */
-
-static uint32 smb_pam_setcred(pam_handle_t *pamh, char * user)
-{
- int pam_error;
- uint32 nt_status = NT_STATUS_NO_TOKEN;
/*
* This will allow samba to aquire a kerberos token. And, when
* exporting an AFS cell, be able to /write/ to this cell.
*/
- DEBUG(4,("PAM: Account Management SetCredentials for User: %s\n", user));
+ DEBUG(4,("PAM: Account Management SetCredentials for User: %s\n", user));
pam_error = pam_setcred(pamh, (PAM_ESTABLISH_CRED|PAM_SILENT));
- switch( pam_error ) {
- case PAM_CRED_UNAVAIL:
- DEBUG(0, ("smb_pam_setcred: PAM: Credentials not found for user:%s\n", user ));
- nt_status = NT_STATUS_NO_TOKEN;
- break;
- case PAM_CRED_EXPIRED:
- DEBUG(0, ("smb_pam_setcred: PAM: Credentials for user: \"%s\" EXPIRED!\n", user ));
- nt_status = NT_STATUS_PASSWORD_EXPIRED;
- break;
- case PAM_USER_UNKNOWN:
- DEBUG(0, ("smb_pam_setcred: PAM: User: \"%s\" is NOT known so can not set credentials!\n", user ));
- nt_status = NT_STATUS_NO_SUCH_USER;
- break;
- case PAM_CRED_ERR:
- DEBUG(0, ("smb_pam_setcred: PAM: Unknown setcredentials error - unable to set credentials for %s\n", user ));
- nt_status = NT_STATUS_LOGON_FAILURE;
- break;
- case PAM_SUCCESS:
- DEBUG(4, ("smb_pam_setcred: PAM: SetCredentials OK for User: %s\n", user));
- nt_status = NT_STATUS_NOPROBLEMO;
- break;
- default:
- DEBUG(0, ("smb_pam_setcred: PAM: UNKNOWN PAM ERROR (%d) during SetCredentials for User: %s\n", pam_error, user));
- nt_status = NT_STATUS_NO_TOKEN;
- break;
- }
-
- smb_pam_nt_status_error_handler(pamh, pam_error, "Set Credential Failure", 2, &nt_status);
- return nt_status;
-}
-
-/*
- * PAM Internal Session Handler
- */
-static BOOL smb_internal_pam_session(pam_handle_t *pamh, char *user, char *tty, BOOL flag)
-{
- int pam_error;
-
-#ifdef PAM_TTY
- DEBUG(4,("smb_internal_pam_session: PAM: tty set to: %s\n", tty));
- pam_error = pam_set_item(pamh, PAM_TTY, tty);
- if (!smb_pam_error_handler(pamh, pam_error, "set tty failed", 0))
+ if(!pam_error_handler(pamh, pam_error, "Set Credential Failure", 2)) {
+ proc_pam_end(pamh);
return False;
-#endif
-
- if (flag) {
- pam_error = pam_open_session(pamh, PAM_SILENT);
- if (!smb_pam_error_handler(pamh, pam_error, "session setup failed", 0))
- return False;
- } else {
- pam_setcred(pamh, (PAM_DELETE_CRED|PAM_SILENT)); /* We don't care if this fails */
- pam_error = pam_close_session(pamh, PAM_SILENT); /* This will probably pick up the error anyway */
- if (!smb_pam_error_handler(pamh, pam_error, "session close failed", 0))
- return False;
}
+
+ /* If this point is reached, the user has been authenticated. */
return (True);
}
+
/*
- * Internal PAM Password Changer.
+ * PAM Internal Session Handler
*/
-
-static BOOL smb_pam_chauthtok(pam_handle_t *pamh, char * user)
+static BOOL proc_pam_session(pam_handle_t *pamh, char *user, char *tty, BOOL flag)
{
- int pam_error;
-
- DEBUG(4,("smb_pam_chauthtok: PAM: Password Change for User: %s\n", user));
+ int pam_error;
- pam_error = pam_chauthtok(pamh, PAM_SILENT); /* Change Password */
+ PAM_password = NULL;
+ PAM_username = user;
- switch( pam_error ) {
- case PAM_AUTHTOK_ERR:
- DEBUG(2, ("PAM: unable to obtain the new authentication token - is password to weak?\n"));
- break;
-
- /* This doesn't seem to be defined on Solaris. JRA */
-#ifdef PAM_AUTHTOK_RECOVER_ERR
- case PAM_AUTHTOK_RECOVER_ERR:
- DEBUG(2, ("PAM: unable to obtain the old authentication token - was the old password wrong?.\n"));
- break;
+#ifdef PAM_TTY
+ DEBUG(4,("PAM: tty set to: %s\n", tty));
+ pam_error = pam_set_item(pamh, PAM_TTY, tty);
+ if (!pam_error_handler(pamh, pam_error, "set tty failed", 0)) {
+ proc_pam_end(pamh);
+ return False;
+ }
#endif
- case PAM_AUTHTOK_LOCK_BUSY:
- DEBUG(2, ("PAM: unable to change the authentication token since it is currently locked.\n"));
- break;
- case PAM_AUTHTOK_DISABLE_AGING:
- DEBUG(2, ("PAM: Authentication token aging has been disabled.\n"));
- break;
- case PAM_PERM_DENIED:
- DEBUG(0, ("PAM: Permission denied.\n"));
- break;
- case PAM_TRY_AGAIN:
- DEBUG(0, ("PAM: Could not update all authentication token(s). No authentication tokens were updated.\n"));
- break;
- case PAM_USER_UNKNOWN:
- DEBUG(0, ("PAM: User not known to PAM\n"));
- break;
- case PAM_SUCCESS:
- DEBUG(4, ("PAM: Account OK for User: %s\n", user));
- break;
- default:
- DEBUG(0, ("PAM: UNKNOWN PAM ERROR (%d) for User: %s\n", pam_error, user));
- }
-
- if(!smb_pam_error_handler(pamh, pam_error, "Password Change Failed", 2)) {
- return False;
- }
-
- /* If this point is reached, the password has changed. */
- return True;
+ if (flag) {
+ pam_error = pam_open_session(pamh, PAM_SILENT);
+ if (!pam_error_handler(pamh, pam_error, "session setup failed", 0)) {
+ proc_pam_end(pamh);
+ return False;
+ }
+ }
+ else
+ {
+ pam_error = pam_close_session(pamh, PAM_SILENT);
+ if (!pam_error_handler(pamh, pam_error, "session close failed", 0)) {
+ proc_pam_end(pamh);
+ return False;
+ }
+ }
+ return (True);
}
/*
* PAM Externally accessible Session handler
*/
-
-BOOL smb_pam_claim_session(char *user, char *tty, char *rhost)
+BOOL pam_session(BOOL flag, const connection_struct *conn, char *tty)
{
pam_handle_t *pamh = NULL;
- struct pam_conv *pconv = NULL;
-
- /* Ignore PAM if told to. */
-
- if (!lp_obey_pam_restrictions())
- return True;
-
- if ((pconv = smb_setup_pam_conv(smb_pam_conv, user, NULL, NULL)) == NULL)
- return False;
-
- if (!smb_pam_start(&pamh, user, rhost, pconv))
- return False;
+ char * user;
- if (!smb_internal_pam_session(pamh, user, tty, True)) {
- smb_pam_end(pamh, pconv);
+ user = malloc(strlen(conn->user)+1);
+ if ( user == NULL )
+ {
+ DEBUG(0, ("PAM: PAM_session Malloc Failed!\n"));
return False;
}
- return smb_pam_end(pamh, pconv);
-}
-
-/*
- * PAM Externally accessible Session handler
- */
-
-BOOL smb_pam_close_session(char *user, char *tty, char *rhost)
-{
- pam_handle_t *pamh = NULL;
- struct pam_conv *pconv = NULL;
-
- /* Ignore PAM if told to. */
-
- if (!lp_obey_pam_restrictions())
- return True;
-
- if ((pconv = smb_setup_pam_conv(smb_pam_conv, user, NULL, NULL)) == NULL)
- return False;
-
- if (!smb_pam_start(&pamh, user, rhost, pconv))
- return False;
+ /* This is freed by PAM */
+ StrnCpy(user, conn->user, strlen(conn->user)+1);
- if (!smb_internal_pam_session(pamh, user, tty, False)) {
- smb_pam_end(pamh, pconv);
- return False;
+ if (!proc_pam_start(&pamh, user))
+ {
+ proc_pam_end(pamh);
+ return False;
}
- return smb_pam_end(pamh, pconv);
+ if (proc_pam_session(pamh, user, tty, flag))
+ {
+ return proc_pam_end(pamh);
+ }
+ else
+ {
+ proc_pam_end(pamh);
+ return False;
+ }
}
/*
* PAM Externally accessible Account handler
*/
-
-uint32 smb_pam_accountcheck(char * user)
+BOOL pam_accountcheck(char * user)
{
- uint32 nt_status = NT_STATUS_ACCOUNT_DISABLED;
pam_handle_t *pamh = NULL;
- struct pam_conv *pconv = NULL;
-
- /* Ignore PAM if told to. */
-
- if (!lp_obey_pam_restrictions())
- return NT_STATUS_NOPROBLEMO;
-
- if ((pconv = smb_setup_pam_conv(smb_pam_conv, user, NULL, NULL)) == NULL)
- return False;
-
- if (!smb_pam_start(&pamh, user, NULL, pconv))
- return NT_STATUS_ACCOUNT_DISABLED;
- if ((nt_status = smb_pam_account(pamh, user)) != NT_STATUS_NOPROBLEMO)
- DEBUG(0, ("smb_pam_accountcheck: PAM: Account Validation Failed - Rejecting User %s!\n", user));
+ PAM_username = user;
+ PAM_password = NULL;
- smb_pam_end(pamh, pconv);
- return nt_status;
-}
-
-/*
- * PAM Password Validation Suite
- */
-
-uint32 smb_pam_passcheck(char * user, char * password)
-{
- pam_handle_t *pamh = NULL;
- uint32 nt_status = NT_STATUS_LOGON_FAILURE;
- struct pam_conv *pconv = NULL;
-
- /*
- * Note we can't ignore PAM here as this is the only
- * way of doing auths on plaintext passwords when
- * compiled --with-pam.
- */
-
- if ((pconv = smb_setup_pam_conv(smb_pam_conv, user, password, NULL)) == NULL)
- return NT_STATUS_LOGON_FAILURE;
-
- if (!smb_pam_start(&pamh, user, NULL, pconv))
- return NT_STATUS_LOGON_FAILURE;
-
- if ((nt_status = smb_pam_auth(pamh, user)) != NT_STATUS_NOPROBLEMO) {
- DEBUG(0, ("smb_pam_passcheck: PAM: smb_pam_auth failed - Rejecting User %s !\n", user));
- smb_pam_end(pamh, pconv);
- return nt_status;
- }
-
- if ((nt_status = smb_pam_account(pamh, user)) != NT_STATUS_NOPROBLEMO) {
- DEBUG(0, ("smb_pam_passcheck: PAM: smb_pam_account failed - Rejecting User %s !\n", user));
- smb_pam_end(pamh, pconv);
- return nt_status;
- }
-
- if ((nt_status = smb_pam_setcred(pamh, user)) != NT_STATUS_NOPROBLEMO) {
- DEBUG(0, ("smb_pam_passcheck: PAM: smb_pam_setcred failed - Rejecting User %s !\n", user));
- smb_pam_end(pamh, pconv);
- return nt_status;
+ if( proc_pam_start(&pamh, user))
+ {
+ if ( pam_account(pamh, user, NULL))
+ {
+ return( proc_pam_end(pamh));
+ }
}
-
- smb_pam_end(pamh, pconv);
- return nt_status;
+ DEBUG(0, ("PAM: Account Validation Failed - Rejecting User!\n"));
+ return( False );
}
/*
- * PAM Password Change Suite
+ * PAM Password Validation Suite
*/
-
-BOOL smb_pam_passchange(char * user, char * oldpassword, char * newpassword)
+BOOL pam_passcheck(char * user, char * password)
{
- /* Appropriate quantities of root should be obtained BEFORE calling this function */
- struct pam_conv *pconv = NULL;
pam_handle_t *pamh = NULL;
- if ((pconv = smb_setup_pam_conv(smb_pam_passchange_conv, user, oldpassword, newpassword)) == NULL)
- return False;
-
- if(!smb_pam_start(&pamh, user, NULL, pconv))
- return False;
+ PAM_username = user;
+ PAM_password = password;
- if (!smb_pam_chauthtok(pamh, user)) {
- DEBUG(0, ("smb_pam_passchange: PAM: Password Change Failed for user %s!\n", user));
- smb_pam_end(pamh, pconv);
- return False;
+ if( proc_pam_start(&pamh, user))
+ {
+ if ( pam_auth(pamh, user, password))
+ {
+ if ( pam_account(pamh, user, password))
+ {
+ return( proc_pam_end(pamh));
+ }
+ }
}
-
- return smb_pam_end(pamh, pconv);
+ DEBUG(0, ("PAM: System Validation Failed - Rejecting User!\n"));
+ return( False );
}
#else
-/* If PAM not used, no PAM restrictions on accounts. */
- uint32 smb_pam_accountcheck(char * user)
-{
- return NT_STATUS_NOPROBLEMO;
-}
+ /* Do *NOT* make this function static. Doing so breaks the compile on gcc */
-/* If PAM not used, also no PAM restrictions on sessions. */
- BOOL smb_pam_claim_session(char *user, char *tty, char *rhost)
-{
- return True;
-}
+ void pampass_dummy_function( void ) { } /*This stops compiler complaints */
-/* If PAM not used, also no PAM restrictions on sessions. */
- BOOL smb_pam_close_session(char *in_user, char *tty, char *rhost)
-{
- return True;
-}
#endif /* WITH_PAM */
diff --git a/source/auth/pass_check.c b/source/auth/pass_check.c
index 9424189b236..236465bc903 100644
--- a/source/auth/pass_check.c
+++ b/source/auth/pass_check.c
@@ -599,7 +599,7 @@ static BOOL password_check(char *password)
{
#ifdef WITH_PAM
- return (smb_pam_passcheck(this_user, password) == NT_STATUS_NOPROBLEMO);
+ return (pam_passcheck(this_user, password));
#endif /* WITH_PAM */
#ifdef WITH_AFS
@@ -681,13 +681,12 @@ the function pointer fn() points to a function to call when a successful
match is found and is used to update the encrypted password file
return True on correct match, False otherwise
****************************************************************************/
-
BOOL pass_check(char *user, char *password, int pwlen, struct passwd *pwd,
BOOL (*fn) (char *, char *))
{
pstring pass2;
int level = lp_passwordlevel();
- struct passwd *pass = NULL;
+ struct passwd *pass;
if (password)
password[pwlen] = 0;
@@ -709,20 +708,8 @@ BOOL pass_check(char *user, char *password, int pwlen, struct passwd *pwd,
pass = Get_Pwnam(user, True);
}
-#ifdef WITH_PAM
-
- /*
- * If we're using PAM we want to short-circuit all the
- * checks below and dive straight into the PAM code.
- */
-
- fstrcpy(this_user, user);
-
- DEBUG(4, ("pass_check: Checking (PAM) password for user %s (l=%d)\n", user, pwlen));
-
-#else /* Not using PAM */
- DEBUG(4, ("pass_check: Checking password for user %s (l=%d)\n", user, pwlen));
+ DEBUG(4, ("Checking password for user %s (l=%d)\n", user, pwlen));
if (!pass) {
DEBUG(3, ("Couldn't find user %s\n", user));
@@ -815,8 +802,6 @@ BOOL pass_check(char *user, char *password, int pwlen, struct passwd *pwd,
}
}
-#endif /* WITH_PAM */
-
/* try it as it came to us */
if (password_check(password)) {
if (fn)
diff --git a/source/client/client.c b/source/client/client.c
index 4969156f083..be2e6238c3b 100644
--- a/source/client/client.c
+++ b/source/client/client.c
@@ -473,7 +473,7 @@ static int do_list_queue_empty(void)
/****************************************************************************
a helper for do_list
****************************************************************************/
-static void do_list_helper(file_info *f, const char *mask, void *state)
+static void do_list_helper(file_info *f, const char *mask)
{
if (f->mode & aDIR) {
if (do_list_dirs && do_this_one(f)) {
@@ -537,7 +537,7 @@ void do_list(const char *mask,uint16 attribute,void (*fn)(file_info *),BOOL rec,
*/
pstring head;
pstrcpy(head, do_list_queue_head());
- cli_list(cli, head, attribute, do_list_helper, NULL);
+ cli_list(cli, head, attribute, do_list_helper);
remove_do_list_queue_head();
if ((! do_list_queue_empty()) && (fn == display_finfo))
{
@@ -561,7 +561,7 @@ void do_list(const char *mask,uint16 attribute,void (*fn)(file_info *),BOOL rec,
}
else
{
- if (cli_list(cli, mask, attribute, do_list_helper, NULL) == -1)
+ if (cli_list(cli, mask, attribute, do_list_helper) == -1)
{
DEBUG(0, ("%s listing %s\n", cli_errstr(cli), mask));
}
@@ -1117,50 +1117,27 @@ static void cmd_put(void)
do_put(rname,lname);
}
-/*************************************
- File list structure
-*************************************/
-
-static struct file_list {
- struct file_list *prev, *next;
- char *file_path;
- BOOL isdir;
-} *file_list;
-
-/****************************************************************************
- Free a file_list structure
-****************************************************************************/
-
-static void free_file_list (struct file_list * list)
-{
- struct file_list *tmp;
-
- while (list)
- {
- tmp = list;
- DLIST_REMOVE(list, list);
- if (tmp->file_path) free(tmp->file_path);
- free(tmp);
- }
-}
/****************************************************************************
seek in a directory/file list until you get something that doesn't start with
the specified name
****************************************************************************/
-static BOOL seek_list(struct file_list *list, char *name)
+static BOOL seek_list(FILE *f,char *name)
{
- while (list) {
- trim_string(list->file_path,"./","\n");
- if (strncmp(list->file_path, name, strlen(name)) != 0) {
+ pstring s;
+ while (!feof(f)) {
+ if (!fgets(s,sizeof(s),f)) return(False);
+ trim_string(s,"./","\n");
+ if (strncmp(s,name,strlen(name)) != 0) {
+ pstrcpy(name,s);
return(True);
}
- list = list->next;
}
return(False);
}
+
/****************************************************************************
set the file selection mask
****************************************************************************/
@@ -1170,146 +1147,90 @@ static void cmd_select(void)
next_token(NULL,fileselection,NULL,sizeof(fileselection));
}
-/****************************************************************************
- Recursive file matching function act as find
- match must be always set to True when calling this function
-****************************************************************************/
-static int file_find(struct file_list **list, const char *directory,
- const char *expression, BOOL match)
-{
- DIR *dir;
- struct file_list *entry;
- struct stat statbuf;
- int ret;
- char *path;
- BOOL isdir;
- char *dname;
-
- dir = opendir(directory);
- if (!dir) return -1;
-
- while ((dname = readdirname(dir))) {
- if (!strcmp("..", dname)) continue;
- if (!strcmp(".", dname)) continue;
-
- if (asprintf(&path, "%s/%s", directory, dname) <= 0) {
- continue;
- }
-
- isdir = False;
- if (!match || !ms_fnmatch(expression, dname)) {
- if (recurse) {
- ret = stat(path, &statbuf);
- if (ret == 0) {
- if (S_ISDIR(statbuf.st_mode)) {
- isdir = True;
- ret = file_find(list, path, expression, False);
- }
- } else {
- DEBUG(0,("file_find: cannot stat file %s\n", path));
- }
-
- if (ret == -1) {
- free(path);
- closedir(dir);
- return -1;
- }
- }
- entry = (struct file_list *) malloc(sizeof (struct file_list));
- if (!entry) {
- DEBUG(0,("Out of memory in file_find\n"));
- closedir(dir);
- return -1;
- }
- entry->file_path = path;
- entry->isdir = isdir;
- DLIST_ADD(*list, entry);
- } else {
- free(path);
- }
- }
-
- closedir(dir);
- return 0;
-}
/****************************************************************************
mput some files
****************************************************************************/
static void cmd_mput(void)
{
+ pstring lname;
+ pstring rname;
fstring buf;
char *p=buf;
while (next_token(NULL,p,NULL,sizeof(buf))) {
- int ret;
- struct file_list *temp_list;
- char *quest, *lname, *rname;
-
- file_list = NULL;
+ SMB_STRUCT_STAT st;
+ pstring cmd;
+ pstring tmpname;
+ FILE *f;
+ int fd;
- ret = file_find(&file_list, ".", p, True);
- if (ret) {
- free_file_list(file_list);
+ slprintf(tmpname,sizeof(tmpname)-1, "%s/ls.smb.XXXXXX",
+ tmpdir());
+ fd = smb_mkstemp(tmpname);
+
+ if (fd == -1) {
+ DEBUG(0,("Failed to create temporary file %s\n", tmpname));
continue;
}
+
+ if (recurse)
+ slprintf(cmd,sizeof(pstring)-1,
+ "find . -name \"%s\" -print > %s",p,tmpname);
+ else
+ slprintf(cmd,sizeof(pstring)-1,
+ "find . -maxdepth 1 -name \"%s\" -print > %s",p,tmpname);
+ system(cmd);
+ close(fd);
+
+ f = sys_fopen(tmpname,"r");
+ if (!f) continue;
- quest = NULL;
- lname = NULL;
- rname = NULL;
-
- for (temp_list = file_list; temp_list;
- temp_list = temp_list->next) {
+ while (!feof(f)) {
+ pstring quest;
- if (lname) free(lname);
- if (asprintf(&lname, "%s/", temp_list->file_path) <= 0)
- continue;
- trim_string(lname, "./", "/");
+ if (!fgets(lname,sizeof(lname),f)) break;
+ trim_string(lname,"./","\n");
+
+ again1:
/* check if it's a directory */
- if (temp_list->isdir) {
- /* if (!recurse) continue; */
-
- if (quest) free(quest);
- asprintf(&quest, "Put directory %s? ", lname);
- if (prompt && !yesno(quest)) { /* No */
- /* Skip the directory */
- lname[strlen(lname)-1] = '/';
- if (!seek_list(temp_list, lname))
- break;
- } else { /* Yes */
- if (rname) free(rname);
- asprintf(&rname, "%s%s", cur_dir, lname);
- dos_format(rname);
- if (!cli_chkpath(cli, rname) &&
- !do_mkdir(rname)) {
- DEBUG (0, ("Unable to make dir, skipping..."));
- /* Skip the directory */
- lname[strlen(lname)-1] = '/';
- if (!seek_list(temp_list, lname))
- break;
- }
+ if (directory_exist(lname,&st)) {
+ if (!recurse) continue;
+ slprintf(quest,sizeof(pstring)-1,
+ "Put directory %s? ",lname);
+ if (prompt && !yesno(quest)) {
+ pstrcat(lname,"/");
+ if (!seek_list(f,lname))
+ break;
+ goto again1;
+ }
+
+ pstrcpy(rname,cur_dir);
+ pstrcat(rname,lname);
+ dos_format(rname);
+ if (!cli_chkpath(cli, rname) && !do_mkdir(rname)) {
+ pstrcat(lname,"/");
+ if (!seek_list(f,lname))
+ break;
+ goto again1;
}
continue;
} else {
- if (quest) free(quest);
- asprintf(&quest,"Put file %s? ", lname);
- if (prompt && !yesno(quest)) /* No */
- continue;
+ slprintf(quest,sizeof(quest)-1,
+ "Put file %s? ",lname);
+ if (prompt && !yesno(quest)) continue;
- /* Yes */
- if (rname) free(rname);
- asprintf(&rname, "%s%s", cur_dir, lname);
+ pstrcpy(rname,cur_dir);
+ pstrcat(rname,lname);
}
dos_format(rname);
- do_put(rname, lname);
+ do_put(rname,lname);
}
- free_file_list(file_list);
- if (quest) free(quest);
- if (lname) free(lname);
- if (rname) free(rname);
+ fclose(f);
+ unlink(tmpname);
}
}
@@ -1627,8 +1548,7 @@ static void cmd_lcd(void)
/****************************************************************************
list a share name
****************************************************************************/
-static void browse_fn(const char *name, uint32 m,
- const char *comment, void *state)
+static void browse_fn(const char *name, uint32 m, const char *comment)
{
fstring typestr;
@@ -1661,7 +1581,7 @@ static BOOL browse_host(BOOL sort)
printf("\n\tSharename Type Comment\n");
printf("\t--------- ---- -------\n");
- if((ret = cli_RNetShareEnum(cli, browse_fn, NULL)) == -1)
+ if((ret = cli_RNetShareEnum(cli, browse_fn)) == -1)
printf("Error returning browse list: %s\n", cli_errstr(cli));
return (ret != -1);
@@ -1670,8 +1590,7 @@ static BOOL browse_host(BOOL sort)
/****************************************************************************
list a server name
****************************************************************************/
-static void server_fn(const char *name, uint32 m,
- const char *comment, void *state)
+static void server_fn(const char *name, uint32 m, const char *comment)
{
printf("\t%-16.16s %s\n", name, comment);
}
@@ -1686,12 +1605,12 @@ static BOOL list_servers(char *wk_grp)
printf("\n\tServer Comment\n");
printf("\t--------- -------\n");
- cli_NetServerEnum(cli, cli->server_domain, SV_TYPE_ALL, server_fn, NULL);
+ cli_NetServerEnum(cli, cli->server_domain, SV_TYPE_ALL, server_fn);
printf("\n\tWorkgroup Master\n");
printf("\t--------- -------\n");
- cli_NetServerEnum(cli, cli->server_domain, SV_TYPE_DOMAIN_ENUM, server_fn, NULL);
+ cli_NetServerEnum(cli, cli->server_domain, SV_TYPE_DOMAIN_ENUM, server_fn);
return True;
}
@@ -1927,13 +1846,13 @@ static void process_stdin(void)
while (1) {
fstring tok;
- fstring the_prompt;
+ fstring prompt;
char *line;
int i;
/* display a prompt */
- slprintf(the_prompt, sizeof(the_prompt)-1, "smb: %s> ", cur_dir);
- line = smb_readline(the_prompt, readline_callback, completion_fn);
+ slprintf(prompt, sizeof(prompt)-1, "smb: %s> ", cur_dir);
+ line = smb_readline(prompt, readline_callback, completion_fn);
if (!line) break;
diff --git a/source/client/smbspool.c b/source/client/smbspool.c
index f4423f3efa7..b0077b73bae 100644
--- a/source/client/smbspool.c
+++ b/source/client/smbspool.c
@@ -279,7 +279,7 @@ smb_connect(char *workgroup, /* I - Workgroup */
if ((c = cli_initialise(NULL)) == NULL)
{
- fputs("ERROR: cli_initialise() failed...\n", stderr);
+ fputs("ERROR: cli_initialize() failed...\n", stderr);
return (NULL);
}
@@ -358,7 +358,7 @@ smb_print(struct cli_state *cli, /* I - SMB connection */
*/
for (ptr = title; *ptr; ptr ++)
- if (!isalnum((int)*ptr) && !isspace((int)*ptr))
+ if (!isalnum(*ptr) && !isspace(*ptr))
*ptr = '_';
/*
diff --git a/source/codepages/CPISO8859-15.TXT b/source/codepages/CPISO8859-15.TXT
index dc23eafeb01..ec643bb3b12 100644
--- a/source/codepages/CPISO8859-15.TXT
+++ b/source/codepages/CPISO8859-15.TXT
@@ -1,9 +1,9 @@
#
# Name: ISO 8859-15 to Unicode
# Unicode version: 1.1
-# Table version: 0.2
+# Table version: 0.1
# Table format: Format A
-# Date: 01 may 2001
+# Date: 08 January 2001
# Authors: Toomas Soome <tsoome@ut.ee>
#
# Copyright (c) 1991-1995 Unicode, Inc. All Rights reserved.
@@ -25,14 +25,14 @@
# General notes:
#
# This table contains the data the Unicode Consortium has on how
-# ISO 8859-15 characters map into Unicode.
+# ISO 8859-13 characters map into Unicode.
#
# Format: Three tab-separated columns
-# Column #1 is the ISO 8859-15 code (in hex as 0xXX)
+# Column #1 is the ISO 8859-13 code (in hex as 0xXX)
# Column #2 is the Unicode (in hex as 0xXXXX)
# Column #3 the Unicode name (follows a comment sign, '#')
#
-# The entries are in ISO 8859-15 order
+# The entries are in ISO 8859-13 order
#
# Any comments or problems, contact <tsoome@ut.ee>
#
@@ -132,98 +132,98 @@
0x7D 0x007D # RIGHT CURLY BRACKET
0x7E 0x007E # TILDE
0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x00A1 # INVERTED EXCLAMATION MARK
+0xA1 0x201D # RIGHT DOUBLE QUOTATION MARK
0xA2 0x00A2 # CENT SIGN
0xA3 0x00A3 # POUND SIGN
-0xA4 0x20AC # EURO SIGN
-0xA5 0x00A5 # YEN SIGN
-0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON
+0xA4 0x00A4 # CURRENCY SIGN
+0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK
+0xA6 0x00A6 # BROKEN BAR
0xA7 0x00A7 # SECTION SIGN
-0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON
+0xA8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
0xA9 0x00A9 # COPYRIGHT SIGN
-0xAA 0x00AA # FEMININE ORDINAL INDICATOR
+0xAA 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAC 0x00AC # NOT SIGN
0xAD 0x00AD # SOFT HYPHEN
0xAE 0x00AE # REGISTERED SIGN
-0xAF 0x00AF # MACRON
+0xAF 0x00C6 # LATIN CAPITAL LETTER AE
0xB0 0x00B0 # DEGREE SIGN
0xB1 0x00B1 # PLUS-MINUS SIGN
0xB2 0x00B2 # SUPERSCRIPT TWO
0xB3 0x00B3 # SUPERSCRIPT THREE
-0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON
+0xB4 0x201C # LEFT DOUBLE QUOTATION MARK
0xB5 0x00B5 # MICRO SIGN
0xB6 0x00B6 # PILCROW SIGN
0xB7 0x00B7 # MIDDLE DOT
-0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON
+0xB8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
0xB9 0x00B9 # SUPERSCRIPT ONE
-0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
+0xBA 0x0157 # LATIN SMALL LETTER R WITH CEDILLA
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x0152 # LATIN CAPITAL LIGATURE OE
-0xBD 0x0153 # LATIN SMALL LIGATURE OE
-0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
-0xBF 0x00BF # INVERTED QUESTION MARK
-0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
+0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
+0xBD 0x00BD # VULGAR FRACTION ONE HALF
+0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
+0xBF 0x00E6 # LATIN SMALL LETTER AE
+0xC0 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
+0xC1 0x012E # LATIN CAPITAL LETTER I WITH OGONEK
+0xC2 0x0100 # LATIN CAPITAL LETTER A WITH MACRON
+0xC3 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x00C6 # LATIN CAPITAL LETTER AE
-0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
+0xC6 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
+0xC7 0x0112 # LATIN CAPITAL LETTER E WITH MACRON
+0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
-0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
-0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
-0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
+0xCA 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
+0xCB 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
+0xCC 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA
+0xCD 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA
+0xCE 0x012A # LATIN CAPITAL LETTER I WITH MACRON
+0xCF 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA
+0xD0 0x0160 # LATIN CAPITAL LETTER S WITH CARON
+0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
+0xD2 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD4 0x014C # LATIN CAPITAL LETTER O WITH MACRON
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
0xD7 0x00D7 # MULTIPLICATION SIGN
-0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
-0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xD8 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK
+0xD9 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
+0xDA 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
+0xDB 0x016A # LATIN CAPITAL LETTER U WITH MACRON
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic)
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German)
-0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
+0xDD 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0xDE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
+0xDF 0x00DF # LATIN SMALL LETTER SHARP S
+0xE0 0x0105 # LATIN SMALL LETTER A WITH OGONEK
+0xE1 0x012F # LATIN SMALL LETTER I WITH OGONEK
+0xE2 0x0101 # LATIN SMALL LETTER A WITH MACRON
+0xE3 0x0107 # LATIN SMALL LETTER C WITH ACUTE
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x00E6 # LATIN SMALL LETTER AE
-0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
+0xE6 0x0119 # LATIN SMALL LETTER E WITH OGONEK
+0xE7 0x0113 # LATIN SMALL LETTER E WITH MACRON
+0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
-0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic)
-0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
-0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
+0xEA 0x017A # LATIN SMALL LETTER Z WITH ACUTE
+0xEB 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE
+0xEC 0x0123 # LATIN SMALL LETTER G WITH CEDILLA
+0xED 0x0137 # LATIN SMALL LETTER K WITH CEDILLA
+0xEE 0x012B # LATIN SMALL LETTER I WITH MACRON
+0xEF 0x013C # LATIN SMALL LETTER L WITH CEDILLA
+0xF0 0x0161 # LATIN SMALL LETTER S WITH CARON
+0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE
+0xF2 0x0146 # LATIN SMALL LETTER N WITH CEDILLA
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF4 0x014D # LATIN SMALL LETTER O WITH MACRON
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
0xF7 0x00F7 # DIVISION SIGN
-0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
-0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xF8 0x0173 # LATIN SMALL LETTER U WITH OGONEK
+0xF9 0x0142 # LATIN SMALL LETTER L WITH STROKE
+0xFA 0x015B # LATIN SMALL LETTER S WITH ACUTE
+0xFB 0x016B # LATIN SMALL LETTER U WITH MACRON
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
-0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic)
-0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
+0xFD 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
+0xFE 0x017E # LATIN SMALL LETTER Z WITH CARON
+0xFF 0x2019 # RIGHT SINGLE QUOTATION MARK
diff --git a/source/config.guess b/source/config.guess
index ba661651615..adea47180fc 100755
--- a/source/config.guess
+++ b/source/config.guess
@@ -1,10 +1,7 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-
-timestamp='2001-04-20'
-
+# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
+#
# This file 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 2 of the License, or
@@ -25,92 +22,18 @@ timestamp='2001-04-20'
# the same distribution terms that you use for the rest of that program.
# Written by Per Bothner <bothner@cygnus.com>.
-# Please send patches to <config-patches@gnu.org>.
+# The master version of this file is at the FSF in /home/gd/gnu/lib.
#
# This script attempts to guess a canonical system name similar to
# config.sub. If it succeeds, it prints the system name on stdout, and
# exits with 0. Otherwise, it exits with 1.
#
# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99, 2000
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help" >&2
- exit 1 ;;
- * )
- break ;;
- esac
-done
-
-if test $# != 0; then
- echo "$me: too many arguments$help" >&2
- exit 1
-fi
-
-
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script.
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int dummy(){}" > $dummy.c
- for c in cc gcc c89 ; do
- ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1
- if test $? = 0 ; then
- CC_FOR_BUILD="$c"; break
- fi
- done
- rm -f $dummy.c $dummy.o $dummy.rel
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac
+# don't specify an explicit system type (host/target name).
+#
+# Only a few systems have been added to this list; please add others
+# (but try to keep the structure clean).
+#
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 8/24/94.)
@@ -120,180 +43,51 @@ fi
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
+
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- *:NetBSD:*:*)
- # Netbsd (nbsd) targets should (where applicable) match one or
- # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
- # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
- # switched to ELF, *-*-netbsd* would select the old
- # object file format. This provides both forward
- # compatibility and a consistent mechanism for selecting the
- # object file format.
- # Determine the machine/vendor (is the vendor relevant).
- case "${UNAME_MACHINE}" in
- amiga) machine=m68k-unknown ;;
- arm32) machine=arm-unknown ;;
- atari*) machine=m68k-atari ;;
- sun3*) machine=m68k-sun ;;
- mac68k) machine=m68k-apple ;;
- macppc) machine=powerpc-apple ;;
- hp3[0-9][05]) machine=m68k-hp ;;
- ibmrt|romp-ibm) machine=romp-ibm ;;
- *) machine=${UNAME_MACHINE}-unknown ;;
- esac
- # The Operating System including object format, if it has switched
- # to ELF recently, or will in the future.
- case "${UNAME_MACHINE}" in
- i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
- ;;
- *)
- os=netbsd
- ;;
- esac
- # The OS release
- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- # contains redundant information, the shorter form:
- # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "${machine}-${os}${release}"
- exit 0 ;;
+ news*:NEWS-OS:6.*:*)
+ echo mips-sony-newsos6
+ exit 0 ;;
alpha:OSF1:*:*)
- if test $UNAME_RELEASE = "V4.0"; then
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- fi
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
- cat <<EOF >$dummy.s
- .data
-\$Lformat:
- .byte 37,100,45,37,120,10,0 # "%d-%x\n"
-
- .text
- .globl main
- .align 4
- .ent main
-main:
- .frame \$30,16,\$26,0
- ldgp \$29,0(\$27)
- .prologue 1
- .long 0x47e03d80 # implver \$0
- lda \$2,-1
- .long 0x47e20c21 # amask \$2,\$1
- lda \$16,\$Lformat
- mov \$0,\$17
- not \$1,\$18
- jsr \$26,printf
- ldgp \$29,0(\$26)
- mov 0,\$16
- jsr \$26,exit
- .end main
-EOF
- $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- case `./$dummy` in
- 0-0)
- UNAME_MACHINE="alpha"
- ;;
- 1-0)
- UNAME_MACHINE="alphaev5"
- ;;
- 1-1)
- UNAME_MACHINE="alphaev56"
- ;;
- 1-101)
- UNAME_MACHINE="alphapca56"
- ;;
- 2-303)
- UNAME_MACHINE="alphaev6"
- ;;
- 2-307)
- UNAME_MACHINE="alphaev67"
- ;;
- esac
- fi
- rm -f $dummy.s $dummy
- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit 0 ;;
- Alpha\ *:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # Should we change UNAME_MACHINE based on the output of uname instead
- # of the specific Alpha model?
- echo alpha-pc-interix
+ echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
exit 0 ;;
Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
+ echo m68k-cbm-sysv4
exit 0;;
+ amiga:NetBSD:*:*)
+ echo m68k-cbm-netbsd${UNAME_RELEASE}
+ exit 0 ;;
amiga:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:[Aa]miga[Oo][Ss]:*:*)
- echo ${UNAME_MACHINE}-unknown-amigaos
- exit 0 ;;
- arc64:OpenBSD:*:*)
- echo mips64el-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- arc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- hkmips:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- pmax:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- sgi:OpenBSD:*:*)
- echo mips-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- wgrisc:OpenBSD:*:*)
- echo mipsel-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- *:OS/390:*:*)
- echo i370-ibm-openedition
- exit 0 ;;
+ echo m68k-cbm-openbsd${UNAME_RELEASE}
+ exit 0 ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
exit 0;;
- SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit 0;;
- Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
- # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ Pyramid*:OSx*:*:*)
if test "`(/bin/universe) 2>/dev/null`" = att ; then
echo pyramid-pyramid-sysv3
else
echo pyramid-pyramid-bsd
fi
exit 0 ;;
- NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit 0 ;;
- sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ sun4*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ echo i386-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
@@ -313,67 +107,26 @@ EOF
sun3*:SunOS:*:*)
echo m68k-sun-sunos${UNAME_RELEASE}
exit 0 ;;
- sun*:*:4.2BSD:*)
- UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
- case "`/bin/arch`" in
- sun3)
- echo m68k-sun-sunos${UNAME_RELEASE}
- ;;
- sun4)
- echo sparc-sun-sunos${UNAME_RELEASE}
- ;;
- esac
- exit 0 ;;
- aushp:SunOS:*:*)
- echo sparc-auspex-sunos${UNAME_RELEASE}
+ atari*:NetBSD:*:*)
+ echo m68k-atari-netbsd${UNAME_RELEASE}
exit 0 ;;
atari*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- # The situation for MiNT is a little confusing. The machine name
- # can be virtually everything (everything which is not
- # "atarist" or "atariste" at least should have a processor
- # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
- # to the lowercase version "mint" (or "freemint"). Finally
- # the system name "TOS" denotes a system which is actually not
- # MiNT. But MiNT is downward compatible to TOS, so this should
- # be no problem.
- atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
- exit 0 ;;
- *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
+ echo m68k-atari-openbsd${UNAME_RELEASE}
exit 0 ;;
- milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit 0 ;;
- hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit 0 ;;
- *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit 0 ;;
- sun3*:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
+ sun3*:NetBSD:*:*)
+ echo m68k-sun-netbsd${UNAME_RELEASE}
exit 0 ;;
- mvme68k:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
+ sun3*:OpenBSD:*:*)
+ echo m68k-sun-openbsd${UNAME_RELEASE}
exit 0 ;;
- mvme88k:OpenBSD:*:*)
- echo m88k-unknown-openbsd${UNAME_RELEASE}
+ mac68k:NetBSD:*:*)
+ echo m68k-apple-netbsd${UNAME_RELEASE}
exit 0 ;;
- powerpc:machten:*:*)
- echo powerpc-apple-machten${UNAME_RELEASE}
+ mac68k:OpenBSD:*:*)
+ echo m68k-apple-openbsd${UNAME_RELEASE}
exit 0 ;;
- RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
+ Power*:Darwin:*:*)
+ echo powerpc-apple-darwin${UNAME_RELEASE}
exit 0 ;;
RISC*:ULTRIX:*:*)
echo mips-dec-ultrix${UNAME_RELEASE}
@@ -381,40 +134,12 @@ EOF
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
exit 0 ;;
- 2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix${UNAME_RELEASE}
+ mips:*:4*:UMIPS)
+ echo mips-mips-riscos4sysv
exit 0 ;;
- mips:*:*:UMIPS | mips:*:*:RISCos)
- sed 's/^ //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
- #if defined (host_mips) && defined (MIPSEB)
- #if defined (SYSTYPE_SYSV)
- printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_SVR4)
- printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
- #endif
- #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
- printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
- #endif
- #endif
- exit (-1);
- }
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy \
- && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
+ mips:*:5*:RISCos)
echo mips-mips-riscos${UNAME_RELEASE}
exit 0 ;;
- Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit 0 ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
exit 0 ;;
@@ -430,18 +155,15 @@ EOF
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
- then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
- [ ${TARGET_BINARY_INTERFACE}x = x ]
- then
+ if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
+ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
else
- echo i586-dg-dgux${UNAME_RELEASE}
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
fi
+ else echo i586-dg-dgux${UNAME_RELEASE}
+ fi
exit 0 ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
@@ -459,23 +181,15 @@ EOF
*:IRIX*:*:*)
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i*86:AIX:*:*)
+ i[34]86:AIX:*:*)
echo i386-ibm-aix
exit 0 ;;
- ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- fi
- echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
- exit 0 ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- sed 's/^ //' << EOF >$dummy.c
+ sed 's/^ //' << EOF >dummy.c
#include <sys/systemcfg.h>
main()
@@ -486,8 +200,8 @@ EOF
exit(0);
}
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
+ ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
echo rs6000-ibm-aix3.2.5
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
echo rs6000-ibm-aix3.2.4
@@ -495,9 +209,8 @@ EOF
echo rs6000-ibm-aix3.2
fi
exit 0 ;;
- *:AIX:*:[45])
- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
- if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ *:AIX:*:4)
+ if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
@@ -505,7 +218,7 @@ EOF
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
else
- IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ IBM_REV=4.${UNAME_RELEASE}
fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
exit 0 ;;
@@ -515,8 +228,8 @@ EOF
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
echo romp-ibm-bsd4.4
exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
exit 0 ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
echo rs6000-bull-bosx
@@ -530,75 +243,18 @@ EOF
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
echo m68k-hp-bsd4.4
exit 0 ;;
- 9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ 9000/[3478]??:HP-UX:*:*)
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/[678][0-9][0-9])
- case "${HPUX_REV}" in
- 11.[0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
- sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
- esac ;;
- esac
- fi ;;
- esac
- if [ "${HP_ARCH}" = "" ]; then
- sed 's/^ //' << EOF >$dummy.c
-
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
-
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
-
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
-EOF
- (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
- if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
- rm -f $dummy.c $dummy
- fi ;;
+ 9000/7?? | 9000/8?[679] ) HP_ARCH=hppa1.1 ;;
+ 9000/8?? ) HP_ARCH=hppa1.0 ;;
esac
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- ia64:HP-UX:*:*)
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux${HPUX_REV}
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
exit 0 ;;
3050*:HI-UX:*:*)
- sed 's/^ //' << EOF >$dummy.c
+ sed 's/^ //' << EOF >dummy.c
#include <unistd.h>
int
main ()
@@ -623,8 +279,8 @@ EOF
exit (0);
}
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
+ ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
echo unknown-hitachi-hiuxwe2
exit 0 ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
@@ -633,28 +289,15 @@ EOF
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
exit 0 ;;
- *9??*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit 0 ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
echo hppa1.1-hp-osf
exit 0 ;;
hp8??:OSF1:*:*)
echo hppa1.0-hp-osf
exit 0 ;;
- i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo ${UNAME_MACHINE}-unknown-osf1mk
- else
- echo ${UNAME_MACHINE}-unknown-osf1
- fi
- exit 0 ;;
parisc*:Lites*:*:*)
echo hppa1.1-hp-lites
exit 0 ;;
- hppa*:OpenBSD:*:*)
- echo hppa-unknown-openbsd
- exit 0 ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
exit 0 ;;
@@ -673,337 +316,126 @@ EOF
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo t3e-cray-unicos_mk
+ exit 0 ;;
CRAY*X-MP:*:*:*)
echo xmp-cray-unicos
exit 0 ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE}
exit 0 ;;
- CRAY*[A-Z]90:*:*:*)
- echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
- | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+ CRAY*C90:*:*:*)
+ echo c90-cray-unicos${UNAME_RELEASE}
exit 0 ;;
CRAY*TS:*:*:*)
- echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3D:*:*:*)
- echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- exit 0 ;;
- CRAY*SV1:*:*:*)
- echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ echo t90-cray-unicos${UNAME_RELEASE}
exit 0 ;;
CRAY-2:*:*:*)
echo cray2-cray-unicos
exit 0 ;;
- F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit 0 ;;
- hp300:OpenBSD:*:*)
- echo m68k-unknown-openbsd${UNAME_RELEASE}
- exit 0 ;;
- i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ hp3[0-9][05]:NetBSD:*:*)
+ echo m68k-hp-netbsd${UNAME_RELEASE}
exit 0 ;;
- sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi${UNAME_RELEASE}
+ hp3[0-9][05]:OpenBSD:*:*)
+ echo m68k-hp-openbsd${UNAME_RELEASE}
exit 0 ;;
- *:BSD/OS:*:*)
+ i[34]86:BSD/386:*:* | *:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
*:FreeBSD:*:*)
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
exit 0 ;;
+ *:NetBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
*:OpenBSD:*:*)
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
+ *:QNX:*:4*)
+ echo i386-qnx-qnx4
+ exit 0 ;;
i*:CYGWIN*:*)
- echo ${UNAME_MACHINE}-pc-cygwin
- exit 0 ;;
- i*:MINGW*:*)
- echo ${UNAME_MACHINE}-pc-mingw32
- exit 0 ;;
- i*:PW*:*)
- echo ${UNAME_MACHINE}-pc-pw32
- exit 0 ;;
- i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
- # How do we know it's Interix rather than the generic POSIX subsystem?
- # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
- # UNAME_MACHINE based on the output of uname instead of i386?
- echo i386-pc-interix
- exit 0 ;;
- i*:UWIN*:*)
- echo ${UNAME_MACHINE}-pc-uwin
+ echo i386-unknown-cygwin32
exit 0 ;;
p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin
+ echo powerpcle-unknown-cygwin32
exit 0 ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
*:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
- i*86:Minix:*:*)
- echo ${UNAME_MACHINE}-pc-minix
- exit 0 ;;
- arm*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- ia64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux
- exit 0 ;;
- m68*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- mips:Linux:*:*)
- cat >$dummy.c <<EOF
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
-int main (int argc, char *argv[]) {
-#else
-int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __MIPSEB__
- printf ("%s-unknown-linux-gnu\n", argv[1]);
-#endif
-#ifdef __MIPSEL__
- printf ("%sel-unknown-linux-gnu\n", argv[1]);
-#endif
- return 0;
-}
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- ;;
- ppc:Linux:*:*)
- # Determine Lib Version
- cat >$dummy.c <<EOF
-#include <features.h>
-#if defined(__GLIBC__)
-extern char __libc_version[];
-extern char __libc_release[];
-#endif
+ *:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us.
+ ld_help_string=`ld --help 2>&1`
+ if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
+ echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
+ echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
+ echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
+ echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
+ echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
+ elif test "${UNAME_MACHINE}" = "alpha" ; then
+ echo alpha-unknown-linux ; exit 0
+ else
+ # Either a pre-BFD a.out linker (linuxoldld) or one that does not give us
+ # useful --help. Gcc wants to distinguish between linuxoldld and linuxaout.
+ test ! -d /usr/lib/ldscripts/. \
+ && echo "${UNAME_MACHINE}-unknown-linuxoldld" && exit 0
+ # Determine whether the default compiler is a.out or elf
+ cat >dummy.c <<EOF
main(argc, argv)
- int argc;
- char *argv[];
+int argc;
+char *argv[];
{
-#if defined(__GLIBC__)
- printf("%s %s\n", __libc_version, __libc_release);
-#else
- printf("unknown\n");
-#endif
- return 0;
-}
-EOF
- LIBC=""
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- ./$dummy | grep 1\.99 > /dev/null
- if test "$?" = 0 ; then LIBC="libc1" ; fi
- fi
- rm -f $dummy.c $dummy
- echo powerpc-unknown-linux-gnu${LIBC}
- exit 0 ;;
- alpha:Linux:*:*)
- cat <<EOF >$dummy.s
- .data
- \$Lformat:
- .byte 37,100,45,37,120,10,0 # "%d-%x\n"
- .text
- .globl main
- .align 4
- .ent main
- main:
- .frame \$30,16,\$26,0
- ldgp \$29,0(\$27)
- .prologue 1
- .long 0x47e03d80 # implver \$0
- lda \$2,-1
- .long 0x47e20c21 # amask \$2,\$1
- lda \$16,\$Lformat
- mov \$0,\$17
- not \$1,\$18
- jsr \$26,printf
- ldgp \$29,0(\$26)
- mov 0,\$16
- jsr \$26,exit
- .end main
-EOF
- LIBC=""
- $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- case `./$dummy` in
- 0-0) UNAME_MACHINE="alpha" ;;
- 1-0) UNAME_MACHINE="alphaev5" ;;
- 1-1) UNAME_MACHINE="alphaev56" ;;
- 1-101) UNAME_MACHINE="alphapca56" ;;
- 2-303) UNAME_MACHINE="alphaev6" ;;
- 2-307) UNAME_MACHINE="alphaev67" ;;
- esac
- objdump --private-headers $dummy | \
- grep ld.so.1 > /dev/null
- if test "$?" = 0 ; then
- LIBC="libc1"
- fi
- fi
- rm -f $dummy.s $dummy
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
- exit 0 ;;
- parisc:Linux:*:* | hppa:Linux:*:*)
- # Look for CPU level
- case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-gnu ;;
- PA8*) echo hppa2.0-unknown-linux-gnu ;;
- *) echo hppa-unknown-linux-gnu ;;
- esac
- exit 0 ;;
- parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-gnu
- exit 0 ;;
- s390:Linux:*:* | s390x:Linux:*:*)
- echo ${UNAME_MACHINE}-ibm-linux
- exit 0 ;;
- sh*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- sparc:Linux:*:* | sparc64:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
- exit 0 ;;
- x86_64:Linux:*:*)
- echo x86_64-unknown-linux-gnu
- exit 0 ;;
- i*86:Linux:*:*)
- # The BFD linker knows what the default object file format is, so
- # first see if it will tell us. cd to the root directory to prevent
- # problems with other programs or directories called `ld' in the path.
- ld_supported_emulations=`cd /; ld --help 2>&1 \
- | sed -ne '/supported emulations:/!d
- s/[ ][ ]*/ /g
- s/.*supported emulations: *//
- s/ .*//
- p'`
- case "$ld_supported_emulations" in
- i*86linux)
- echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0
- ;;
- elf_i*86)
- TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
- ;;
- i*86coff)
- echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0
- ;;
- esac
- # Either a pre-BFD a.out linker (linux-gnuoldld)
- # or one that does not give us useful --help.
- # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
- # If ld does not provide *any* "supported emulations:"
- # that means it is gnuoldld.
- test -z "$ld_supported_emulations" && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
- case "${UNAME_MACHINE}" in
- i*86)
- VENDOR=pc;
- ;;
- *)
- VENDOR=unknown;
- ;;
- esac
- # Determine whether the default compiler is a.out or elf
- cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
#ifdef __ELF__
-# ifdef __GLIBC__
-# if __GLIBC__ >= 2
- printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
-# else
- printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-# endif
-# else
- printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-# endif
+ printf ("%s-unknown-linux\n", argv[1]);
#else
- printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
+ printf ("%s-unknown-linuxaout\n", argv[1]);
#endif
return 0;
}
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
- ;;
+ ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
+ fi ;;
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
# are messed up and put the nodename in both sysname and nodename.
- i*86:DYNIX/ptx:4*:*)
+ i[34]86:DYNIX/ptx:4*:*)
echo i386-sequent-sysv4
exit 0 ;;
- i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
- # I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
- echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
- exit 0 ;;
- i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
- UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*)
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}
fi
exit 0 ;;
- i*86:*:5:7*)
- # Fixed at (any) Pentium or better
- UNAME_MACHINE=i586
- if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
- echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- i*86:*:3.2:*)
+ i[34]86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ echo ${UNAME_MACHINE}-unknown-isc$UNAME_REL
elif /bin/uname -X 2>/dev/null >/dev/null ; then
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
- (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
- && UNAME_MACHINE=i686
- (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
- && UNAME_MACHINE=i686
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL
else
- echo ${UNAME_MACHINE}-pc-sysv32
+ echo ${UNAME_MACHINE}-unknown-sysv32
fi
exit 0 ;;
- i*86:*DOS:*:*)
- echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ *:UnixWare:*:* | *:OpenUNIX:*:*)
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}
exit 0 ;;
- pc:*:*:*)
- # Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i386.
- echo i386-pc-msdosdjgpp
- exit 0 ;;
Intel:Mach:3*:*)
- echo i386-pc-mach3
+ echo i386-unknown-mach3
exit 0 ;;
paragon:*:*:*)
echo i860-intel-osf1
@@ -1019,42 +451,30 @@ EOF
# "miniframe"
echo m68010-convergent-sysv
exit 0 ;;
- M68*:*:R3V[567]*:*)
+ M680[234]0:*:R3V[567]*:*)
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
- OS_REL=''
- test -r /etc/.relid \
- && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
- /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
+ uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4.3 && exit 0
+ uname -p 2>/dev/null | grep entium >/dev/null \
+ && echo i586-ncr-sysv4.3 && exit 0 ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos${UNAME_RELEASE}
+ m680[234]0:LynxOS:2.[23]*:*)
+ echo m68k-lynx-lynxos${UNAME_RELEASE}
exit 0 ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
exit 0 ;;
- i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
- echo i386-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos${UNAME_RELEASE}
+ i[34]86:LynxOS:2.[23]*:*)
+ echo i386-lynx-lynxos${UNAME_RELEASE}
exit 0 ;;
- rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ TSUNAMI:LynxOS:2.[23]*:*)
+ echo sparc-lynx-lynxos${UNAME_RELEASE}
exit 0 ;;
- PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
- echo powerpc-unknown-lynxos${UNAME_RELEASE}
- exit 0 ;;
- SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv${UNAME_RELEASE}
- exit 0 ;;
- RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
+ rs6000:LynxOS:2.[23]*:*)
+ echo rs6000-lynx-lynxos${UNAME_RELEASE}
exit 0 ;;
RM*:SINIX-*:*:*)
echo mips-sni-sysv4
@@ -1067,117 +487,25 @@ EOF
echo ns32k-sni-sysv
fi
exit 0 ;;
- PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
- *:UNIX_System_V:4*:FTX*)
- # From Gerald Hewes <hewes@openmarket.com>.
- # How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit 0 ;;
- *:*:*:FTX*)
- # From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
+ *:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
exit 0 ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
exit 0 ;;
- news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit 0 ;;
- R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ R3000:*System_V*:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
echo mips-unknown-sysv${UNAME_RELEASE}
fi
exit 0 ;;
- BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit 0 ;;
- BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit 0 ;;
- BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit 0 ;;
- SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux${UNAME_RELEASE}
- exit 0 ;;
- Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Rhapsody:*:*)
- echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- exit 0 ;;
- *:Darwin:*:*)
- echo `uname -p`-apple-darwin${UNAME_RELEASE}
- exit 0 ;;
- *:procnto*:*:* | *:QNX:[0123456789]*:*)
- if test "${UNAME_MACHINE}" = "x86pc"; then
- UNAME_MACHINE=pc
- fi
- echo `uname -p`-${UNAME_MACHINE}-nto-qnx
- exit 0 ;;
- *:QNX:*:4*)
- echo i386-pc-qnx
- exit 0 ;;
- NSR-[KW]:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk${UNAME_RELEASE}
- exit 0 ;;
- *:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit 0 ;;
- BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit 0 ;;
- DS/*:UNIX_System_V:*:*)
- echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- exit 0 ;;
- *:Plan9:*:*)
- # "uname -m" is not consistent, so use $cputype instead. 386
- # is converted to i386 for consistency with other x86
- # operating systems.
- if test "$cputype" = "386"; then
- UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
- fi
- echo ${UNAME_MACHINE}-unknown-plan9
- exit 0 ;;
- i*86:OS/2:*:*)
- # If we were able to find `uname', then EMX Unix compatibility
- # is probably installed.
- echo ${UNAME_MACHINE}-pc-os2-emx
- exit 0 ;;
- *:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit 0 ;;
- *:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit 0 ;;
- KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit 0 ;;
- XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit 0 ;;
- *:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit 0 ;;
- *:ITS:*:*)
- echo pdp10-unknown-its
- exit 0 ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-cat >$dummy.c <<EOF
+cat >dummy.c <<EOF
#ifdef _SEQUENT_
# include <sys/types.h>
# include <sys/utsname.h>
@@ -1215,10 +543,7 @@ main ()
#endif
int version;
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- if (version < 4)
- printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
- else
- printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3");
exit (0);
#endif
@@ -1235,7 +560,7 @@ main ()
#endif
#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
+ printf ("i386-unknown-bsd\n"); exit (0);
#endif
#if defined (sequent)
@@ -1263,24 +588,11 @@ main ()
#endif
#if defined (vax)
-# if !defined (ultrix)
-# include <sys/param.h>
-# if defined (BSD)
-# if BSD == 43
- printf ("vax-dec-bsd4.3\n"); exit (0);
-# else
-# if BSD == 199006
- printf ("vax-dec-bsd4.3reno\n"); exit (0);
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# endif
-# else
- printf ("vax-dec-bsd\n"); exit (0);
-# endif
-# else
- printf ("vax-dec-ultrix\n"); exit (0);
-# endif
+#if !defined (ultrix)
+ printf ("vax-dec-bsd\n"); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
#endif
#if defined (alliant) && defined (i860)
@@ -1291,8 +603,8 @@ main ()
}
EOF
-$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
-rm -f $dummy.c $dummy
+${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
+rm -f dummy.c dummy
# Apollos put the system type in the environment.
@@ -1324,48 +636,6 @@ then
esac
fi
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
- ftp://ftp.gnu.org/pub/gnu/config/
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo = `(hostinfo) 2>/dev/null`
-/bin/universe = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
+#echo '(Unable to guess system type)' 1>&2
exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/source/config.sub b/source/config.sub
index a06a480adaf..8f8f708aca9 100755
--- a/source/config.sub
+++ b/source/config.sub
@@ -1,13 +1,9 @@
#! /bin/sh
-# Configuration validation subroutine script.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-# Free Software Foundation, Inc.
-
-timestamp='2001-04-20'
-
+# Configuration validation subroutine script, version 1.1.
+# Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
+# can handle that machine. It does not imply ALL GNU software can.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -29,8 +25,6 @@ timestamp='2001-04-20'
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
-# Please send patches to <config-patches@gnu.org>.
-#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1.
@@ -47,87 +41,32 @@ timestamp='2001-04-20'
# The goal of this file is to map all the various variations of a given
# machine specification into a single specification in the form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
- $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
- -h, --help print this help, then exit
- -t, --time-stamp print date of last modification, then exit
- -v, --version print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions. There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
- case $1 in
- --time-stamp | --time* | -t )
- echo "$timestamp" ; exit 0 ;;
- --version | -v )
- echo "$version" ; exit 0 ;;
- --help | --h* | -h )
- echo "$usage"; exit 0 ;;
- -- ) # Stop option processing
- shift; break ;;
- - ) # Use stdin as input.
- break ;;
- -* )
- echo "$me: invalid option $1$help"
- exit 1 ;;
-
- *local*)
- # First pass through any local machine types.
- echo $1
- exit 0;;
-
- * )
- break ;;
- esac
-done
+if [ x$1 = x ]
+then
+ echo Configuration name missing. 1>&2
+ echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
+ echo "or $0 ALIAS" 1>&2
+ echo where ALIAS is a recognized configuration type. 1>&2
+ exit 1
+fi
-case $# in
- 0) echo "$me: missing argument$help" >&2
- exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
- exit 1;;
+# First pass through any local machine types.
+case $1 in
+ *local*)
+ echo $1
+ exit 0
+ ;;
+ *)
+ ;;
esac
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | storm-chaos* | os2-emx*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
+# Separate what the user gave into CPU-COMPANY and OS (if any).
+basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+if [ $basic_machine != $1 ]
+then os=`echo $1 | sed 's/.*-/-/'`
+else os=; fi
### Let's recognize common machines as not being operating systems so
### that things like config.sub decstation-3100 work. We also
@@ -142,56 +81,52 @@ case $os in
-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis)
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp )
os=
basic_machine=$1
;;
- -sim | -cisco | -oki | -wec | -winbond)
+ -sim | -cisco | -oki | -wec | -winbond ) # CYGNUS LOCAL
os=
basic_machine=$1
;;
- -scout)
+ -apple*) # CYGNUS LOCAL
+ os=
+ basic_machine=$1
;;
- -wrs)
- os=-vxworks
+ -scout) # CYGNUS LOCAL
+ ;;
+ -wrs) # CYGNUS LOCAL
+ os=vxworks
basic_machine=$1
;;
-hiux*)
os=-hiuxwe2
;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
-sco4)
os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
;;
-sco3.2.[4-9]*)
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
;;
-sco3.2v[4-9]*)
# Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
;;
-sco*)
os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
;;
-isc)
os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
;;
-clix*)
basic_machine=clipper-intergraph
;;
-isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
;;
-lynx*)
os=-lynxos
@@ -202,90 +137,50 @@ case $os in
-windowsnt*)
os=`echo $os | sed -e 's/windowsnt/winnt/'`
;;
- -psos*)
- os=-psos
- ;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
esac
# Decode aliases for certain CPU-COMPANY combinations.
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
- tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \
- | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \
- | pyramid | mn10200 | mn10300 | tron | a29k \
- | 580 | i960 | h8300 \
- | x86 | ppcbe | mipsbe | mipsle | shbe | shle \
- | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
- | hppa64 \
- | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
- | alphaev6[78] \
- | we32k | ns16k | clipper | i370 | sh | sh[34] \
- | powerpc | powerpcle \
- | 1750a | dsp16xx | pdp10 | pdp11 \
- | mips16 | mips64 | mipsel | mips64el \
- | mips64orion | mips64orionel | mipstx39 | mipstx39el \
- | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
- | mips64vr5000 | miprs64vr5000el | mcore | s390 | s390x \
- | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \
- | v850 | c4x \
- | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \
- | pj | pjl | h8500)
+ tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm | armeb \
+ | armel | pyramid \
+ | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
+ | alpha | we32k | ns16k | clipper | sparclite | i370 | s390 | sh \
+ | powerpc | powerpcle | sparc64 | 1750a | dsp16xx | mips64 | mipsel \
+ | pdp11 | mips64el | mips64orion | mips64orionel \
+ | sparc | sparc8 | supersparc | microsparc | ultrasparc)
basic_machine=$basic_machine-unknown
;;
- m6811 | m68hc11 | m6812 | m68hc12)
- # Motorola 68HC11/12.
+ m88110 | m680[012346]0 | m683?2 | m68360 | z8k | v70 | h8500 | w65) # CYGNUS LOCAL
basic_machine=$basic_machine-unknown
- os=-none
;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | w65)
+ mips64vr4300 | mips64vr4300el) # CYGNUS LOCAL jsmith
+ basic_machine=$basic_machine-unknown
;;
-
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i*86 | x86_64)
- basic_machine=$basic_machine-pc
- ;;
# Object if more than one company name word.
*-*-*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
;;
# Recognize the basic CPU types with company name.
- # FIXME: clean up the formatting here.
- vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
- | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \
- | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \
- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
- | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
- | xmp-* | ymp-* \
- | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \
- | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
- | hppa2.0n-* | hppa64-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
- | alphaev6[78]-* \
- | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
- | clipper-* | orion-* \
- | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
- | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \
- | mips16-* | mips64-* | mipsel-* \
- | mips64el-* | mips64orion-* | mips64orionel-* \
- | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
- | mipstx39-* | mipstx39el-* | mcore-* \
- | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \
- | [cjt]90-* \
- | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
- | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \
- | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*)
+ vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
+ | sparc-* | ns32k-* | fx80-* | arm-* | arme[lb]-* | c[123]* \
+ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
+ | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
+ | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
+ | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
+ | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* \
+ | mips64-* | mipsel-* | mips64el-* | mips64orion-* \
+ | mips64orionel-* | sparc8-* | supersparc-* | microsparc-* | ultrasparc-*)
+ ;;
+ m88110-* | m680[012346]0-* | m683?2-* | m68360-* | z8k-* | h8500-*) # CYGNUS LOCAL
+ ;;
+ mips64vr4300-* | mips64vr4300el-*) # CYGNUS LOCAL jsmith
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
- 386bsd)
+ 386bsd) # CYGNUS LOCAL
basic_machine=i386-unknown
os=-bsd
;;
@@ -295,11 +190,11 @@ case $basic_machine in
3b*)
basic_machine=we32k-att
;;
- a29khif)
+ a29khif) # CYGNUS LOCAL
basic_machine=a29k-amd
os=-udi
;;
- adobe68k)
+ adobe68k) # CYGNUS LOCAL
basic_machine=m68010-adobe
os=-scout
;;
@@ -318,32 +213,40 @@ case $basic_machine in
os=-sysv
;;
amiga | amiga-*)
- basic_machine=m68k-unknown
+ basic_machine=m68k-cbm
;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
+ amigados)
+ basic_machine=m68k-cbm
+ os=-amigados
;;
amigaunix | amix)
- basic_machine=m68k-unknown
+ basic_machine=m68k-cbm
os=-sysv4
;;
apollo68)
basic_machine=m68k-apollo
os=-sysv
;;
- apollo68bsd)
+ apollo68bsd) # CYGNUS LOCAL
basic_machine=m68k-apollo
os=-bsd
;;
- aux)
- basic_machine=m68k-apple
- os=-aux
+ arm | armel | armeb)
+ basic_machine=arm-arm
+ os=-aout
;;
balance)
basic_machine=ns32k-sequent
os=-dynix
;;
+ [ctj]90-cray)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ t3e-cray)
+ basic_machine=t3e-cray
+ os=-unicos_mk
+ ;;
convex-c1)
basic_machine=c1-convex
os=-bsd
@@ -372,16 +275,9 @@ case $basic_machine in
basic_machine=cray2-cray
os=-unicos
;;
- [cjt]90)
- basic_machine=${basic_machine}-cray
- os=-unicos
- ;;
crds | unos)
basic_machine=m68k-crds
;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
da30 | da30-*)
basic_machine=m68k-da30
;;
@@ -415,7 +311,7 @@ case $basic_machine in
encore | umax | mmax)
basic_machine=ns32k-encore
;;
- es1800 | OSE68k | ose68k | ose | OSE)
+ es1800 | OSE68k | ose68k | ose | OSE) # CYGNUS LOCAL
basic_machine=m68k-ericsson
os=-ose
;;
@@ -429,10 +325,6 @@ case $basic_machine in
basic_machine=tron-gmicro
os=-sysv
;;
- go32)
- basic_machine=i386-pc
- os=-go32
- ;;
h3050r* | hiux*)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
@@ -441,11 +333,11 @@ case $basic_machine in
basic_machine=h8300-hitachi
os=-hms
;;
- h8300xray)
+ h8300xray) # CYGNUS LOCAL
basic_machine=h8300-hitachi
os=-xray
;;
- h8500hms)
+ h8500hms) # CYGNUS LOCAL
basic_machine=h8500-hitachi
os=-hms
;;
@@ -464,74 +356,71 @@ case $basic_machine in
basic_machine=m68k-hp
os=-hpux
;;
- hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
+ w89k-*) # CYGNUS LOCAL
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ op50n-*) # CYGNUS LOCAL
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ op60c-*) # CYGNUS LOCAL
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ hppro) # CYGNUS LOCAL
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
hp9k2[0-9][0-9] | hp9k31[0-9])
basic_machine=m68000-hp
;;
hp9k3[2-9][0-9])
basic_machine=m68k-hp
;;
- hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
- ;;
- hp9k78[0-9] | hp78[0-9])
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
- # FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][13679] | hp8[0-9][13679])
+ hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
basic_machine=hppa1.1-hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
basic_machine=hppa1.0-hp
;;
- hppa-next)
- os=-nextstep3
- ;;
- hppaosf)
+ hppaosf) # CYGNUS LOCAL
basic_machine=hppa1.1-hp
os=-osf
;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
i370-ibm* | ibm*)
basic_machine=i370-ibm
+ os=-mvs
;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i*86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ i[3456]86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
os=-sysv32
;;
- i*86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ i[3456]86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
os=-sysv4
;;
- i*86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ i[3456]86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
os=-sysv
;;
- i*86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ i[3456]86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
os=-solaris2
;;
- i386mach)
+ i386mach) # CYGNUS LOCAL
basic_machine=i386-mach
os=-mach
;;
- i386-vsta | vsta)
+ i386-vsta | vsta) # CYGNUS LOCAL
basic_machine=i386-unknown
os=-vsta
;;
+ i386-go32 | go32) # CYGNUS LOCAL
+ basic_machine=i386-unknown
+ os=-go32
+ ;;
iris | iris4d)
basic_machine=mips-sgi
case $os in
@@ -557,59 +446,31 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
- mingw32)
- basic_machine=i386-pc
- os=-mingw32
- ;;
miniframe)
basic_machine=m68000-convergent
;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mipsel*-linux*)
- basic_machine=mipsel-unknown
- os=-linux-gnu
- ;;
- mips*-linux*)
- basic_machine=mips-unknown
- os=-linux-gnu
- ;;
mips3*-*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
;;
mips3*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
;;
- mmix*)
- basic_machine=mmix-knuth
- os=-mmixware
- ;;
- monitor)
+ monitor) # CYGNUS LOCAL
basic_machine=m68k-rom68k
os=-coff
;;
- msdos)
- basic_machine=i386-pc
+ msdos) # CYGNUS LOCAL
+ basic_machine=i386-unknown
os=-msdos
;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
;;
netbsd386)
- basic_machine=i386-unknown
+ basic_machine=i386-unknown # CYGNUS LOCAL
os=-netbsd
;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
news | news700 | news800 | news900)
basic_machine=m68k-sony
os=-newsos
@@ -622,7 +483,7 @@ case $basic_machine in
basic_machine=mips-sony
os=-newsos
;;
- necv70)
+ necv70) # CYGNUS LOCAL
basic_machine=v70-nec
os=-sysv
;;
@@ -651,29 +512,14 @@ case $basic_machine in
basic_machine=i960-intel
os=-nindy
;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
np1)
basic_machine=np1-gould
;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- OSE68000 | ose68000)
+ OSE68000 | ose68000) # CYGNUS LOCAL
basic_machine=m68000-ericsson
os=-ose
;;
- os68k)
+ os68k) # CYGNUS LOCAL
basic_machine=m68k-none
os=-os68k
;;
@@ -694,28 +540,30 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
- pentium | p5 | k5 | k6 | nexgen)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon)
- basic_machine=i686-pc
+ pentium | p5)
+ basic_machine=i586-intel
;;
- pentiumii | pentium2)
- basic_machine=i686-pc
+ pentiumpro | p6)
+ basic_machine=i686-intel
;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-*)
+ pentium-* | p5-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ pentiumpro-* | p6-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- pentiumii-* | pentium2-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ k5)
+ # We don't have specific support for AMD's K5 yet, so just call it a Pentium
+ basic_machine=i586-amd
+ ;;
+ nexgen)
+ # We don't have specific support for Nexgen yet, so just call it a Pentium
+ basic_machine=i586-nexgen
;;
pn)
basic_machine=pn-gould
;;
- power) basic_machine=power-ibm
+ power) basic_machine=rs6000-ibm
;;
ppc) basic_machine=powerpc-unknown
;;
@@ -730,11 +578,7 @@ case $basic_machine in
ps2)
basic_machine=i386-ibm
;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
- ;;
- rom68k)
+ rom68k) # CYGNUS LOCAL
basic_machine=m68k-rom68k
os=-coff
;;
@@ -744,7 +588,11 @@ case $basic_machine in
rtpc | rtpc-*)
basic_machine=romp-ibm
;;
- sa29200)
+ s390*)
+ basic_machine=s390-ibm
+ os=-linux
+ ;;
+ sa29200) # CYGNUS LOCAL
basic_machine=a29k-amd
os=-udi
;;
@@ -755,10 +603,24 @@ case $basic_machine in
basic_machine=sh-hitachi
os=-hms
;;
- sparclite-wrs)
+ sparclite-wrs) # CYGNUS LOCAL
basic_machine=sparclite-wrs
os=-vxworks
;;
+ sparcfrw) # CYGNUS LOCAL
+ basic_machine=sparcfrw-sun
+ os=-sunos4
+ ;;
+ sparcfrwcompat) # CYGNUS LOCAL
+ basic_machine=sparcfrwcompat-sun
+ os=-sunos4
+ ;;
+ sparclitefrw) # CYGNUS LOCAL
+ basic_machine=sparclitefrw-fujitsu
+ ;;
+ sparclitefrwcompat) # CYGNUS LOCAL
+ basic_machine=sparclitefrwcompat-fujitsu
+ ;;
sps7)
basic_machine=m68k-bull
os=-sysv2
@@ -766,10 +628,10 @@ case $basic_machine in
spur)
basic_machine=spur-unknown
;;
- st2000)
+ st2000) # CYGNUS LOCAL
basic_machine=m68k-tandem
;;
- stratus)
+ stratus) # CYGNUS LOCAL
basic_machine=i860-stratus
os=-sysv4
;;
@@ -813,28 +675,10 @@ case $basic_machine in
sun386 | sun386i | roadrunner)
basic_machine=i386-sun
;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
- ;;
symmetry)
basic_machine=i386-sequent
os=-dynix
;;
- t3e)
- basic_machine=t3e-cray
- os=-unicos
- ;;
- tic54x | c54x*)
- basic_machine=tic54x-unknown
- os=-coff
- ;;
- tx39)
- basic_machine=mipstx39-unknown
- ;;
- tx39el)
- basic_machine=mipstx39el-unknown
- ;;
tower | tower-32)
basic_machine=m68k-ncr
;;
@@ -846,7 +690,7 @@ case $basic_machine in
basic_machine=a29k-nyu
os=-sym1
;;
- v810 | necv810)
+ v810 | necv810) # CYGNUS LOCAL
basic_machine=v810-nec
os=-none
;;
@@ -858,9 +702,6 @@ case $basic_machine in
basic_machine=vax-dec
os=-vms
;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
- ;;
vxworks960)
basic_machine=i960-wrs
os=-vxworks
@@ -869,17 +710,13 @@ case $basic_machine in
basic_machine=m68k-wrs
os=-vxworks
;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- w65*)
- basic_machine=w65-wdc
- os=-none
- ;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
+ vxworks29k) # CYGNUS LOCAL
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*) # CYGNUS LOCAL
+ basic_machine=w65-wdc
+ os=-none
;;
xmp)
basic_machine=xmp-cray
@@ -888,7 +725,7 @@ case $basic_machine in
xps | xps100)
basic_machine=xps100-honeywell
;;
- z8k-*-coff)
+ z8k-*-coff) # CYGNUS LOCAL
basic_machine=z8k-unknown
os=-sim
;;
@@ -899,21 +736,17 @@ case $basic_machine in
# Here we handle the default manufacturer of certain CPU types. It is in
# some cases the only manufacturer, in others, it is the most popular.
- w89k)
+ w89k) # CYGNUS LOCAL
basic_machine=hppa1.1-winbond
;;
- op50n)
+ op50n) # CYGNUS LOCAL
basic_machine=hppa1.1-oki
;;
- op60c)
+ op60c) # CYGNUS LOCAL
basic_machine=hppa1.1-oki
;;
mips)
- if [ x$os = x-linux-gnu ]; then
- basic_machine=mips-unknown
- else
- basic_machine=mips-mips
- fi
+ basic_machine=mips-mips
;;
romp)
basic_machine=romp-ibm
@@ -924,20 +757,13 @@ case $basic_machine in
vax)
basic_machine=vax-dec
;;
- pdp10)
- # there are many clones, so DEC is not a safe bet
- basic_machine=pdp10-unknown
- ;;
pdp11)
basic_machine=pdp11-dec
;;
we32k)
basic_machine=we32k-att
;;
- sh3 | sh4)
- basic_machine=sh-unknown
- ;;
- sparc | sparcv9 | sparcv9b)
+ sparc)
basic_machine=sparc-sun
;;
cydra)
@@ -949,19 +775,12 @@ case $basic_machine in
orion105)
basic_machine=clipper-highlevel
;;
- mac | mpw | mac-mpw)
+ mac | mpw | mac-mpw) # CYGNUS LOCAL
basic_machine=m68k-apple
;;
- pmac | pmac-mpw)
+ pmac | pmac-mpw) # CYGNUS LOCAL
basic_machine=powerpc-apple
;;
- c4x*)
- basic_machine=c4x-none
- os=-coff
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
- ;;
*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
@@ -985,8 +804,6 @@ esac
if [ x"$os" != x"" ]
then
case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
@@ -994,71 +811,42 @@ case $os in
-solaris)
os=-solaris2
;;
- -svr4*)
+ -unixware* | svr4*)
os=-sysv4
;;
- -unixware*)
- os=-sysv4.2uw
- ;;
-gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ os=`echo $os | sed -e 's|gnu/linux|linux|'`
;;
# First accept the basic system types.
# The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
+ # Each alternative must end in a *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ -gnu* | -bsd* | -mach* | -lites* | -minix* | -genix* | -ultrix* | -irix* \
+ | -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[3456]* \
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
- | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
- ;;
- -nto*)
- os=-nto-qnx
- ;;
- -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- ;;
- -mac*)
+ | -amigados* | -msdos* | -moss* | -newsos* | -unicos* | -aos* \
+ | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \
+ | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -netbsd* | -freebsd* | -openbsd* \
+ | -riscix* | -lites* \
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta | -udi \
+ | -eabi* | -ieee* | -qnx*)
+ ;;
+ # CYGNUS LOCAL
+ -go32 | -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -proelf | -os9* \
+ | -macos* | -mpw* | -magic* | -pe* | -win32)
+ ;;
+ -mac*) # CYGNUS LOCAL
os=`echo $os | sed -e 's|mac|macos|'`
;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
- ;;
-sunos5*)
os=`echo $os | sed -e 's|sunos5|solaris2|'`
;;
-sunos6*)
os=`echo $os | sed -e 's|sunos6|solaris3|'`
;;
- -opened*)
- os=-openedition
- ;;
- -wince*)
- os=-wince
- ;;
-osfrose*)
os=-osfrose
;;
@@ -1074,18 +862,12 @@ case $os in
-acis*)
os=-aos
;;
- -386bsd)
+ -386bsd) # CYGNUS LOCAL
os=-bsd
;;
-ctix* | -uts*)
os=-sysv
;;
- -ns2 )
- os=-nextstep2
- ;;
- -nsk*)
- os=-nsk
- ;;
# Preserve the version number of sinix5.
-sinix5.*)
os=`echo $os | sed -e 's|sinix|sysv|'`
@@ -1111,18 +893,15 @@ case $os in
# This must come after -sysvr4.
-sysv*)
;;
- -ose*)
+ -ose*) # CYGNUS LOCAL
os=-ose
;;
- -es1800*)
+ -es1800*) # CYGNUS LOCAL
os=-ose
;;
-xenix)
os=-xenix
;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
- ;;
-none)
;;
*)
@@ -1148,15 +927,6 @@ case $basic_machine in
*-acorn)
os=-riscix1.2
;;
- arm*-rebel)
- os=-linux
- ;;
- arm*-semi)
- os=-aout
- ;;
- pdp10-*)
- os=-tops20
- ;;
pdp11-*)
os=-none
;;
@@ -1175,13 +945,10 @@ case $basic_machine in
# default.
# os=-sunos4
;;
- m68*-cisco)
+ m68*-cisco) # CYGNUS LOCAL
os=-aout
;;
- mips*-cisco)
- os=-elf
- ;;
- mips*-*)
+ mips*-cisco) # CYGNUS LOCAL
os=-elf
;;
*-tti) # must be before sparc entry or we get the wrong os.
@@ -1190,19 +957,16 @@ case $basic_machine in
sparc-* | *-sun)
os=-sunos4.1.1
;;
- *-be)
- os=-beos
- ;;
*-ibm)
os=-aix
;;
- *-wec)
+ *-wec) # CYGNUS LOCAL
os=-proelf
;;
- *-winbond)
+ *-winbond) # CYGNUS LOCAL
os=-proelf
;;
- *-oki)
+ *-oki) # CYGNUS LOCAL
os=-proelf
;;
*-hp)
@@ -1215,7 +979,7 @@ case $basic_machine in
os=-sysv
;;
*-cbm)
- os=-amigaos
+ os=-amigados
;;
*-dg)
os=-dgux
@@ -1229,9 +993,6 @@ case $basic_machine in
m88k-omron*)
os=-luna
;;
- *-next )
- os=-nextstep
- ;;
*-sequent)
os=-ptx
;;
@@ -1265,21 +1026,15 @@ case $basic_machine in
*-masscomp)
os=-rtu
;;
- f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
- ;;
- *-rom68k)
+ *-rom68k) # CYGNUS LOCAL
os=-coff
;;
- *-*bug)
+ *-*bug) # CYGNUS LOCAL
os=-coff
;;
- *-apple)
+ *-apple) # CYGNUS LOCAL
os=-macos
;;
- *-atari*)
- os=-mint
- ;;
*)
os=-none
;;
@@ -1298,18 +1053,18 @@ case $basic_machine in
-sunos*)
vendor=sun
;;
+ -bosx*) # CYGNUS LOCAL
+ vendor=bull
+ ;;
+ -lynxos*)
+ vendor=lynx
+ ;;
-aix*)
vendor=ibm
;;
- -beos*)
- vendor=be
- ;;
-hpux*)
vendor=hp
;;
- -mpeix*)
- vendor=hp
- ;;
-hiux*)
vendor=hitachi
;;
@@ -1325,38 +1080,24 @@ case $basic_machine in
-genix*)
vendor=ns
;;
- -mvs* | -opened*)
+ -mvs*)
vendor=ibm
;;
-ptx*)
vendor=sequent
;;
- -vxsim* | -vxworks*)
+ -vxworks*)
vendor=wrs
;;
- -aux*)
- vendor=apple
- ;;
- -hms*)
+ -hms*) # CYGNUS LOCAL
vendor=hitachi
;;
- -mpw* | -macos*)
+ -mpw* | -macos*) # CYGNUS LOCAL
vendor=apple
;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- vendor=atari
- ;;
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;
esac
echo $basic_machine$os
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/source/configure b/source/configure
index 89d3bfcc45f..1de9bd83157 100755
--- a/source/configure
+++ b/source/configure
@@ -15,15 +15,15 @@ ac_default_prefix=/usr/local/samba
ac_help="$ac_help
--with-fhs use FHS-compliant paths [default=no]"
ac_help="$ac_help
- --with-privatedir=DIR Where to put smbpasswd ($ac_default_prefix/private)"
+ --with-privatedir=DIR Where to put smbpasswd ($privatedir)"
ac_help="$ac_help
- --with-lockdir=DIR Where to put lock files ($ac_default_prefix/var/locks)"
+ --with-lockdir=DIR Where to put lock files ($lockdir)"
ac_help="$ac_help
- --with-swatdir=DIR Where to put SWAT files ($ac_default_prefix/swat)"
+ --with-swatdir=DIR Where to put SWAT files ($swatdir)"
ac_help="$ac_help
- --with-configdir=DIR Where to put configuration files (\$libdir)"
+ --with-configdir=DIR Where to put configuration files ($configdir)"
ac_help="$ac_help
- --with-codepagedir=DIR Where to put codepage files (\$libdir/codepages)"
+ --with-codepagedir=DIR Where to put codepage files ($codepagedir)"
ac_help="$ac_help
--enable-debug turn on debugging [default=no]"
ac_help="$ac_help
@@ -64,9 +64,6 @@ ac_help="$ac_help
--with-pam Include PAM password database support
--without-pam Don't include PAM password database support (default)"
ac_help="$ac_help
- --with-pam_smbpass Include the smbpass PAM module
- --without-pam_smbpass Don't include the smbpass PAM module (default)"
-ac_help="$ac_help
--with-nisplus Include NISPLUS password database support
--without-nisplus Don't include NISPLUS password database support (default)"
ac_help="$ac_help
@@ -754,7 +751,6 @@ fi
-
# compile with optimization and without debugging by default
CFLAGS="-O ${CFLAGS}"
@@ -772,7 +768,7 @@ fi
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:776: checking for $ac_word" >&5
+echo "configure:772: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -802,7 +798,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:806: checking for $ac_word" >&5
+echo "configure:802: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -853,7 +849,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:857: checking for $ac_word" >&5
+echo "configure:853: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -885,7 +881,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:889: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:885: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -896,12 +892,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 900 "configure"
+#line 896 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -927,12 +923,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:931: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:927: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:936: checking whether we are using GNU C" >&5
+echo "configure:932: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -941,7 +937,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:945: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:941: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -960,7 +956,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:964: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:960: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1022,7 +1018,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1026: checking for a BSD compatible install" >&5
+echo "configure:1022: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1079,7 +1075,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1083: checking for $ac_word" >&5
+echo "configure:1079: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1184,7 +1180,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:1188: checking host system type" >&5
+echo "configure:1184: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -1205,7 +1201,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1209: checking build system type" >&5
+echo "configure:1205: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -1225,7 +1221,7 @@ echo "$ac_t""$build" 1>&6
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1229: checking for $ac_word" >&5
+echo "configure:1225: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1264,7 +1260,7 @@ ac_prog=ld
if test "$ac_cv_prog_gcc" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:1268: checking for ld used by GCC" >&5
+echo "configure:1264: checking for ld used by GCC" >&5
ac_prog=`($CC -print-prog-name=ld) 2>&5`
case "$ac_prog" in
# Accept absolute paths.
@@ -1288,10 +1284,10 @@ echo "configure:1268: checking for ld used by GCC" >&5
esac
elif test "$with_gnu_ld" = yes; then
echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1292: checking for GNU ld" >&5
+echo "configure:1288: checking for GNU ld" >&5
else
echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1295: checking for non-GNU ld" >&5
+echo "configure:1291: checking for non-GNU ld" >&5
fi
if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1326,7 +1322,7 @@ else
fi
test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:1330: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:1326: checking if the linker ($LD) is GNU ld" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1342,7 +1338,7 @@ echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6
echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1346: checking for BSD-compatible nm" >&5
+echo "configure:1342: checking for BSD-compatible nm" >&5
if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1378,7 +1374,7 @@ NM="$ac_cv_path_NM"
echo "$ac_t""$NM" 1>&6
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1382: checking whether ln -s works" >&5
+echo "configure:1378: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1427,8 +1423,8 @@ test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
case "$lt_target" in
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 1431 "configure"' > conftest.$ac_ext
- if { (eval echo configure:1432: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ echo '#line 1427 "configure"' > conftest.$ac_ext
+ if { (eval echo configure:1428: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
case "`/usr/bin/file conftest.o`" in
*32-bit*)
LD="${LD-ld} -32"
@@ -1449,19 +1445,19 @@ case "$lt_target" in
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:1453: checking whether the C compiler needs -belf" >&5
+echo "configure:1449: checking whether the C compiler needs -belf" >&5
if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1458 "configure"
+#line 1454 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:1465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
lt_cv_cc_needs_belf=yes
else
@@ -1566,10 +1562,10 @@ exec 5>>./config.log
if test "x$CC" != xcc; then
echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6
-echo "configure:1570: checking whether $CC and cc understand -c and -o together" >&5
+echo "configure:1566: checking whether $CC and cc understand -c and -o together" >&5
else
echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6
-echo "configure:1573: checking whether cc understands -c and -o together" >&5
+echo "configure:1569: checking whether cc understands -c and -o together" >&5
fi
set dummy $CC; ac_cc="`echo $2 |
sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`"
@@ -1581,16 +1577,16 @@ else
# We do the test twice because some compilers refuse to overwrite an
# existing .o file with -o, though they will create one.
ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5'
-if { (eval echo configure:1585: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
- test -f conftest.o && { (eval echo configure:1586: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+if { (eval echo configure:1581: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+ test -f conftest.o && { (eval echo configure:1582: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
then
eval ac_cv_prog_cc_${ac_cc}_c_o=yes
if test "x$CC" != xcc; then
# Test first that cc exists at all.
- if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1591: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1587: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
ac_try='cc -c conftest.c -o conftest.o 1>&5'
- if { (eval echo configure:1593: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
- test -f conftest.o && { (eval echo configure:1594: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+ if { (eval echo configure:1589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+ test -f conftest.o && { (eval echo configure:1590: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
then
# cc works too.
:
@@ -1624,20 +1620,20 @@ fi
echo $ac_n "checking that the C compiler understands volatile""... $ac_c" 1>&6
-echo "configure:1628: checking that the C compiler understands volatile" >&5
+echo "configure:1624: checking that the C compiler understands volatile" >&5
if eval "test \"`echo '$''{'samba_cv_volatile'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1634 "configure"
+#line 1630 "configure"
#include "confdefs.h"
#include <sys/types.h>
int main() {
volatile int i = 0
; return 0; }
EOF
-if { (eval echo configure:1641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1637: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_volatile=yes
else
@@ -1687,7 +1683,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:1691: checking host system type" >&5
+echo "configure:1687: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -1708,7 +1704,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:1712: checking target system type" >&5
+echo "configure:1708: checking target system type" >&5
target_alias=$target
case "$target_alias" in
@@ -1726,7 +1722,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1730: checking build system type" >&5
+echo "configure:1726: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -1760,7 +1756,7 @@ esac
echo $ac_n "checking config.cache system type""... $ac_c" 1>&6
-echo "configure:1764: checking config.cache system type" >&5
+echo "configure:1760: checking config.cache system type" >&5
if { test x"${ac_cv_host_system_type+set}" = x"set" &&
test x"$ac_cv_host_system_type" != x"$host"; } ||
{ test x"${ac_cv_build_system_type+set}" = x"set" &&
@@ -1785,7 +1781,7 @@ case "$host_os" in
# Try to work out if this is the native HPUX compiler that uses the -Ae flag.
*hpux*)
echo $ac_n "checking whether ${CC-cc} accepts -Ae""... $ac_c" 1>&6
-echo "configure:1789: checking whether ${CC-cc} accepts -Ae" >&5
+echo "configure:1785: checking whether ${CC-cc} accepts -Ae" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_Ae'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1869,14 +1865,14 @@ EOF
*sysv4*)
if test $host = mips-sni-sysv4 ; then
echo $ac_n "checking for LFS support""... $ac_c" 1>&6
-echo "configure:1873: checking for LFS support" >&5
+echo "configure:1869: checking for LFS support" >&5
old_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
if test "$cross_compiling" = yes; then
SINIX_LFS_SUPPORT=cross
else
cat > conftest.$ac_ext <<EOF
-#line 1880 "configure"
+#line 1876 "configure"
#include "confdefs.h"
#include <unistd.h>
@@ -1888,7 +1884,7 @@ exit(1);
#endif
}
EOF
-if { (eval echo configure:1892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
SINIX_LFS_SUPPORT=yes
else
@@ -1915,14 +1911,14 @@ fi
#
*linux*)
echo $ac_n "checking for LFS support""... $ac_c" 1>&6
-echo "configure:1919: checking for LFS support" >&5
+echo "configure:1915: checking for LFS support" >&5
old_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
+ CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
if test "$cross_compiling" = yes; then
LINUX_LFS_SUPPORT=cross
else
cat > conftest.$ac_ext <<EOF
-#line 1926 "configure"
+#line 1922 "configure"
#include "confdefs.h"
#include <unistd.h>
@@ -1960,7 +1956,7 @@ main() {
}
EOF
-if { (eval echo configure:1964: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
LINUX_LFS_SUPPORT=yes
else
@@ -1974,21 +1970,21 @@ fi
CPPFLAGS="$old_CPPFLAGS"
if test x$LINUX_LFS_SUPPORT = xyes ; then
- CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
+ CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
fi
echo "$ac_t""$LINUX_LFS_SUPPORT" 1>&6
;;
*hurd*)
echo $ac_n "checking for LFS support""... $ac_c" 1>&6
-echo "configure:1985: checking for LFS support" >&5
+echo "configure:1981: checking for LFS support" >&5
old_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
if test "$cross_compiling" = yes; then
GLIBC_LFS_SUPPORT=cross
else
cat > conftest.$ac_ext <<EOF
-#line 1992 "configure"
+#line 1988 "configure"
#include "confdefs.h"
#include <unistd.h>
@@ -2000,7 +1996,7 @@ exit(1);
#endif
}
EOF
-if { (eval echo configure:2004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
GLIBC_LFS_SUPPORT=yes
else
@@ -2022,21 +2018,21 @@ fi
esac
echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:2026: checking for inline" >&5
+echo "configure:2022: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
-#line 2033 "configure"
+#line 2029 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:2040: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2036: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
@@ -2062,7 +2058,7 @@ EOF
esac
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2066: checking how to run the C preprocessor" >&5
+echo "configure:2062: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -2077,13 +2073,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 2081 "configure"
+#line 2077 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2087: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2083: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2094,13 +2090,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 2098 "configure"
+#line 2094 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2104: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2100: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2111,13 +2107,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 2115 "configure"
+#line 2111 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2121: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2117: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2142,12 +2138,12 @@ fi
echo "$ac_t""$CPP" 1>&6
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2146: checking for ANSI C header files" >&5
+echo "configure:2142: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2151 "configure"
+#line 2147 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -2155,7 +2151,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2159: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2155: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2172,7 +2168,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 2176 "configure"
+#line 2172 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -2190,7 +2186,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 2194 "configure"
+#line 2190 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -2211,7 +2207,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 2215 "configure"
+#line 2211 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -2222,7 +2218,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:2226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -2250,12 +2246,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:2254: checking for $ac_hdr that defines DIR" >&5
+echo "configure:2250: checking for $ac_hdr that defines DIR" >&5
if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2259 "configure"
+#line 2255 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_hdr>
@@ -2263,7 +2259,7 @@ int main() {
DIR *dirp = 0;
; return 0; }
EOF
-if { (eval echo configure:2267: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2263: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "ac_cv_header_dirent_$ac_safe=yes"
else
@@ -2288,7 +2284,7 @@ done
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
if test $ac_header_dirent = dirent.h; then
echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:2292: checking for opendir in -ldir" >&5
+echo "configure:2288: checking for opendir in -ldir" >&5
ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2296,7 +2292,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldir $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2300 "configure"
+#line 2296 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -2307,7 +2303,7 @@ int main() {
opendir()
; return 0; }
EOF
-if { (eval echo configure:2311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -2329,7 +2325,7 @@ fi
else
echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:2333: checking for opendir in -lx" >&5
+echo "configure:2329: checking for opendir in -lx" >&5
ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2337,7 +2333,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lx $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2341 "configure"
+#line 2337 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -2348,7 +2344,7 @@ int main() {
opendir()
; return 0; }
EOF
-if { (eval echo configure:2352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -2371,12 +2367,12 @@ fi
fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:2375: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:2371: checking whether time.h and sys/time.h may both be included" >&5
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2380 "configure"
+#line 2376 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
@@ -2385,7 +2381,7 @@ int main() {
struct tm *tp;
; return 0; }
EOF
-if { (eval echo configure:2389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2385: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_time=yes
else
@@ -2406,12 +2402,12 @@ EOF
fi
echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:2410: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:2406: checking for sys/wait.h that is POSIX.1 compatible" >&5
if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2415 "configure"
+#line 2411 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
@@ -2427,7 +2423,7 @@ wait (&s);
s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
; return 0; }
EOF
-if { (eval echo configure:2431: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2427: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_sys_wait_h=yes
else
@@ -2451,17 +2447,17 @@ for ac_hdr in arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2455: checking for $ac_hdr" >&5
+echo "configure:2451: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2460 "configure"
+#line 2456 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2465: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2461: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2491,17 +2487,17 @@ for ac_hdr in unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2495: checking for $ac_hdr" >&5
+echo "configure:2491: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2500 "configure"
+#line 2496 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2505: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2501: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2531,17 +2527,17 @@ for ac_hdr in compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2535: checking for $ac_hdr" >&5
+echo "configure:2531: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2540 "configure"
+#line 2536 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2545: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2541: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2567,21 +2563,21 @@ else
fi
done
-for ac_hdr in sys/param.h ctype.h sys/un.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/mode.h
+for ac_hdr in sys/param.h ctype.h sys/un.h sys/wait.h sys/resource.h sys/ioctl.h sys/mode.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2575: checking for $ac_hdr" >&5
+echo "configure:2571: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2580 "configure"
+#line 2576 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2585: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2581: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2607,21 +2603,21 @@ else
fi
done
-for ac_hdr in sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h
+for ac_hdr in sys/mman.h sys/filio.h sys/priv.h string.h strings.h stdlib.h sys/socket.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2615: checking for $ac_hdr" >&5
+echo "configure:2611: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2620 "configure"
+#line 2616 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2621: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2651,17 +2647,17 @@ for ac_hdr in sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h term
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2655: checking for $ac_hdr" >&5
+echo "configure:2651: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2660 "configure"
+#line 2656 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2665: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2661: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2691,17 +2687,17 @@ for ac_hdr in sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2695: checking for $ac_hdr" >&5
+echo "configure:2691: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2700 "configure"
+#line 2696 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2705: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2727,47 +2723,6 @@ else
fi
done
-for ac_hdr in security/pam_modules.h security/_pam_macros.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2735: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2740 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2745: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-
#
# HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
# This causes configure to fail to detect it. Check for shadow separately on HPUX.
@@ -2775,14 +2730,14 @@ done
case "$host_os" in
*hpux*)
cat > conftest.$ac_ext <<EOF
-#line 2779 "configure"
+#line 2734 "configure"
#include "confdefs.h"
#include <shadow.h>
int main() {
struct spwd testme
; return 0; }
EOF
-if { (eval echo configure:2786: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2741: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_shadow_h=yes
else
@@ -2804,17 +2759,17 @@ for ac_hdr in shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2808: checking for $ac_hdr" >&5
+echo "configure:2763: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2813 "configure"
+#line 2768 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2818: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2773: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2840,21 +2795,21 @@ else
fi
done
-for ac_hdr in nss.h nss_common.h sys/security.h security/pam_appl.h security/pam_modules.h
+for ac_hdr in nss.h sys/security.h security/pam_appl.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2848: checking for $ac_hdr" >&5
+echo "configure:2803: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2853 "configure"
+#line 2808 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2858: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2813: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2884,17 +2839,17 @@ for ac_hdr in stropts.h poll.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2888: checking for $ac_hdr" >&5
+echo "configure:2843: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2893 "configure"
+#line 2848 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2898: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2853: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2924,17 +2879,17 @@ for ac_hdr in sys/capability.h syscall.h sys/syscall.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2928: checking for $ac_hdr" >&5
+echo "configure:2883: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2933 "configure"
+#line 2888 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2938: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2893: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2960,21 +2915,21 @@ else
fi
done
-for ac_hdr in sys/acl.h sys/cdefs.h glob.h
+for ac_hdr in sys/acl.h sys/cdefs.h glob.h acl/acl.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2968: checking for $ac_hdr" >&5
+echo "configure:2923: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2973 "configure"
+#line 2928 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2978: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2933: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -3006,17 +2961,17 @@ for ac_hdr in utmp.h utmpx.h lastlog.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3010: checking for $ac_hdr" >&5
+echo "configure:2965: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3015 "configure"
+#line 2970 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3020: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2975: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -3048,17 +3003,17 @@ for ac_hdr in sys/fs/vx_quota.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3052: checking for $ac_hdr" >&5
+echo "configure:3007: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3057 "configure"
+#line 3012 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3062: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3017: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -3086,7 +3041,7 @@ done
echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:3090: checking size of int" >&5
+echo "configure:3045: checking size of int" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3094,7 +3049,7 @@ else
ac_cv_sizeof_int=cross
else
cat > conftest.$ac_ext <<EOF
-#line 3098 "configure"
+#line 3053 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
@@ -3105,7 +3060,7 @@ main()
exit(0);
}
EOF
-if { (eval echo configure:3109: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_int=`cat conftestval`
else
@@ -3125,7 +3080,7 @@ EOF
echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:3129: checking size of long" >&5
+echo "configure:3084: checking size of long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3133,7 +3088,7 @@ else
ac_cv_sizeof_long=cross
else
cat > conftest.$ac_ext <<EOF
-#line 3137 "configure"
+#line 3092 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
@@ -3144,7 +3099,7 @@ main()
exit(0);
}
EOF
-if { (eval echo configure:3148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3103: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_long=`cat conftestval`
else
@@ -3164,7 +3119,7 @@ EOF
echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:3168: checking size of short" >&5
+echo "configure:3123: checking size of short" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3172,7 +3127,7 @@ else
ac_cv_sizeof_short=cross
else
cat > conftest.$ac_ext <<EOF
-#line 3176 "configure"
+#line 3131 "configure"
#include "confdefs.h"
#include <stdio.h>
main()
@@ -3183,7 +3138,7 @@ main()
exit(0);
}
EOF
-if { (eval echo configure:3187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_short=`cat conftestval`
else
@@ -3204,12 +3159,12 @@ EOF
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3208: checking for working const" >&5
+echo "configure:3163: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3213 "configure"
+#line 3168 "configure"
#include "confdefs.h"
int main() {
@@ -3258,7 +3213,7 @@ ccp = (char const *const *) p;
; return 0; }
EOF
-if { (eval echo configure:3262: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3217: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
@@ -3279,21 +3234,21 @@ EOF
fi
echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:3283: checking for inline" >&5
+echo "configure:3238: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
-#line 3290 "configure"
+#line 3245 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:3297: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3252: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
@@ -3319,14 +3274,14 @@ EOF
esac
echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:3323: checking whether byte ordering is bigendian" >&5
+echo "configure:3278: checking whether byte ordering is bigendian" >&5
if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_bigendian=unknown
# See if sys/param.h defines the BYTE_ORDER macro.
cat > conftest.$ac_ext <<EOF
-#line 3330 "configure"
+#line 3285 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
@@ -3337,11 +3292,11 @@ int main() {
#endif
; return 0; }
EOF
-if { (eval echo configure:3341: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3296: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
# It does; now see whether it defined to BIG_ENDIAN or not.
cat > conftest.$ac_ext <<EOF
-#line 3345 "configure"
+#line 3300 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
@@ -3352,7 +3307,7 @@ int main() {
#endif
; return 0; }
EOF
-if { (eval echo configure:3356: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3311: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_bigendian=yes
else
@@ -3372,7 +3327,7 @@ if test "$cross_compiling" = yes; then
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
cat > conftest.$ac_ext <<EOF
-#line 3376 "configure"
+#line 3331 "configure"
#include "confdefs.h"
main () {
/* Are we little or big endian? From Harbison&Steele. */
@@ -3385,7 +3340,7 @@ main () {
exit (u.c[sizeof (long) - 1] == 1);
}
EOF
-if { (eval echo configure:3389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_bigendian=no
else
@@ -3409,14 +3364,14 @@ EOF
fi
echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6
-echo "configure:3413: checking whether char is unsigned" >&5
+echo "configure:3368: checking whether char is unsigned" >&5
if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$GCC" = yes; then
# GCC predefines this symbol on systems where it applies.
cat > conftest.$ac_ext <<EOF
-#line 3420 "configure"
+#line 3375 "configure"
#include "confdefs.h"
#ifdef __CHAR_UNSIGNED__
yes
@@ -3438,7 +3393,7 @@ if test "$cross_compiling" = yes; then
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
cat > conftest.$ac_ext <<EOF
-#line 3442 "configure"
+#line 3397 "configure"
#include "confdefs.h"
/* volatile prevents gcc2 from optimizing the test away on sparcs. */
#if !defined(__STDC__) || __STDC__ != 1
@@ -3448,7 +3403,7 @@ main() {
volatile char c = 255; exit(c < 0);
}
EOF
-if { (eval echo configure:3452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_char_unsigned=yes
else
@@ -3473,12 +3428,12 @@ fi
echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:3477: checking return type of signal handlers" >&5
+echo "configure:3432: checking return type of signal handlers" >&5
if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3482 "configure"
+#line 3437 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
@@ -3495,7 +3450,7 @@ int main() {
int i;
; return 0; }
EOF
-if { (eval echo configure:3499: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3454: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_type_signal=void
else
@@ -3514,12 +3469,12 @@ EOF
echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3518: checking for uid_t in sys/types.h" >&5
+echo "configure:3473: checking for uid_t in sys/types.h" >&5
if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3523 "configure"
+#line 3478 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
@@ -3548,12 +3503,12 @@ EOF
fi
echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:3552: checking for mode_t" >&5
+echo "configure:3507: checking for mode_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3557 "configure"
+#line 3512 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3581,12 +3536,12 @@ EOF
fi
echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3585: checking for off_t" >&5
+echo "configure:3540: checking for off_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3590 "configure"
+#line 3545 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3614,12 +3569,12 @@ EOF
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3618: checking for size_t" >&5
+echo "configure:3573: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3623 "configure"
+#line 3578 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3647,12 +3602,12 @@ EOF
fi
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:3651: checking for pid_t" >&5
+echo "configure:3606: checking for pid_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3656 "configure"
+#line 3611 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3680,12 +3635,12 @@ EOF
fi
echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6
-echo "configure:3684: checking for st_rdev in struct stat" >&5
+echo "configure:3639: checking for st_rdev in struct stat" >&5
if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3689 "configure"
+#line 3644 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
@@ -3693,7 +3648,7 @@ int main() {
struct stat s; s.st_rdev;
; return 0; }
EOF
-if { (eval echo configure:3697: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3652: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_st_rdev=yes
else
@@ -3714,12 +3669,12 @@ EOF
fi
echo $ac_n "checking for d_off in dirent""... $ac_c" 1>&6
-echo "configure:3718: checking for d_off in dirent" >&5
+echo "configure:3673: checking for d_off in dirent" >&5
if eval "test \"`echo '$''{'ac_cv_dirent_d_off'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3723 "configure"
+#line 3678 "configure"
#include "confdefs.h"
#include <unistd.h>
@@ -3729,7 +3684,7 @@ int main() {
struct dirent d; d.d_off;
; return 0; }
EOF
-if { (eval echo configure:3733: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_dirent_d_off=yes
else
@@ -3750,12 +3705,12 @@ EOF
fi
echo $ac_n "checking for ino_t""... $ac_c" 1>&6
-echo "configure:3754: checking for ino_t" >&5
+echo "configure:3709: checking for ino_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_ino_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3759 "configure"
+#line 3714 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3783,12 +3738,12 @@ EOF
fi
echo $ac_n "checking for loff_t""... $ac_c" 1>&6
-echo "configure:3787: checking for loff_t" >&5
+echo "configure:3742: checking for loff_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_loff_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3792 "configure"
+#line 3747 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3816,12 +3771,12 @@ EOF
fi
echo $ac_n "checking for offset_t""... $ac_c" 1>&6
-echo "configure:3820: checking for offset_t" >&5
+echo "configure:3775: checking for offset_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_offset_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3825 "configure"
+#line 3780 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3849,12 +3804,12 @@ EOF
fi
echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:3853: checking for ssize_t" >&5
+echo "configure:3808: checking for ssize_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3858 "configure"
+#line 3813 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3882,12 +3837,12 @@ EOF
fi
echo $ac_n "checking for wchar_t""... $ac_c" 1>&6
-echo "configure:3886: checking for wchar_t" >&5
+echo "configure:3841: checking for wchar_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_wchar_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3891 "configure"
+#line 3846 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3917,7 +3872,7 @@ fi
# we need libcups for CUPS support...
echo $ac_n "checking for httpConnect in -lcups""... $ac_c" 1>&6
-echo "configure:3921: checking for httpConnect in -lcups" >&5
+echo "configure:3876: checking for httpConnect in -lcups" >&5
ac_lib_var=`echo cups'_'httpConnect | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3925,7 +3880,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lcups $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3929 "configure"
+#line 3884 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3936,7 +3891,7 @@ int main() {
httpConnect()
; return 0; }
EOF
-if { (eval echo configure:3940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3895: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3966,7 +3921,7 @@ fi
# we need libdl for PAM and the new VFS code
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:3970: checking for dlopen in -ldl" >&5
+echo "configure:3925: checking for dlopen in -ldl" >&5
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3974,7 +3929,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3978 "configure"
+#line 3933 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3985,7 +3940,7 @@ int main() {
dlopen()
; return 0; }
EOF
-if { (eval echo configure:3989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4010,54 +3965,14 @@ else
fi
-echo $ac_n "checking for socklen_t type""... $ac_c" 1>&6
-echo "configure:4015: checking for socklen_t type" >&5
-if eval "test \"`echo '$''{'samba_cv_socklen_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
- cat > conftest.$ac_ext <<EOF
-#line 4021 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#include <sys/socket.h>
-int main() {
-socklen_t i = 0
-; return 0; }
-EOF
-if { (eval echo configure:4034: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- samba_cv_socklen_t=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- samba_cv_socklen_t=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$samba_cv_socklen_t" 1>&6
-if test x"$samba_cv_socklen_t" = x"yes"; then
- cat >> confdefs.h <<\EOF
-#define HAVE_SOCKLEN_T_TYPE 1
-EOF
-
-fi
-
echo $ac_n "checking for sig_atomic_t type""... $ac_c" 1>&6
-echo "configure:4055: checking for sig_atomic_t type" >&5
+echo "configure:3970: checking for sig_atomic_t type" >&5
if eval "test \"`echo '$''{'samba_cv_sig_atomic_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4061 "configure"
+#line 3976 "configure"
#include "confdefs.h"
#include <sys/types.h>
@@ -4070,7 +3985,7 @@ int main() {
sig_atomic_t i = 0
; return 0; }
EOF
-if { (eval echo configure:4074: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3989: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_sig_atomic_t=yes
else
@@ -4090,257 +4005,114 @@ EOF
fi
-# stupid headers have the functions but no declaration. grrrr.
-
- echo $ac_n "checking for errno declaration""... $ac_c" 1>&6
-echo "configure:4097: checking for errno declaration" >&5
-if eval "test \"`echo '$''{'ac_cv_have_errno_decl'+set}'`\" = set"; then
+echo $ac_n "checking for errno in errno.h""... $ac_c" 1>&6
+echo "configure:4010: checking for errno in errno.h" >&5
+if eval "test \"`echo '$''{'samba_cv_errno'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4103 "configure"
+#line 4016 "configure"
#include "confdefs.h"
#include <errno.h>
int main() {
-int i = (int)errno
+int i = errno
; return 0; }
EOF
-if { (eval echo configure:4110: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4023: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- ac_cv_have_errno_decl=yes
+ samba_cv_errno=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- ac_cv_have_errno_decl=no
+ samba_cv_have_errno=no
fi
rm -f conftest*
fi
-echo "$ac_t""$ac_cv_have_errno_decl" 1>&6
- if test x"$ac_cv_have_errno_decl" = x"yes"; then
- cat >> confdefs.h <<\EOF
+echo "$ac_t""$samba_cv_errno" 1>&6
+if test x"$samba_cv_errno" = x"yes"; then
+ cat >> confdefs.h <<\EOF
#define HAVE_ERRNO_DECL 1
EOF
- fi
-
+fi
- echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6
-echo "configure:4132: checking for setresuid declaration" >&5
-if eval "test \"`echo '$''{'ac_cv_have_setresuid_decl'+set}'`\" = set"; then
+# stupid glibc has the functions but no declaration. grrrr.
+echo $ac_n "checking for setresuid declaration""... $ac_c" 1>&6
+echo "configure:4045: checking for setresuid declaration" >&5
+if eval "test \"`echo '$''{'samba_cv_have_setresuid_decl'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4138 "configure"
+#line 4051 "configure"
#include "confdefs.h"
#include <unistd.h>
int main() {
int i = (int)setresuid
; return 0; }
EOF
-if { (eval echo configure:4145: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- ac_cv_have_setresuid_decl=yes
+ samba_cv_have_setresuid_decl=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- ac_cv_have_setresuid_decl=no
+ samba_cv_have_setresuid_decl=no
fi
rm -f conftest*
fi
-echo "$ac_t""$ac_cv_have_setresuid_decl" 1>&6
- if test x"$ac_cv_have_setresuid_decl" = x"yes"; then
+echo "$ac_t""$samba_cv_have_setresuid_decl" 1>&6
+if test x"$samba_cv_have_setresuid_decl" = x"yes"; then
cat >> confdefs.h <<\EOF
#define HAVE_SETRESUID_DECL 1
EOF
- fi
-
+fi
- echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6
-echo "configure:4167: checking for setresgid declaration" >&5
-if eval "test \"`echo '$''{'ac_cv_have_setresgid_decl'+set}'`\" = set"; then
+# stupid glibc has the functions but no declaration. grrrr.
+echo $ac_n "checking for setresgid declaration""... $ac_c" 1>&6
+echo "configure:4080: checking for setresgid declaration" >&5
+if eval "test \"`echo '$''{'samba_cv_have_setresgid_decl'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4173 "configure"
+#line 4086 "configure"
#include "confdefs.h"
#include <unistd.h>
int main() {
int i = (int)setresgid
; return 0; }
EOF
-if { (eval echo configure:4180: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- ac_cv_have_setresgid_decl=yes
+ samba_cv_have_setresgid_decl=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- ac_cv_have_setresgid_decl=no
+ samba_cv_have_setresgid_decl=no
fi
rm -f conftest*
fi
-echo "$ac_t""$ac_cv_have_setresgid_decl" 1>&6
- if test x"$ac_cv_have_setresgid_decl" = x"yes"; then
+echo "$ac_t""$samba_cv_have_setresgid_decl" 1>&6
+if test x"$samba_cv_have_setresgid_decl" = x"yes"; then
cat >> confdefs.h <<\EOF
#define HAVE_SETRESGID_DECL 1
EOF
- fi
-
-
- echo $ac_n "checking for asprintf declaration""... $ac_c" 1>&6
-echo "configure:4202: checking for asprintf declaration" >&5
-if eval "test \"`echo '$''{'ac_cv_have_asprintf_decl'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
- cat > conftest.$ac_ext <<EOF
-#line 4208 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-int main() {
-int i = (int)asprintf
-; return 0; }
-EOF
-if { (eval echo configure:4215: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_have_asprintf_decl=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_have_asprintf_decl=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_have_asprintf_decl" 1>&6
- if test x"$ac_cv_have_asprintf_decl" = x"yes"; then
- cat >> confdefs.h <<\EOF
-#define HAVE_ASPRINTF_DECL 1
-EOF
-
- fi
-
-
- echo $ac_n "checking for vasprintf declaration""... $ac_c" 1>&6
-echo "configure:4237: checking for vasprintf declaration" >&5
-if eval "test \"`echo '$''{'ac_cv_have_vasprintf_decl'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
- cat > conftest.$ac_ext <<EOF
-#line 4243 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-int main() {
-int i = (int)vasprintf
-; return 0; }
-EOF
-if { (eval echo configure:4250: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_have_vasprintf_decl=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_have_vasprintf_decl=no
-fi
-rm -f conftest*
fi
-echo "$ac_t""$ac_cv_have_vasprintf_decl" 1>&6
- if test x"$ac_cv_have_vasprintf_decl" = x"yes"; then
- cat >> confdefs.h <<\EOF
-#define HAVE_VASPRINTF_DECL 1
-EOF
-
- fi
-
-
- echo $ac_n "checking for vsnprintf declaration""... $ac_c" 1>&6
-echo "configure:4272: checking for vsnprintf declaration" >&5
-if eval "test \"`echo '$''{'ac_cv_have_vsnprintf_decl'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
- cat > conftest.$ac_ext <<EOF
-#line 4278 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-int main() {
-int i = (int)vsnprintf
-; return 0; }
-EOF
-if { (eval echo configure:4285: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_have_vsnprintf_decl=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_have_vsnprintf_decl=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_have_vsnprintf_decl" 1>&6
- if test x"$ac_cv_have_vsnprintf_decl" = x"yes"; then
- cat >> confdefs.h <<\EOF
-#define HAVE_VSNPRINTF_DECL 1
-EOF
-
- fi
-
-
- echo $ac_n "checking for snprintf declaration""... $ac_c" 1>&6
-echo "configure:4307: checking for snprintf declaration" >&5
-if eval "test \"`echo '$''{'ac_cv_have_snprintf_decl'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
- cat > conftest.$ac_ext <<EOF
-#line 4313 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-int main() {
-int i = (int)snprintf
-; return 0; }
-EOF
-if { (eval echo configure:4320: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- ac_cv_have_snprintf_decl=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_have_snprintf_decl=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_have_snprintf_decl" 1>&6
- if test x"$ac_cv_have_snprintf_decl" = x"yes"; then
- cat >> confdefs.h <<\EOF
-#define HAVE_SNPRINTF_DECL 1
-EOF
-
- fi
-
-
# and glibc has setresuid under linux but the function does
# nothing until kernel 2.1.44! very dumb.
echo $ac_n "checking for real setresuid""... $ac_c" 1>&6
-echo "configure:4344: checking for real setresuid" >&5
+echo "configure:4116: checking for real setresuid" >&5
if eval "test \"`echo '$''{'samba_cv_have_setresuid'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4349,12 +4121,12 @@ else
samba_cv_have_setresuid=cross
else
cat > conftest.$ac_ext <<EOF
-#line 4353 "configure"
+#line 4125 "configure"
#include "confdefs.h"
#include <errno.h>
main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}
EOF
-if { (eval echo configure:4358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4130: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_have_setresuid=yes
else
@@ -4379,7 +4151,7 @@ fi
# Do the same check for setresguid...
#
echo $ac_n "checking for real setresgid""... $ac_c" 1>&6
-echo "configure:4383: checking for real setresgid" >&5
+echo "configure:4155: checking for real setresgid" >&5
if eval "test \"`echo '$''{'samba_cv_have_setresgid'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4388,13 +4160,13 @@ else
samba_cv_have_setresgid=cross
else
cat > conftest.$ac_ext <<EOF
-#line 4392 "configure"
+#line 4164 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <errno.h>
main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}
EOF
-if { (eval echo configure:4398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_have_setresgid=yes
else
@@ -4417,7 +4189,7 @@ EOF
fi
echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:4421: checking for 8-bit clean memcmp" >&5
+echo "configure:4193: checking for 8-bit clean memcmp" >&5
if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4425,7 +4197,7 @@ else
ac_cv_func_memcmp_clean=no
else
cat > conftest.$ac_ext <<EOF
-#line 4429 "configure"
+#line 4201 "configure"
#include "confdefs.h"
main()
@@ -4435,7 +4207,7 @@ main()
}
EOF
-if { (eval echo configure:4439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_memcmp_clean=yes
else
@@ -4454,12 +4226,116 @@ test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
###############################################
+# test for where we get crypt() from
+for ac_func in crypt
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4234: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 4239 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+if test x"$ac_cv_func_crypt" = x"no"; then
+ echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
+echo "configure:4288: checking for crypt in -lcrypt" >&5
+ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lcrypt $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4296 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char crypt();
+
+int main() {
+crypt()
+; return 0; }
+EOF
+if { (eval echo configure:4307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LIBS="$LIBS -lcrypt";
+ cat >> confdefs.h <<\EOF
+#define HAVE_CRYPT 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+###############################################
# Readline included by default unless explicitly asked not to
test "${with_readline+set}" != "set" && with_readline=yes
# test for where we get readline() from
echo $ac_n "checking whether to use readline""... $ac_c" 1>&6
-echo "configure:4463: checking whether to use readline" >&5
+echo "configure:4339: checking whether to use readline" >&5
# Check whether --with-readline or --without-readline was given.
if test "${with_readline+set}" = set; then
withval="$with_readline"
@@ -4471,17 +4347,17 @@ if test "${with_readline+set}" = set; then
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4475: checking for $ac_hdr" >&5
+echo "configure:4351: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4480 "configure"
+#line 4356 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4485: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4361: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4511,17 +4387,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4515: checking for $ac_hdr" >&5
+echo "configure:4391: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4520 "configure"
+#line 4396 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4525: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4401: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4552,17 +4428,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4556: checking for $ac_hdr" >&5
+echo "configure:4432: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4561 "configure"
+#line 4437 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4566: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4442: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4585,7 +4461,7 @@ EOF
for termlib in ncurses curses termcap terminfo termlib; do
echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6
-echo "configure:4589: checking for tgetent in -l${termlib}" >&5
+echo "configure:4465: checking for tgetent in -l${termlib}" >&5
ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4593,7 +4469,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-l${termlib} $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4597 "configure"
+#line 4473 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4604,7 +4480,7 @@ int main() {
tgetent()
; return 0; }
EOF
-if { (eval echo configure:4608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4626,7 +4502,7 @@ fi
done
echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6
-echo "configure:4630: checking for rl_callback_handler_install in -lreadline" >&5
+echo "configure:4506: checking for rl_callback_handler_install in -lreadline" >&5
ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4634,7 +4510,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lreadline $TERMLIBS $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4638 "configure"
+#line 4514 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4645,7 +4521,7 @@ int main() {
rl_callback_handler_install()
; return 0; }
EOF
-if { (eval echo configure:4649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4696,17 +4572,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4700: checking for $ac_hdr" >&5
+echo "configure:4576: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4705 "configure"
+#line 4581 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4710: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4586: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4736,17 +4612,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4740: checking for $ac_hdr" >&5
+echo "configure:4616: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4745 "configure"
+#line 4621 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4750: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4626: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4777,17 +4653,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4781: checking for $ac_hdr" >&5
+echo "configure:4657: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4786 "configure"
+#line 4662 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4667: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4810,7 +4686,7 @@ EOF
for termlib in ncurses curses termcap terminfo termlib; do
echo $ac_n "checking for tgetent in -l${termlib}""... $ac_c" 1>&6
-echo "configure:4814: checking for tgetent in -l${termlib}" >&5
+echo "configure:4690: checking for tgetent in -l${termlib}" >&5
ac_lib_var=`echo ${termlib}'_'tgetent | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4818,7 +4694,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-l${termlib} $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4822 "configure"
+#line 4698 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4829,7 +4705,7 @@ int main() {
tgetent()
; return 0; }
EOF
-if { (eval echo configure:4833: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4851,7 +4727,7 @@ fi
done
echo $ac_n "checking for rl_callback_handler_install in -lreadline""... $ac_c" 1>&6
-echo "configure:4855: checking for rl_callback_handler_install in -lreadline" >&5
+echo "configure:4731: checking for rl_callback_handler_install in -lreadline" >&5
ac_lib_var=`echo readline'_'rl_callback_handler_install | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4859,7 +4735,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lreadline $TERMLIBS $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4863 "configure"
+#line 4739 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4870,7 +4746,7 @@ int main() {
rl_callback_handler_install()
; return 0; }
EOF
-if { (eval echo configure:4874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4925,12 +4801,12 @@ fi
for ac_func in connect
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4929: checking for $ac_func" >&5
+echo "configure:4805: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4934 "configure"
+#line 4810 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4953,7 +4829,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4833: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4981,7 +4857,7 @@ if test x"$ac_cv_func_connect" = x"no"; then
case "$LIBS" in
*-lnsl*) ;;
*) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6
-echo "configure:4985: checking for printf in -lnsl_s" >&5
+echo "configure:4861: checking for printf in -lnsl_s" >&5
ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4989,7 +4865,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lnsl_s $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4993 "configure"
+#line 4869 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5000,7 +4876,7 @@ int main() {
printf()
; return 0; }
EOF
-if { (eval echo configure:5004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5031,7 +4907,7 @@ fi
case "$LIBS" in
*-lnsl*) ;;
*) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6
-echo "configure:5035: checking for printf in -lnsl" >&5
+echo "configure:4911: checking for printf in -lnsl" >&5
ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5039,7 +4915,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lnsl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5043 "configure"
+#line 4919 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5050,7 +4926,7 @@ int main() {
printf()
; return 0; }
EOF
-if { (eval echo configure:5054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5081,7 +4957,7 @@ fi
case "$LIBS" in
*-lsocket*) ;;
*) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:5085: checking for connect in -lsocket" >&5
+echo "configure:4961: checking for connect in -lsocket" >&5
ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5089,7 +4965,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsocket $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5093 "configure"
+#line 4969 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5100,7 +4976,7 @@ int main() {
connect()
; return 0; }
EOF
-if { (eval echo configure:5104: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5131,7 +5007,7 @@ fi
case "$LIBS" in
*-linet*) ;;
*) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6
-echo "configure:5135: checking for connect in -linet" >&5
+echo "configure:5011: checking for connect in -linet" >&5
ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5139,7 +5015,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-linet $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5143 "configure"
+#line 5019 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5150,7 +5026,7 @@ int main() {
connect()
; return 0; }
EOF
-if { (eval echo configure:5154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5194,12 +5070,12 @@ fi
for ac_func in yp_get_default_domain
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5198: checking for $ac_func" >&5
+echo "configure:5074: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5203 "configure"
+#line 5079 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5222,7 +5098,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5248,7 +5124,7 @@ done
if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then
echo $ac_n "checking for yp_get_default_domain in -lnsl""... $ac_c" 1>&6
-echo "configure:5252: checking for yp_get_default_domain in -lnsl" >&5
+echo "configure:5128: checking for yp_get_default_domain in -lnsl" >&5
ac_lib_var=`echo nsl'_'yp_get_default_domain | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5256,7 +5132,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lnsl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5260 "configure"
+#line 5136 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5267,7 +5143,7 @@ int main() {
yp_get_default_domain()
; return 0; }
EOF
-if { (eval echo configure:5271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5297,12 +5173,12 @@ fi
for ac_func in execl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5301: checking for $ac_func" >&5
+echo "configure:5177: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5306 "configure"
+#line 5182 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5325,7 +5201,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5358,12 +5234,12 @@ fi
for ac_func in waitpid getcwd strdup strtoul strerror chown fchown chmod fchmod chroot
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5362: checking for $ac_func" >&5
+echo "configure:5238: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5367 "configure"
+#line 5243 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5386,7 +5262,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5413,12 +5289,12 @@ done
for ac_func in fstat strchr utime utimes getrlimit fsync bzero memset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5417: checking for $ac_func" >&5
+echo "configure:5293: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5422 "configure"
+#line 5298 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5441,7 +5317,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5465,15 +5341,15 @@ else
fi
done
-for ac_func in memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid
+for ac_func in memmove vsnprintf snprintf setsid glob strpbrk pipe crypt16 getauthuid
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5472: checking for $ac_func" >&5
+echo "configure:5348: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5477 "configure"
+#line 5353 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5496,7 +5372,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5523,12 +5399,12 @@ done
for ac_func in strftime sigprocmask sigblock sigaction innetgr setnetgrent getnetgrent endnetgrent
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5527: checking for $ac_func" >&5
+echo "configure:5403: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5532 "configure"
+#line 5408 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5551,7 +5427,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5578,12 +5454,12 @@ done
for ac_func in initgroups select poll rdchk getgrnam getgrent pathconf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5582: checking for $ac_func" >&5
+echo "configure:5458: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5587 "configure"
+#line 5463 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5606,7 +5482,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5633,12 +5509,12 @@ done
for ac_func in setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5637: checking for $ac_func" >&5
+echo "configure:5513: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5642 "configure"
+#line 5518 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5661,7 +5537,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5688,12 +5564,12 @@ done
for ac_func in lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5692: checking for $ac_func" >&5
+echo "configure:5568: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5697 "configure"
+#line 5573 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5716,7 +5592,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5743,12 +5619,12 @@ done
for ac_func in fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5747: checking for $ac_func" >&5
+echo "configure:5623: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5752 "configure"
+#line 5628 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5771,7 +5647,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5795,15 +5671,15 @@ else
fi
done
-for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink
+for ac_func in srandom random srand rand setenv usleep strcasecmp fcvt fcvtl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5802: checking for $ac_func" >&5
+echo "configure:5678: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5807 "configure"
+#line 5683 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5826,7 +5702,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5855,12 +5731,12 @@ done
for ac_func in syscall
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5859: checking for $ac_func" >&5
+echo "configure:5735: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5864 "configure"
+#line 5740 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5883,7 +5759,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5887: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5911,12 +5787,12 @@ done
for ac_func in _dup _dup2 _opendir _readdir _seekdir _telldir _closedir
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5915: checking for $ac_func" >&5
+echo "configure:5791: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5920 "configure"
+#line 5796 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5939,7 +5815,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5966,12 +5842,12 @@ done
for ac_func in __dup __dup2 __opendir __readdir __seekdir __telldir __closedir
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5970: checking for $ac_func" >&5
+echo "configure:5846: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5975 "configure"
+#line 5851 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5994,7 +5870,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6021,12 +5897,12 @@ done
for ac_func in __getcwd _getcwd
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6025: checking for $ac_func" >&5
+echo "configure:5901: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6030 "configure"
+#line 5906 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6049,7 +5925,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6076,12 +5952,12 @@ done
for ac_func in __xstat __fxstat __lxstat
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6080: checking for $ac_func" >&5
+echo "configure:5956: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6085 "configure"
+#line 5961 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6104,7 +5980,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6131,12 +6007,12 @@ done
for ac_func in _stat _lstat _fstat __stat __lstat __fstat
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6135: checking for $ac_func" >&5
+echo "configure:6011: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6140 "configure"
+#line 6016 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6159,7 +6035,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6186,12 +6062,12 @@ done
for ac_func in _acl __acl _facl __facl _open __open _chdir __chdir
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6190: checking for $ac_func" >&5
+echo "configure:6066: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6195 "configure"
+#line 6071 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6214,7 +6090,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6241,12 +6117,12 @@ done
for ac_func in _close __close _fchdir __fchdir _fcntl __fcntl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6245: checking for $ac_func" >&5
+echo "configure:6121: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6250 "configure"
+#line 6126 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6269,7 +6145,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6149: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6296,12 +6172,12 @@ done
for ac_func in getdents _getdents __getdents _lseek __lseek _read __read
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6300: checking for $ac_func" >&5
+echo "configure:6176: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6305 "configure"
+#line 6181 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6324,7 +6200,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6351,12 +6227,12 @@ done
for ac_func in _write __write _fork __fork
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6355: checking for $ac_func" >&5
+echo "configure:6231: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6360 "configure"
+#line 6236 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6379,7 +6255,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6406,12 +6282,12 @@ done
for ac_func in _stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6410: checking for $ac_func" >&5
+echo "configure:6286: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6415 "configure"
+#line 6291 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6434,7 +6310,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6461,12 +6337,12 @@ done
for ac_func in __sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6465: checking for $ac_func" >&5
+echo "configure:6341: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6470 "configure"
+#line 6346 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6489,7 +6365,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6516,12 +6392,12 @@ done
for ac_func in pread _pread __pread pread64 _pread64 __pread64
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6520: checking for $ac_func" >&5
+echo "configure:6396: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6525 "configure"
+#line 6401 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6544,7 +6420,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6571,12 +6447,12 @@ done
for ac_func in pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6575: checking for $ac_func" >&5
+echo "configure:6451: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6580 "configure"
+#line 6456 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6599,7 +6475,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6626,12 +6502,12 @@ done
for ac_func in open64 _open64 __open64 creat64
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6630: checking for $ac_func" >&5
+echo "configure:6506: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6635 "configure"
+#line 6511 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6654,7 +6530,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6685,9 +6561,9 @@ done
if test x$ac_cv_func_stat64 = xno ; then
echo $ac_n "checking for stat64 in <sys/stat.h>""... $ac_c" 1>&6
-echo "configure:6689: checking for stat64 in <sys/stat.h>" >&5
+echo "configure:6565: checking for stat64 in <sys/stat.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 6691 "configure"
+#line 6567 "configure"
#include "confdefs.h"
#if defined(HAVE_UNISTD_H)
@@ -6699,7 +6575,7 @@ int main() {
struct stat64 st64; exit(stat64(".",&st64));
; return 0; }
EOF
-if { (eval echo configure:6703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_stat64=yes
else
@@ -6718,9 +6594,9 @@ fi
if test x$ac_cv_func_lstat64 = xno ; then
echo $ac_n "checking for lstat64 in <sys/stat.h>""... $ac_c" 1>&6
-echo "configure:6722: checking for lstat64 in <sys/stat.h>" >&5
+echo "configure:6598: checking for lstat64 in <sys/stat.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 6724 "configure"
+#line 6600 "configure"
#include "confdefs.h"
#if defined(HAVE_UNISTD_H)
@@ -6732,7 +6608,7 @@ int main() {
struct stat64 st64; exit(lstat64(".",&st64));
; return 0; }
EOF
-if { (eval echo configure:6736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_lstat64=yes
else
@@ -6751,9 +6627,9 @@ fi
if test x$ac_cv_func_fstat64 = xno ; then
echo $ac_n "checking for fstat64 in <sys/stat.h>""... $ac_c" 1>&6
-echo "configure:6755: checking for fstat64 in <sys/stat.h>" >&5
+echo "configure:6631: checking for fstat64 in <sys/stat.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 6757 "configure"
+#line 6633 "configure"
#include "confdefs.h"
#if defined(HAVE_UNISTD_H)
@@ -6765,7 +6641,7 @@ int main() {
struct stat64 st64; exit(fstat64(0,&st64));
; return 0; }
EOF
-if { (eval echo configure:6769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_fstat64=yes
else
@@ -6790,7 +6666,7 @@ fi
if test x$ac_cv_func_strcasecmp = xno ; then
echo $ac_n "checking for strcasecmp in -lresolv""... $ac_c" 1>&6
-echo "configure:6794: checking for strcasecmp in -lresolv" >&5
+echo "configure:6670: checking for strcasecmp in -lresolv" >&5
ac_lib_var=`echo resolv'_'strcasecmp | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6798,7 +6674,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lresolv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6802 "configure"
+#line 6678 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6809,7 +6685,7 @@ int main() {
strcasecmp()
; return 0; }
EOF
-if { (eval echo configure:6813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6845,12 +6721,12 @@ case "$LIBS" in
*-lsecurity*) for ac_func in putprpwnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6849: checking for $ac_func" >&5
+echo "configure:6725: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6854 "configure"
+#line 6730 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6873,7 +6749,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6898,7 +6774,7 @@ fi
done
;;
*) echo $ac_n "checking for putprpwnam in -lsecurity""... $ac_c" 1>&6
-echo "configure:6902: checking for putprpwnam in -lsecurity" >&5
+echo "configure:6778: checking for putprpwnam in -lsecurity" >&5
ac_lib_var=`echo security'_'putprpwnam | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6906,7 +6782,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsecurity $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6910 "configure"
+#line 6786 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6917,7 +6793,7 @@ int main() {
putprpwnam()
; return 0; }
EOF
-if { (eval echo configure:6921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6947,12 +6823,12 @@ fi
for ac_func in putprpwnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6951: checking for $ac_func" >&5
+echo "configure:6827: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6956 "configure"
+#line 6832 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6975,7 +6851,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7006,12 +6882,12 @@ case "$LIBS" in
*-lsec*) for ac_func in putprpwnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7010: checking for $ac_func" >&5
+echo "configure:6886: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7015 "configure"
+#line 6891 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7034,7 +6910,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7038: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7059,7 +6935,7 @@ fi
done
;;
*) echo $ac_n "checking for putprpwnam in -lsec""... $ac_c" 1>&6
-echo "configure:7063: checking for putprpwnam in -lsec" >&5
+echo "configure:6939: checking for putprpwnam in -lsec" >&5
ac_lib_var=`echo sec'_'putprpwnam | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7067,7 +6943,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsec $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7071 "configure"
+#line 6947 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7078,7 +6954,7 @@ int main() {
putprpwnam()
; return 0; }
EOF
-if { (eval echo configure:7082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7108,12 +6984,12 @@ fi
for ac_func in putprpwnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7112: checking for $ac_func" >&5
+echo "configure:6988: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7117 "configure"
+#line 6993 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7136,7 +7012,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7140: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7168,12 +7044,12 @@ case "$LIBS" in
*-lsecurity*) for ac_func in set_auth_parameters
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7172: checking for $ac_func" >&5
+echo "configure:7048: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7177 "configure"
+#line 7053 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7196,7 +7072,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7221,7 +7097,7 @@ fi
done
;;
*) echo $ac_n "checking for set_auth_parameters in -lsecurity""... $ac_c" 1>&6
-echo "configure:7225: checking for set_auth_parameters in -lsecurity" >&5
+echo "configure:7101: checking for set_auth_parameters in -lsecurity" >&5
ac_lib_var=`echo security'_'set_auth_parameters | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7229,7 +7105,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsecurity $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7233 "configure"
+#line 7109 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7240,7 +7116,7 @@ int main() {
set_auth_parameters()
; return 0; }
EOF
-if { (eval echo configure:7244: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7270,12 +7146,12 @@ fi
for ac_func in set_auth_parameters
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7274: checking for $ac_func" >&5
+echo "configure:7150: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7279 "configure"
+#line 7155 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7298,7 +7174,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7329,12 +7205,12 @@ case "$LIBS" in
*-lsec*) for ac_func in set_auth_parameters
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7333: checking for $ac_func" >&5
+echo "configure:7209: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7338 "configure"
+#line 7214 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7357,7 +7233,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7382,7 +7258,7 @@ fi
done
;;
*) echo $ac_n "checking for set_auth_parameters in -lsec""... $ac_c" 1>&6
-echo "configure:7386: checking for set_auth_parameters in -lsec" >&5
+echo "configure:7262: checking for set_auth_parameters in -lsec" >&5
ac_lib_var=`echo sec'_'set_auth_parameters | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7390,7 +7266,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsec $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7394 "configure"
+#line 7270 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7401,7 +7277,7 @@ int main() {
set_auth_parameters()
; return 0; }
EOF
-if { (eval echo configure:7405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7281: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7431,12 +7307,12 @@ fi
for ac_func in set_auth_parameters
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7435: checking for $ac_func" >&5
+echo "configure:7311: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7440 "configure"
+#line 7316 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7459,7 +7335,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7492,12 +7368,12 @@ case "$LIBS" in
*-lgen*) for ac_func in getspnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7496: checking for $ac_func" >&5
+echo "configure:7372: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7501 "configure"
+#line 7377 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7520,7 +7396,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7545,7 +7421,7 @@ fi
done
;;
*) echo $ac_n "checking for getspnam in -lgen""... $ac_c" 1>&6
-echo "configure:7549: checking for getspnam in -lgen" >&5
+echo "configure:7425: checking for getspnam in -lgen" >&5
ac_lib_var=`echo gen'_'getspnam | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7553,7 +7429,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lgen $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7557 "configure"
+#line 7433 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7564,7 +7440,7 @@ int main() {
getspnam()
; return 0; }
EOF
-if { (eval echo configure:7568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7594,12 +7470,12 @@ fi
for ac_func in getspnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7598: checking for $ac_func" >&5
+echo "configure:7474: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7603 "configure"
+#line 7479 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7622,7 +7498,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7654,12 +7530,12 @@ case "$LIBS" in
*-lsecurity*) for ac_func in getspnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7658: checking for $ac_func" >&5
+echo "configure:7534: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7663 "configure"
+#line 7539 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7682,7 +7558,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7707,7 +7583,7 @@ fi
done
;;
*) echo $ac_n "checking for getspnam in -lsecurity""... $ac_c" 1>&6
-echo "configure:7711: checking for getspnam in -lsecurity" >&5
+echo "configure:7587: checking for getspnam in -lsecurity" >&5
ac_lib_var=`echo security'_'getspnam | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7715,7 +7591,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsecurity $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7719 "configure"
+#line 7595 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7726,7 +7602,7 @@ int main() {
getspnam()
; return 0; }
EOF
-if { (eval echo configure:7730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7756,12 +7632,12 @@ fi
for ac_func in getspnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7760: checking for $ac_func" >&5
+echo "configure:7636: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7765 "configure"
+#line 7641 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7784,7 +7660,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7815,12 +7691,12 @@ case "$LIBS" in
*-lsec*) for ac_func in getspnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7819: checking for $ac_func" >&5
+echo "configure:7695: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7824 "configure"
+#line 7700 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7843,7 +7719,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7868,7 +7744,7 @@ fi
done
;;
*) echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6
-echo "configure:7872: checking for getspnam in -lsec" >&5
+echo "configure:7748: checking for getspnam in -lsec" >&5
ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7876,7 +7752,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsec $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7880 "configure"
+#line 7756 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7887,7 +7763,7 @@ int main() {
getspnam()
; return 0; }
EOF
-if { (eval echo configure:7891: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7917,12 +7793,12 @@ fi
for ac_func in getspnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7921: checking for $ac_func" >&5
+echo "configure:7797: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7926 "configure"
+#line 7802 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7945,7 +7821,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7977,12 +7853,12 @@ case "$LIBS" in
*-lsecurity*) for ac_func in bigcrypt
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7981: checking for $ac_func" >&5
+echo "configure:7857: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7986 "configure"
+#line 7862 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8005,7 +7881,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8030,7 +7906,7 @@ fi
done
;;
*) echo $ac_n "checking for bigcrypt in -lsecurity""... $ac_c" 1>&6
-echo "configure:8034: checking for bigcrypt in -lsecurity" >&5
+echo "configure:7910: checking for bigcrypt in -lsecurity" >&5
ac_lib_var=`echo security'_'bigcrypt | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -8038,7 +7914,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsecurity $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8042 "configure"
+#line 7918 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -8049,7 +7925,7 @@ int main() {
bigcrypt()
; return 0; }
EOF
-if { (eval echo configure:8053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -8079,12 +7955,12 @@ fi
for ac_func in bigcrypt
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8083: checking for $ac_func" >&5
+echo "configure:7959: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8088 "configure"
+#line 7964 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8107,7 +7983,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7987: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8138,12 +8014,12 @@ case "$LIBS" in
*-lsec*) for ac_func in bigcrypt
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8142: checking for $ac_func" >&5
+echo "configure:8018: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8147 "configure"
+#line 8023 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8166,7 +8042,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8046: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8191,7 +8067,7 @@ fi
done
;;
*) echo $ac_n "checking for bigcrypt in -lsec""... $ac_c" 1>&6
-echo "configure:8195: checking for bigcrypt in -lsec" >&5
+echo "configure:8071: checking for bigcrypt in -lsec" >&5
ac_lib_var=`echo sec'_'bigcrypt | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -8199,7 +8075,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsec $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8203 "configure"
+#line 8079 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -8210,7 +8086,7 @@ int main() {
bigcrypt()
; return 0; }
EOF
-if { (eval echo configure:8214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8090: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -8240,12 +8116,12 @@ fi
for ac_func in bigcrypt
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8244: checking for $ac_func" >&5
+echo "configure:8120: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8249 "configure"
+#line 8125 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8268,7 +8144,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8300,12 +8176,12 @@ case "$LIBS" in
*-lsecurity*) for ac_func in getprpwnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8304: checking for $ac_func" >&5
+echo "configure:8180: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8309 "configure"
+#line 8185 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8328,7 +8204,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8353,7 +8229,7 @@ fi
done
;;
*) echo $ac_n "checking for getprpwnam in -lsecurity""... $ac_c" 1>&6
-echo "configure:8357: checking for getprpwnam in -lsecurity" >&5
+echo "configure:8233: checking for getprpwnam in -lsecurity" >&5
ac_lib_var=`echo security'_'getprpwnam | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -8361,7 +8237,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsecurity $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8365 "configure"
+#line 8241 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -8372,7 +8248,7 @@ int main() {
getprpwnam()
; return 0; }
EOF
-if { (eval echo configure:8376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8252: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -8402,12 +8278,12 @@ fi
for ac_func in getprpwnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8406: checking for $ac_func" >&5
+echo "configure:8282: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8411 "configure"
+#line 8287 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8430,7 +8306,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8461,12 +8337,12 @@ case "$LIBS" in
*-lsec*) for ac_func in getprpwnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8465: checking for $ac_func" >&5
+echo "configure:8341: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8470 "configure"
+#line 8346 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8489,7 +8365,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8514,7 +8390,7 @@ fi
done
;;
*) echo $ac_n "checking for getprpwnam in -lsec""... $ac_c" 1>&6
-echo "configure:8518: checking for getprpwnam in -lsec" >&5
+echo "configure:8394: checking for getprpwnam in -lsec" >&5
ac_lib_var=`echo sec'_'getprpwnam | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -8522,7 +8398,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsec $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8526 "configure"
+#line 8402 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -8533,7 +8409,7 @@ int main() {
getprpwnam()
; return 0; }
EOF
-if { (eval echo configure:8537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -8563,12 +8439,12 @@ fi
for ac_func in getprpwnam
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8567: checking for $ac_func" >&5
+echo "configure:8443: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8572 "configure"
+#line 8448 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8591,7 +8467,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8696,7 +8572,7 @@ EOF
*dgux*) # Extract the first word of "groff", so it can be a program name with args.
set dummy groff; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:8700: checking for $ac_word" >&5
+echo "configure:8576: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ROFF'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8751,7 +8627,7 @@ esac
# try to work out how to produce pic code with this compiler
echo $ac_n "checking whether ${CC-cc} accepts -fpic""... $ac_c" 1>&6
-echo "configure:8755: checking whether ${CC-cc} accepts -fpic" >&5
+echo "configure:8631: checking whether ${CC-cc} accepts -fpic" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_fpic'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8771,7 +8647,7 @@ if test $ac_cv_prog_cc_fpic = yes; then
fi
if test x$PICFLAG = x; then
echo $ac_n "checking whether ${CC-cc} accepts -KPIC""... $ac_c" 1>&6
-echo "configure:8775: checking whether ${CC-cc} accepts -KPIC" >&5
+echo "configure:8651: checking whether ${CC-cc} accepts -KPIC" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_KPIC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8792,7 +8668,7 @@ echo "$ac_t""$ac_cv_prog_cc_KPIC" 1>&6
fi
if test x$PICFLAG = x; then
echo $ac_n "checking whether ${CC-cc} accepts -Kpic""... $ac_c" 1>&6
-echo "configure:8796: checking whether ${CC-cc} accepts -Kpic" >&5
+echo "configure:8672: checking whether ${CC-cc} accepts -Kpic" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_Kpic'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8815,7 +8691,7 @@ fi
################
echo $ac_n "checking for long long""... $ac_c" 1>&6
-echo "configure:8819: checking for long long" >&5
+echo "configure:8695: checking for long long" >&5
if eval "test \"`echo '$''{'samba_cv_have_longlong'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8824,12 +8700,12 @@ if test "$cross_compiling" = yes; then
samba_cv_have_longlong=cross
else
cat > conftest.$ac_ext <<EOF
-#line 8828 "configure"
+#line 8704 "configure"
#include "confdefs.h"
#include <stdio.h>
main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }
EOF
-if { (eval echo configure:8833: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_have_longlong=yes
else
@@ -8856,20 +8732,20 @@ fi
# AIX needs this.
echo $ac_n "checking for LL suffix on long long integers""... $ac_c" 1>&6
-echo "configure:8860: checking for LL suffix on long long integers" >&5
+echo "configure:8736: checking for LL suffix on long long integers" >&5
if eval "test \"`echo '$''{'samba_cv_compiler_supports_ll'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8866 "configure"
+#line 8742 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
long long i = 0x8000000000LL
; return 0; }
EOF
-if { (eval echo configure:8873: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8749: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_compiler_supports_ll=yes
else
@@ -8891,7 +8767,7 @@ fi
echo $ac_n "checking for 64 bit off_t""... $ac_c" 1>&6
-echo "configure:8895: checking for 64 bit off_t" >&5
+echo "configure:8771: checking for 64 bit off_t" >&5
if eval "test \"`echo '$''{'samba_cv_SIZEOF_OFF_T'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8900,13 +8776,13 @@ if test "$cross_compiling" = yes; then
samba_cv_SIZEOF_OFF_T=cross
else
cat > conftest.$ac_ext <<EOF
-#line 8904 "configure"
+#line 8780 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <sys/stat.h>
main() { exit((sizeof(off_t) == 8) ? 0 : 1); }
EOF
-if { (eval echo configure:8910: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_SIZEOF_OFF_T=yes
else
@@ -8929,7 +8805,7 @@ EOF
fi
echo $ac_n "checking for off64_t""... $ac_c" 1>&6
-echo "configure:8933: checking for off64_t" >&5
+echo "configure:8809: checking for off64_t" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_OFF64_T'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8938,7 +8814,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_OFF64_T=cross
else
cat > conftest.$ac_ext <<EOF
-#line 8942 "configure"
+#line 8818 "configure"
#include "confdefs.h"
#if defined(HAVE_UNISTD_H)
@@ -8948,7 +8824,7 @@ else
#include <sys/stat.h>
main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }
EOF
-if { (eval echo configure:8952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_OFF64_T=yes
else
@@ -8971,7 +8847,7 @@ EOF
fi
echo $ac_n "checking for 64 bit ino_t""... $ac_c" 1>&6
-echo "configure:8975: checking for 64 bit ino_t" >&5
+echo "configure:8851: checking for 64 bit ino_t" >&5
if eval "test \"`echo '$''{'samba_cv_SIZEOF_INO_T'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8980,13 +8856,13 @@ if test "$cross_compiling" = yes; then
samba_cv_SIZEOF_INO_T=cross
else
cat > conftest.$ac_ext <<EOF
-#line 8984 "configure"
+#line 8860 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <sys/stat.h>
main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }
EOF
-if { (eval echo configure:8990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_SIZEOF_INO_T=yes
else
@@ -9009,7 +8885,7 @@ EOF
fi
echo $ac_n "checking for ino64_t""... $ac_c" 1>&6
-echo "configure:9013: checking for ino64_t" >&5
+echo "configure:8889: checking for ino64_t" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_INO64_T'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -9018,7 +8894,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_INO64_T=cross
else
cat > conftest.$ac_ext <<EOF
-#line 9022 "configure"
+#line 8898 "configure"
#include "confdefs.h"
#if defined(HAVE_UNISTD_H)
@@ -9028,7 +8904,7 @@ else
#include <sys/stat.h>
main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }
EOF
-if { (eval echo configure:9032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_INO64_T=yes
else
@@ -9051,13 +8927,13 @@ EOF
fi
echo $ac_n "checking for struct dirent64""... $ac_c" 1>&6
-echo "configure:9055: checking for struct dirent64" >&5
+echo "configure:8931: checking for struct dirent64" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_DIRENT64'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9061 "configure"
+#line 8937 "configure"
#include "confdefs.h"
#if defined(HAVE_UNISTD_H)
@@ -9069,7 +8945,7 @@ int main() {
struct dirent64 de;
; return 0; }
EOF
-if { (eval echo configure:9073: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8949: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_STRUCT_DIRENT64=yes
else
@@ -9090,7 +8966,7 @@ EOF
fi
echo $ac_n "checking for unsigned char""... $ac_c" 1>&6
-echo "configure:9094: checking for unsigned char" >&5
+echo "configure:8970: checking for unsigned char" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UNSIGNED_CHAR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -9099,12 +8975,12 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_UNSIGNED_CHAR=cross
else
cat > conftest.$ac_ext <<EOF
-#line 9103 "configure"
+#line 8979 "configure"
#include "confdefs.h"
#include <stdio.h>
main() { char c; c=250; exit((c > 0)?0:1); }
EOF
-if { (eval echo configure:9108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_UNSIGNED_CHAR=yes
else
@@ -9127,13 +9003,13 @@ EOF
fi
echo $ac_n "checking for sin_len in sock""... $ac_c" 1>&6
-echo "configure:9131: checking for sin_len in sock" >&5
+echo "configure:9007: checking for sin_len in sock" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_SOCK_SIN_LEN'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9137 "configure"
+#line 9013 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/socket.h>
@@ -9142,7 +9018,7 @@ int main() {
struct sockaddr_in sock; sock.sin_len = sizeof(sock);
; return 0; }
EOF
-if { (eval echo configure:9146: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9022: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_SOCK_SIN_LEN=yes
else
@@ -9163,13 +9039,13 @@ EOF
fi
echo $ac_n "checking whether seekdir returns void""... $ac_c" 1>&6
-echo "configure:9167: checking whether seekdir returns void" >&5
+echo "configure:9043: checking whether seekdir returns void" >&5
if eval "test \"`echo '$''{'samba_cv_SEEKDIR_RETURNS_VOID'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9173 "configure"
+#line 9049 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <dirent.h>
@@ -9178,7 +9054,7 @@ int main() {
return 0;
; return 0; }
EOF
-if { (eval echo configure:9182: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9058: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_SEEKDIR_RETURNS_VOID=yes
else
@@ -9199,20 +9075,20 @@ EOF
fi
echo $ac_n "checking for __FILE__ macro""... $ac_c" 1>&6
-echo "configure:9203: checking for __FILE__ macro" >&5
+echo "configure:9079: checking for __FILE__ macro" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_FILE_MACRO'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9209 "configure"
+#line 9085 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
printf("%s\n", __FILE__);
; return 0; }
EOF
-if { (eval echo configure:9216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_FILE_MACRO=yes
else
@@ -9233,20 +9109,20 @@ EOF
fi
echo $ac_n "checking for __FUNCTION__ macro""... $ac_c" 1>&6
-echo "configure:9237: checking for __FUNCTION__ macro" >&5
+echo "configure:9113: checking for __FUNCTION__ macro" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_FUNCTION_MACRO'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9243 "configure"
+#line 9119 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
printf("%s\n", __FUNCTION__);
; return 0; }
EOF
-if { (eval echo configure:9250: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9126: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_FUNCTION_MACRO=yes
else
@@ -9267,7 +9143,7 @@ EOF
fi
echo $ac_n "checking if gettimeofday takes tz argument""... $ac_c" 1>&6
-echo "configure:9271: checking if gettimeofday takes tz argument" >&5
+echo "configure:9147: checking if gettimeofday takes tz argument" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_GETTIMEOFDAY_TZ'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -9276,14 +9152,14 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_GETTIMEOFDAY_TZ=cross
else
cat > conftest.$ac_ext <<EOF
-#line 9280 "configure"
+#line 9156 "configure"
#include "confdefs.h"
#include <sys/time.h>
#include <unistd.h>
main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}
EOF
-if { (eval echo configure:9287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_GETTIMEOFDAY_TZ=yes
else
@@ -9305,62 +9181,9 @@ EOF
fi
-echo $ac_n "checking for C99 vsnprintf""... $ac_c" 1>&6
-echo "configure:9310: checking for C99 vsnprintf" >&5
-if eval "test \"`echo '$''{'samba_cv_HAVE_C99_VSNPRINTF'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
-if test "$cross_compiling" = yes; then
- samba_cv_HAVE_C99_VSNPRINTF=cross
-else
- cat > conftest.$ac_ext <<EOF
-#line 9319 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#include <stdarg.h>
-void foo(const char *format, ...) {
- va_list ap;
- int len;
- char buf[5];
-
- va_start(ap, format);
- len = vsnprintf(0, 0, format, ap);
- va_end(ap);
- if (len != 5) exit(1);
-
- if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
-
- exit(0);
-}
-main() { foo("hello"); }
-
-EOF
-if { (eval echo configure:9341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
- samba_cv_HAVE_C99_VSNPRINTF=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- samba_cv_HAVE_C99_VSNPRINTF=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$samba_cv_HAVE_C99_VSNPRINTF" 1>&6
-if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
- cat >> confdefs.h <<\EOF
-#define HAVE_C99_VSNPRINTF 1
-EOF
-
-fi
echo $ac_n "checking for broken readdir""... $ac_c" 1>&6
-echo "configure:9364: checking for broken readdir" >&5
+echo "configure:9187: checking for broken readdir" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_READDIR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -9369,7 +9192,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_BROKEN_READDIR=cross
else
cat > conftest.$ac_ext <<EOF
-#line 9373 "configure"
+#line 9196 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <dirent.h>
@@ -9377,7 +9200,7 @@ main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
di->d_name[0] == 0) exit(0); exit(1);}
EOF
-if { (eval echo configure:9381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_BROKEN_READDIR=yes
else
@@ -9400,13 +9223,13 @@ EOF
fi
echo $ac_n "checking for utimbuf""... $ac_c" 1>&6
-echo "configure:9404: checking for utimbuf" >&5
+echo "configure:9227: checking for utimbuf" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UTIMBUF'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9410 "configure"
+#line 9233 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utime.h>
@@ -9414,7 +9237,7 @@ int main() {
struct utimbuf tbuf; tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));
; return 0; }
EOF
-if { (eval echo configure:9418: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9241: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UTIMBUF=yes
else
@@ -9438,12 +9261,12 @@ fi
for ac_func in pututline pututxline updwtmp updwtmpx getutmpx
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9442: checking for $ac_func" >&5
+echo "configure:9265: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9447 "configure"
+#line 9270 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9466,7 +9289,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9492,13 +9315,13 @@ done
echo $ac_n "checking for ut_name in utmp""... $ac_c" 1>&6
-echo "configure:9496: checking for ut_name in utmp" >&5
+echo "configure:9319: checking for ut_name in utmp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_NAME'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9502 "configure"
+#line 9325 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9506,7 +9329,7 @@ int main() {
struct utmp ut; ut.ut_name[0] = 'a';
; return 0; }
EOF
-if { (eval echo configure:9510: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9333: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UT_UT_NAME=yes
else
@@ -9527,13 +9350,13 @@ EOF
fi
echo $ac_n "checking for ut_user in utmp""... $ac_c" 1>&6
-echo "configure:9531: checking for ut_user in utmp" >&5
+echo "configure:9354: checking for ut_user in utmp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_USER'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9537 "configure"
+#line 9360 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9541,7 +9364,7 @@ int main() {
struct utmp ut; ut.ut_user[0] = 'a';
; return 0; }
EOF
-if { (eval echo configure:9545: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9368: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UT_UT_USER=yes
else
@@ -9562,13 +9385,13 @@ EOF
fi
echo $ac_n "checking for ut_id in utmp""... $ac_c" 1>&6
-echo "configure:9566: checking for ut_id in utmp" >&5
+echo "configure:9389: checking for ut_id in utmp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ID'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9572 "configure"
+#line 9395 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9576,7 +9399,7 @@ int main() {
struct utmp ut; ut.ut_id[0] = 'a';
; return 0; }
EOF
-if { (eval echo configure:9580: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9403: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UT_UT_ID=yes
else
@@ -9597,13 +9420,13 @@ EOF
fi
echo $ac_n "checking for ut_host in utmp""... $ac_c" 1>&6
-echo "configure:9601: checking for ut_host in utmp" >&5
+echo "configure:9424: checking for ut_host in utmp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_HOST'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9607 "configure"
+#line 9430 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9611,7 +9434,7 @@ int main() {
struct utmp ut; ut.ut_host[0] = 'a';
; return 0; }
EOF
-if { (eval echo configure:9615: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9438: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UT_UT_HOST=yes
else
@@ -9632,13 +9455,13 @@ EOF
fi
echo $ac_n "checking for ut_time in utmp""... $ac_c" 1>&6
-echo "configure:9636: checking for ut_time in utmp" >&5
+echo "configure:9459: checking for ut_time in utmp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TIME'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9642 "configure"
+#line 9465 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9646,7 +9469,7 @@ int main() {
struct utmp ut; time_t t; ut.ut_time = t;
; return 0; }
EOF
-if { (eval echo configure:9650: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9473: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UT_UT_TIME=yes
else
@@ -9667,13 +9490,13 @@ EOF
fi
echo $ac_n "checking for ut_tv in utmp""... $ac_c" 1>&6
-echo "configure:9671: checking for ut_tv in utmp" >&5
+echo "configure:9494: checking for ut_tv in utmp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TV'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9677 "configure"
+#line 9500 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9681,7 +9504,7 @@ int main() {
struct utmp ut; struct timeval tv; ut.ut_tv = tv;
; return 0; }
EOF
-if { (eval echo configure:9685: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9508: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UT_UT_TV=yes
else
@@ -9702,13 +9525,13 @@ EOF
fi
echo $ac_n "checking for ut_type in utmp""... $ac_c" 1>&6
-echo "configure:9706: checking for ut_type in utmp" >&5
+echo "configure:9529: checking for ut_type in utmp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_TYPE'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9712 "configure"
+#line 9535 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9716,7 +9539,7 @@ int main() {
struct utmp ut; ut.ut_type = 0;
; return 0; }
EOF
-if { (eval echo configure:9720: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9543: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UT_UT_TYPE=yes
else
@@ -9737,13 +9560,13 @@ EOF
fi
echo $ac_n "checking for ut_pid in utmp""... $ac_c" 1>&6
-echo "configure:9741: checking for ut_pid in utmp" >&5
+echo "configure:9564: checking for ut_pid in utmp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_PID'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9747 "configure"
+#line 9570 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9751,7 +9574,7 @@ int main() {
struct utmp ut; ut.ut_pid = 0;
; return 0; }
EOF
-if { (eval echo configure:9755: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9578: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UT_UT_PID=yes
else
@@ -9772,13 +9595,13 @@ EOF
fi
echo $ac_n "checking for ut_exit in utmp""... $ac_c" 1>&6
-echo "configure:9776: checking for ut_exit in utmp" >&5
+echo "configure:9599: checking for ut_exit in utmp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_EXIT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9782 "configure"
+#line 9605 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9786,7 +9609,7 @@ int main() {
struct utmp ut; ut.ut_exit.e_exit = 0;
; return 0; }
EOF
-if { (eval echo configure:9790: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9613: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UT_UT_EXIT=yes
else
@@ -9807,13 +9630,13 @@ EOF
fi
echo $ac_n "checking for ut_addr in utmp""... $ac_c" 1>&6
-echo "configure:9811: checking for ut_addr in utmp" >&5
+echo "configure:9634: checking for ut_addr in utmp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UT_UT_ADDR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9817 "configure"
+#line 9640 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9821,7 +9644,7 @@ int main() {
struct utmp ut; ut.ut_addr = 0;
; return 0; }
EOF
-if { (eval echo configure:9825: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9648: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UT_UT_ADDR=yes
else
@@ -9843,13 +9666,13 @@ fi
if test x$ac_cv_func_pututline = xyes ; then
echo $ac_n "checking whether pututline returns pointer""... $ac_c" 1>&6
-echo "configure:9847: checking whether pututline returns pointer" >&5
+echo "configure:9670: checking whether pututline returns pointer" >&5
if eval "test \"`echo '$''{'samba_cv_PUTUTLINE_RETURNS_UTMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9853 "configure"
+#line 9676 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmp.h>
@@ -9857,7 +9680,7 @@ int main() {
struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);
; return 0; }
EOF
-if { (eval echo configure:9861: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9684: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_PUTUTLINE_RETURNS_UTMP=yes
else
@@ -9879,13 +9702,13 @@ EOF
fi
echo $ac_n "checking for ut_syslen in utmpx""... $ac_c" 1>&6
-echo "configure:9883: checking for ut_syslen in utmpx" >&5
+echo "configure:9706: checking for ut_syslen in utmpx" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UX_UT_SYSLEN'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9889 "configure"
+#line 9712 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <utmpx.h>
@@ -9893,7 +9716,7 @@ int main() {
struct utmpx ux; ux.ut_syslen = 0;
; return 0; }
EOF
-if { (eval echo configure:9897: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9720: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UX_UT_SYSLEN=yes
else
@@ -9914,7 +9737,7 @@ EOF
fi
echo $ac_n "checking for Linux kernel oplocks""... $ac_c" 1>&6
-echo "configure:9918: checking for Linux kernel oplocks" >&5
+echo "configure:9741: checking for Linux kernel oplocks" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_LINUX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -9923,7 +9746,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross
else
cat > conftest.$ac_ext <<EOF
-#line 9927 "configure"
+#line 9750 "configure"
#include "confdefs.h"
#include <sys/types.h>
@@ -9937,7 +9760,7 @@ main() {
}
EOF
-if { (eval echo configure:9941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes
else
@@ -9960,7 +9783,7 @@ EOF
fi
echo $ac_n "checking for kernel change notify support""... $ac_c" 1>&6
-echo "configure:9964: checking for kernel change notify support" >&5
+echo "configure:9787: checking for kernel change notify support" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_CHANGE_NOTIFY'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -9969,7 +9792,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross
else
cat > conftest.$ac_ext <<EOF
-#line 9973 "configure"
+#line 9796 "configure"
#include "confdefs.h"
#include <sys/types.h>
@@ -9983,7 +9806,7 @@ main() {
}
EOF
-if { (eval echo configure:9987: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes
else
@@ -10006,7 +9829,7 @@ EOF
fi
echo $ac_n "checking for kernel share modes""... $ac_c" 1>&6
-echo "configure:10010: checking for kernel share modes" >&5
+echo "configure:9833: checking for kernel share modes" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_SHARE_MODES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10015,7 +9838,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_KERNEL_SHARE_MODES=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10019 "configure"
+#line 9842 "configure"
#include "confdefs.h"
#include <sys/types.h>
@@ -10031,7 +9854,7 @@ main() {
}
EOF
-if { (eval echo configure:10035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_KERNEL_SHARE_MODES=yes
else
@@ -10057,13 +9880,13 @@ fi
echo $ac_n "checking for IRIX kernel oplock type definitions""... $ac_c" 1>&6
-echo "configure:10061: checking for IRIX kernel oplock type definitions" >&5
+echo "configure:9884: checking for IRIX kernel oplock type definitions" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_KERNEL_OPLOCKS_IRIX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10067 "configure"
+#line 9890 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <fcntl.h>
@@ -10071,7 +9894,7 @@ int main() {
oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;
; return 0; }
EOF
-if { (eval echo configure:10075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9898: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes
else
@@ -10092,7 +9915,7 @@ EOF
fi
echo $ac_n "checking for irix specific capabilities""... $ac_c" 1>&6
-echo "configure:10096: checking for irix specific capabilities" >&5
+echo "configure:9919: checking for irix specific capabilities" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10101,7 +9924,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10105 "configure"
+#line 9928 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/capability.h>
@@ -10116,7 +9939,7 @@ main() {
}
EOF
-if { (eval echo configure:10120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes
else
@@ -10144,13 +9967,13 @@ fi
#
echo $ac_n "checking for int16 typedef included by rpc/rpc.h""... $ac_c" 1>&6
-echo "configure:10148: checking for int16 typedef included by rpc/rpc.h" >&5
+echo "configure:9971: checking for int16 typedef included by rpc/rpc.h" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_INT16_FROM_RPC_RPC_H'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10154 "configure"
+#line 9977 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if defined(HAVE_RPC_RPC_H)
@@ -10160,7 +9983,7 @@ int main() {
int16 testvar;
; return 0; }
EOF
-if { (eval echo configure:10164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9987: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes
else
@@ -10181,13 +10004,13 @@ EOF
fi
echo $ac_n "checking for uint16 typedef included by rpc/rpc.h""... $ac_c" 1>&6
-echo "configure:10185: checking for uint16 typedef included by rpc/rpc.h" >&5
+echo "configure:10008: checking for uint16 typedef included by rpc/rpc.h" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UINT16_FROM_RPC_RPC_H'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10191 "configure"
+#line 10014 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if defined(HAVE_RPC_RPC_H)
@@ -10197,7 +10020,7 @@ int main() {
uint16 testvar;
; return 0; }
EOF
-if { (eval echo configure:10201: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10024: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes
else
@@ -10218,13 +10041,13 @@ EOF
fi
echo $ac_n "checking for int32 typedef included by rpc/rpc.h""... $ac_c" 1>&6
-echo "configure:10222: checking for int32 typedef included by rpc/rpc.h" >&5
+echo "configure:10045: checking for int32 typedef included by rpc/rpc.h" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_INT32_FROM_RPC_RPC_H'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10228 "configure"
+#line 10051 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if defined(HAVE_RPC_RPC_H)
@@ -10234,7 +10057,7 @@ int main() {
int32 testvar;
; return 0; }
EOF
-if { (eval echo configure:10238: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10061: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes
else
@@ -10255,13 +10078,13 @@ EOF
fi
echo $ac_n "checking for uint32 typedef included by rpc/rpc.h""... $ac_c" 1>&6
-echo "configure:10259: checking for uint32 typedef included by rpc/rpc.h" >&5
+echo "configure:10082: checking for uint32 typedef included by rpc/rpc.h" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_UINT32_FROM_RPC_RPC_H'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10265 "configure"
+#line 10088 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if defined(HAVE_RPC_RPC_H)
@@ -10271,7 +10094,7 @@ int main() {
uint32 testvar;
; return 0; }
EOF
-if { (eval echo configure:10275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes
else
@@ -10293,13 +10116,13 @@ fi
echo $ac_n "checking for conflicting AUTH_ERROR define in rpc/rpc.h""... $ac_c" 1>&6
-echo "configure:10297: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5
+echo "configure:10120: checking for conflicting AUTH_ERROR define in rpc/rpc.h" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10303 "configure"
+#line 10126 "configure"
#include "confdefs.h"
#include <sys/types.h>
#ifdef HAVE_SYS_SECURITY_H
@@ -10313,7 +10136,7 @@ int main() {
int testvar;
; return 0; }
EOF
-if { (eval echo configure:10317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10140: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no
else
@@ -10334,16 +10157,16 @@ EOF
fi
echo $ac_n "checking for test routines""... $ac_c" 1>&6
-echo "configure:10338: checking for test routines" >&5
+echo "configure:10161: checking for test routines" >&5
if test "$cross_compiling" = yes; then
echo "configure: warning: cannot run when cross-compiling" 1>&2
else
cat > conftest.$ac_ext <<EOF
-#line 10343 "configure"
+#line 10166 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/trivial.c"
EOF
-if { (eval echo configure:10347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
echo "$ac_t""yes" 1>&6
else
@@ -10357,7 +10180,7 @@ fi
echo $ac_n "checking for ftruncate extend""... $ac_c" 1>&6
-echo "configure:10361: checking for ftruncate extend" >&5
+echo "configure:10184: checking for ftruncate extend" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_FTRUNCATE_EXTEND'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10366,11 +10189,11 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_FTRUNCATE_EXTEND=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10370 "configure"
+#line 10193 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/ftruncate.c"
EOF
-if { (eval echo configure:10374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10197: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_FTRUNCATE_EXTEND=yes
else
@@ -10393,7 +10216,7 @@ EOF
fi
echo $ac_n "checking for broken getgroups""... $ac_c" 1>&6
-echo "configure:10397: checking for broken getgroups" >&5
+echo "configure:10220: checking for broken getgroups" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_GETGROUPS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10402,11 +10225,11 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_BROKEN_GETGROUPS=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10406 "configure"
+#line 10229 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/getgroups.c"
EOF
-if { (eval echo configure:10410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_BROKEN_GETGROUPS=yes
else
@@ -10429,15 +10252,15 @@ EOF
fi
echo $ac_n "checking whether getpass should be replaced""... $ac_c" 1>&6
-echo "configure:10433: checking whether getpass should be replaced" >&5
+echo "configure:10256: checking whether getpass should be replaced" >&5
if eval "test \"`echo '$''{'samba_cv_REPLACE_GETPASS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
SAVE_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/smbwrapper"
+CPPFLAGS="$CPPFLAGS -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/smbwrapper"
cat > conftest.$ac_ext <<EOF
-#line 10441 "configure"
+#line 10264 "configure"
#include "confdefs.h"
#define REPLACE_GETPASS 1
@@ -10450,7 +10273,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:10454: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10277: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_REPLACE_GETPASS=yes
else
@@ -10473,7 +10296,7 @@ EOF
fi
echo $ac_n "checking for broken inet_ntoa""... $ac_c" 1>&6
-echo "configure:10477: checking for broken inet_ntoa" >&5
+echo "configure:10300: checking for broken inet_ntoa" >&5
if eval "test \"`echo '$''{'samba_cv_REPLACE_INET_NTOA'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10482,7 +10305,7 @@ if test "$cross_compiling" = yes; then
samba_cv_REPLACE_INET_NTOA=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10486 "configure"
+#line 10309 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -10496,7 +10319,7 @@ if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); }
exit(1);}
EOF
-if { (eval echo configure:10500: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_REPLACE_INET_NTOA=yes
else
@@ -10519,7 +10342,7 @@ EOF
fi
echo $ac_n "checking for secure mkstemp""... $ac_c" 1>&6
-echo "configure:10523: checking for secure mkstemp" >&5
+echo "configure:10346: checking for secure mkstemp" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_SECURE_MKSTEMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10528,7 +10351,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_SECURE_MKSTEMP=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10532 "configure"
+#line 10355 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <sys/types.h>
@@ -10545,7 +10368,7 @@ main() {
exit(0);
}
EOF
-if { (eval echo configure:10549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_SECURE_MKSTEMP=yes
else
@@ -10568,7 +10391,7 @@ EOF
fi
echo $ac_n "checking for sysconf(_SC_NGROUPS_MAX)""... $ac_c" 1>&6
-echo "configure:10572: checking for sysconf(_SC_NGROUPS_MAX)" >&5
+echo "configure:10395: checking for sysconf(_SC_NGROUPS_MAX)" >&5
if eval "test \"`echo '$''{'samba_cv_SYSCONF_SC_NGROUPS_MAX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10577,12 +10400,12 @@ if test "$cross_compiling" = yes; then
samba_cv_SYSCONF_SC_NGROUPS_MAX=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10581 "configure"
+#line 10404 "configure"
#include "confdefs.h"
#include <unistd.h>
main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); }
EOF
-if { (eval echo configure:10586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_SYSCONF_SC_NGROUPS_MAX=yes
else
@@ -10605,7 +10428,7 @@ EOF
fi
echo $ac_n "checking for root""... $ac_c" 1>&6
-echo "configure:10609: checking for root" >&5
+echo "configure:10432: checking for root" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_ROOT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10614,11 +10437,11 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_ROOT=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10618 "configure"
+#line 10441 "configure"
#include "confdefs.h"
main() { exit(getuid() != 0); }
EOF
-if { (eval echo configure:10622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_ROOT=yes
else
@@ -10646,7 +10469,7 @@ fi
# look for a method of finding the list of network interfaces
iface=no;
echo $ac_n "checking for iface AIX""... $ac_c" 1>&6
-echo "configure:10650: checking for iface AIX" >&5
+echo "configure:10473: checking for iface AIX" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_AIX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10655,7 +10478,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_IFACE_AIX=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10659 "configure"
+#line 10482 "configure"
#include "confdefs.h"
#define HAVE_IFACE_AIX 1
@@ -10663,7 +10486,7 @@ else
#include "confdefs.h"
#include "${srcdir-.}/lib/interfaces.c"
EOF
-if { (eval echo configure:10667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10490: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_IFACE_AIX=yes
else
@@ -10687,7 +10510,7 @@ fi
if test $iface = no; then
echo $ac_n "checking for iface ifconf""... $ac_c" 1>&6
-echo "configure:10691: checking for iface ifconf" >&5
+echo "configure:10514: checking for iface ifconf" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFCONF'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10696,7 +10519,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_IFACE_IFCONF=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10700 "configure"
+#line 10523 "configure"
#include "confdefs.h"
#define HAVE_IFACE_IFCONF 1
@@ -10704,7 +10527,7 @@ else
#include "confdefs.h"
#include "${srcdir-.}/lib/interfaces.c"
EOF
-if { (eval echo configure:10708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10531: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_IFACE_IFCONF=yes
else
@@ -10729,7 +10552,7 @@ fi
if test $iface = no; then
echo $ac_n "checking for iface ifreq""... $ac_c" 1>&6
-echo "configure:10733: checking for iface ifreq" >&5
+echo "configure:10556: checking for iface ifreq" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_IFACE_IFREQ'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10738,7 +10561,7 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_IFACE_IFREQ=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10742 "configure"
+#line 10565 "configure"
#include "confdefs.h"
#define HAVE_IFACE_IFREQ 1
@@ -10746,7 +10569,7 @@ else
#include "confdefs.h"
#include "${srcdir-.}/lib/interfaces.c"
EOF
-if { (eval echo configure:10750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_IFACE_IFREQ=yes
else
@@ -10775,7 +10598,7 @@ fi
seteuid=no;
if test $seteuid = no; then
echo $ac_n "checking for setresuid""... $ac_c" 1>&6
-echo "configure:10779: checking for setresuid" >&5
+echo "configure:10602: checking for setresuid" >&5
if eval "test \"`echo '$''{'samba_cv_USE_SETRESUID'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10784,7 +10607,7 @@ if test "$cross_compiling" = yes; then
samba_cv_USE_SETRESUID=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10788 "configure"
+#line 10611 "configure"
#include "confdefs.h"
#define AUTOCONF_TEST 1
@@ -10792,7 +10615,7 @@ else
#include "confdefs.h"
#include "${srcdir-.}/lib/util_sec.c"
EOF
-if { (eval echo configure:10796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_USE_SETRESUID=yes
else
@@ -10818,7 +10641,7 @@ fi
if test $seteuid = no; then
echo $ac_n "checking for setreuid""... $ac_c" 1>&6
-echo "configure:10822: checking for setreuid" >&5
+echo "configure:10645: checking for setreuid" >&5
if eval "test \"`echo '$''{'samba_cv_USE_SETREUID'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10827,7 +10650,7 @@ if test "$cross_compiling" = yes; then
samba_cv_USE_SETREUID=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10831 "configure"
+#line 10654 "configure"
#include "confdefs.h"
#define AUTOCONF_TEST 1
@@ -10835,7 +10658,7 @@ else
#include "confdefs.h"
#include "${srcdir-.}/lib/util_sec.c"
EOF
-if { (eval echo configure:10839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10662: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_USE_SETREUID=yes
else
@@ -10860,7 +10683,7 @@ fi
if test $seteuid = no; then
echo $ac_n "checking for seteuid""... $ac_c" 1>&6
-echo "configure:10864: checking for seteuid" >&5
+echo "configure:10687: checking for seteuid" >&5
if eval "test \"`echo '$''{'samba_cv_USE_SETEUID'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10869,7 +10692,7 @@ if test "$cross_compiling" = yes; then
samba_cv_USE_SETEUID=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10873 "configure"
+#line 10696 "configure"
#include "confdefs.h"
#define AUTOCONF_TEST 1
@@ -10877,7 +10700,7 @@ else
#include "confdefs.h"
#include "${srcdir-.}/lib/util_sec.c"
EOF
-if { (eval echo configure:10881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10704: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_USE_SETEUID=yes
else
@@ -10902,7 +10725,7 @@ fi
if test $seteuid = no; then
echo $ac_n "checking for setuidx""... $ac_c" 1>&6
-echo "configure:10906: checking for setuidx" >&5
+echo "configure:10729: checking for setuidx" >&5
if eval "test \"`echo '$''{'samba_cv_USE_SETUIDX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10911,7 +10734,7 @@ if test "$cross_compiling" = yes; then
samba_cv_USE_SETUIDX=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10915 "configure"
+#line 10738 "configure"
#include "confdefs.h"
#define AUTOCONF_TEST 1
@@ -10919,7 +10742,7 @@ else
#include "confdefs.h"
#include "${srcdir-.}/lib/util_sec.c"
EOF
-if { (eval echo configure:10923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_USE_SETUIDX=yes
else
@@ -10944,7 +10767,7 @@ fi
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:10948: checking for working mmap" >&5
+echo "configure:10771: checking for working mmap" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_MMAP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10953,11 +10776,11 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_MMAP=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10957 "configure"
+#line 10780 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/shared_mmap.c"
EOF
-if { (eval echo configure:10961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10784: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_MMAP=yes
else
@@ -10980,7 +10803,7 @@ EOF
fi
echo $ac_n "checking for ftruncate needs root""... $ac_c" 1>&6
-echo "configure:10984: checking for ftruncate needs root" >&5
+echo "configure:10807: checking for ftruncate needs root" >&5
if eval "test \"`echo '$''{'samba_cv_FTRUNCATE_NEEDS_ROOT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -10989,11 +10812,11 @@ if test "$cross_compiling" = yes; then
samba_cv_FTRUNCATE_NEEDS_ROOT=cross
else
cat > conftest.$ac_ext <<EOF
-#line 10993 "configure"
+#line 10816 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/ftruncroot.c"
EOF
-if { (eval echo configure:10997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_FTRUNCATE_NEEDS_ROOT=yes
else
@@ -11016,7 +10839,7 @@ EOF
fi
echo $ac_n "checking for fcntl locking""... $ac_c" 1>&6
-echo "configure:11020: checking for fcntl locking" >&5
+echo "configure:10843: checking for fcntl locking" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_FCNTL_LOCK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -11025,11 +10848,11 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_FCNTL_LOCK=cross
else
cat > conftest.$ac_ext <<EOF
-#line 11029 "configure"
+#line 10852 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/fcntl_lock.c"
EOF
-if { (eval echo configure:11033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_FCNTL_LOCK=yes
else
@@ -11052,7 +10875,7 @@ EOF
fi
echo $ac_n "checking for broken (glibc2.1/x86) 64 bit fcntl locking""... $ac_c" 1>&6
-echo "configure:11056: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5
+echo "configure:10879: checking for broken (glibc2.1/x86) 64 bit fcntl locking" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_BROKEN_FCNTL64_LOCKS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -11061,11 +10884,11 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross
else
cat > conftest.$ac_ext <<EOF
-#line 11065 "configure"
+#line 10888 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/fcntl_lock64.c"
EOF
-if { (eval echo configure:11069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes
else
@@ -11090,7 +10913,7 @@ else
echo $ac_n "checking for 64 bit fcntl locking""... $ac_c" 1>&6
-echo "configure:11094: checking for 64 bit fcntl locking" >&5
+echo "configure:10917: checking for 64 bit fcntl locking" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_STRUCT_FLOCK64'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -11099,7 +10922,7 @@ else
samba_cv_HAVE_STRUCT_FLOCK64=cross
else
cat > conftest.$ac_ext <<EOF
-#line 11103 "configure"
+#line 10926 "configure"
#include "confdefs.h"
#if defined(HAVE_UNISTD_H)
@@ -11123,7 +10946,7 @@ exit(1);
#endif
}
EOF
-if { (eval echo configure:11127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_STRUCT_FLOCK64=yes
else
@@ -11148,7 +10971,7 @@ EOF
fi
echo $ac_n "checking for a crypt that needs truncated salt""... $ac_c" 1>&6
-echo "configure:11152: checking for a crypt that needs truncated salt" >&5
+echo "configure:10975: checking for a crypt that needs truncated salt" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_TRUNCATED_SALT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -11157,11 +10980,11 @@ if test "$cross_compiling" = yes; then
samba_cv_HAVE_TRUNCATED_SALT=cross
else
cat > conftest.$ac_ext <<EOF
-#line 11161 "configure"
+#line 10984 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/crypttest.c"
EOF
-if { (eval echo configure:11165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
samba_cv_HAVE_TRUNCATED_SALT=no
else
@@ -11184,13 +11007,13 @@ EOF
fi
echo $ac_n "checking for broken nisplus include files""... $ac_c" 1>&6
-echo "configure:11188: checking for broken nisplus include files" >&5
+echo "configure:11011: checking for broken nisplus include files" >&5
if eval "test \"`echo '$''{'samba_cv_BROKEN_NISPLUS_INCLUDE_FILES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11194 "configure"
+#line 11017 "configure"
#include "confdefs.h"
#include <sys/acl.h>
#if defined(HAVE_RPCSVC_NIS_H)
@@ -11200,7 +11023,7 @@ int main() {
return 0;
; return 0; }
EOF
-if { (eval echo configure:11204: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11027: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no
else
@@ -11224,7 +11047,7 @@ fi
#################################################
# check for smbwrapper support
echo $ac_n "checking whether to use smbwrapper""... $ac_c" 1>&6
-echo "configure:11228: checking whether to use smbwrapper" >&5
+echo "configure:11051: checking whether to use smbwrapper" >&5
# Check whether --with-smbwrapper or --without-smbwrapper was given.
if test "${with_smbwrapper+set}" = set; then
withval="$with_smbwrapper"
@@ -11268,7 +11091,7 @@ fi
#################################################
# check for the AFS filesystem
echo $ac_n "checking whether to use AFS""... $ac_c" 1>&6
-echo "configure:11272: checking whether to use AFS" >&5
+echo "configure:11095: checking whether to use AFS" >&5
# Check whether --with-afs or --without-afs was given.
if test "${with_afs+set}" = set; then
withval="$with_afs"
@@ -11294,7 +11117,7 @@ fi
#################################################
# check for the DFS auth system
echo $ac_n "checking whether to use DFS auth""... $ac_c" 1>&6
-echo "configure:11298: checking whether to use DFS auth" >&5
+echo "configure:11121: checking whether to use DFS auth" >&5
# Check whether --with-dfs or --without-dfs was given.
if test "${with_dfs+set}" = set; then
withval="$with_dfs"
@@ -11319,7 +11142,7 @@ fi
#################################################
# check for Kerberos IV auth system
echo $ac_n "checking whether to use Kerberos IV""... $ac_c" 1>&6
-echo "configure:11323: checking whether to use Kerberos IV" >&5
+echo "configure:11146: checking whether to use Kerberos IV" >&5
# Check whether --with-krb4 or --without-krb4 was given.
if test "${with_krb4+set}" = set; then
withval="$with_krb4"
@@ -11329,7 +11152,7 @@ if test "${with_krb4+set}" = set; then
EOF
echo $ac_n "checking for dn_expand in -lresolv""... $ac_c" 1>&6
-echo "configure:11333: checking for dn_expand in -lresolv" >&5
+echo "configure:11156: checking for dn_expand in -lresolv" >&5
ac_lib_var=`echo resolv'_'dn_expand | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11337,7 +11160,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lresolv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 11341 "configure"
+#line 11164 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -11348,7 +11171,7 @@ int main() {
dn_expand()
; return 0; }
EOF
-if { (eval echo configure:11352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -11387,7 +11210,7 @@ fi
#################################################
# check for Kerberos 5 auth system
echo $ac_n "checking whether to use Kerberos 5""... $ac_c" 1>&6
-echo "configure:11391: checking whether to use Kerberos 5" >&5
+echo "configure:11214: checking whether to use Kerberos 5" >&5
# Check whether --with-krb5 or --without-krb5 was given.
if test "${with_krb5+set}" = set; then
withval="$with_krb5"
@@ -11408,7 +11231,7 @@ fi
#################################################
# check for automount support
echo $ac_n "checking whether to use AUTOMOUNT""... $ac_c" 1>&6
-echo "configure:11412: checking whether to use AUTOMOUNT" >&5
+echo "configure:11235: checking whether to use AUTOMOUNT" >&5
# Check whether --with-automount or --without-automount was given.
if test "${with_automount+set}" = set; then
withval="$with_automount"
@@ -11433,7 +11256,7 @@ fi
#################################################
# check for smbmount support
echo $ac_n "checking whether to use SMBMOUNT""... $ac_c" 1>&6
-echo "configure:11437: checking whether to use SMBMOUNT" >&5
+echo "configure:11260: checking whether to use SMBMOUNT" >&5
# Check whether --with-smbmount or --without-smbmount was given.
if test "${with_smbmount+set}" = set; then
withval="$with_smbmount"
@@ -11461,9 +11284,8 @@ fi
#################################################
# check for a PAM password database
-with_pam_for_crypt=no
echo $ac_n "checking whether to use PAM password database""... $ac_c" 1>&6
-echo "configure:11467: checking whether to use PAM password database" >&5
+echo "configure:11289: checking whether to use PAM password database" >&5
# Check whether --with-pam or --without-pam was given.
if test "${with_pam+set}" = set; then
withval="$with_pam"
@@ -11475,89 +11297,6 @@ if test "${with_pam+set}" = set; then
EOF
LIBS="$LIBS -lpam"
- with_pam_for_crypt=yes
- ;;
- *)
- echo "$ac_t""no" 1>&6
- ;;
- esac
-else
- echo "$ac_t""no" 1>&6
-
-fi
-
-
-# we can't build a pam module if we don't have pam.
-echo $ac_n "checking for pam_get_data in -lpam""... $ac_c" 1>&6
-echo "configure:11493: checking for pam_get_data in -lpam" >&5
-ac_lib_var=`echo pam'_'pam_get_data | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lpam $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 11501 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char pam_get_data();
-
-int main() {
-pam_get_data()
-; return 0; }
-EOF
-if { (eval echo configure:11512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define HAVE_LIBPAM 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-#################################################
-# check for pam_smbpass support
-echo $ac_n "checking whether to use pam_smbpass""... $ac_c" 1>&6
-echo "configure:11539: checking whether to use pam_smbpass" >&5
-# Check whether --with-pam_smbpass or --without-pam_smbpass was given.
-if test "${with_pam_smbpass+set}" = set; then
- withval="$with_pam_smbpass"
- case "$withval" in
- yes)
- echo "$ac_t""yes" 1>&6
-
-# Conditions under which pam_smbpass should not be built.
-
- if test x$PICFLAG = x; then
- echo "$ac_t""No support for PIC code - disabling pam_smbpass" 1>&6
- PAM_MOD=""
- elif test x$ac_cv_lib_pam_pam_get_data = xno; then
- echo "$ac_t""No libpam found -- disabling pam_smbpass" 1>&6
- PAM_MOD=""
- else
- cat >> confdefs.h <<\EOF
-#define WITH_PAM_SMBPASS 1
-EOF
-
- PAM_MOD="bin/pam_smbpass.so"
- fi
;;
*)
echo "$ac_t""no" 1>&6
@@ -11569,115 +11308,6 @@ else
fi
-
-###############################################
-# test for where we get crypt() from, but only
-# if not using PAM
-if test $with_pam_for_crypt = no; then
-for ac_func in crypt
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11581: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 11586 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:11609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-done
-
-if test x"$ac_cv_func_crypt" = x"no"; then
- echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
-echo "configure:11635: checking for crypt in -lcrypt" >&5
-ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lcrypt $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 11643 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char crypt();
-
-int main() {
-crypt()
-; return 0; }
-EOF
-if { (eval echo configure:11654: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="$LIBS -lcrypt";
- cat >> confdefs.h <<\EOF
-#define HAVE_CRYPT 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-fi
-
-
#################################################
# removed until we get the code actually working
# --jeremy
@@ -11724,7 +11354,7 @@ fi
#################################################
# check for a NISPLUS password database
echo $ac_n "checking whether to use NISPLUS password database""... $ac_c" 1>&6
-echo "configure:11728: checking whether to use NISPLUS password database" >&5
+echo "configure:11358: checking whether to use NISPLUS password database" >&5
# Check whether --with-nisplus or --without-nisplus was given.
if test "${with_nisplus+set}" = set; then
withval="$with_nisplus"
@@ -11749,7 +11379,7 @@ fi
#################################################
# check for a NISPLUS_HOME support
echo $ac_n "checking whether to use NISPLUS_HOME""... $ac_c" 1>&6
-echo "configure:11753: checking whether to use NISPLUS_HOME" >&5
+echo "configure:11383: checking whether to use NISPLUS_HOME" >&5
# Check whether --with-nisplus-home or --without-nisplus-home was given.
if test "${with_nisplus_home+set}" = set; then
withval="$with_nisplus_home"
@@ -11774,7 +11404,7 @@ fi
#################################################
# check for the secure socket layer
echo $ac_n "checking whether to use SSL""... $ac_c" 1>&6
-echo "configure:11778: checking whether to use SSL" >&5
+echo "configure:11408: checking whether to use SSL" >&5
# Check whether --with-ssl or --without-ssl was given.
if test "${with_ssl+set}" = set; then
withval="$with_ssl"
@@ -11833,7 +11463,7 @@ fi
#################################################
# check for syslog logging
echo $ac_n "checking whether to use syslog logging""... $ac_c" 1>&6
-echo "configure:11837: checking whether to use syslog logging" >&5
+echo "configure:11467: checking whether to use syslog logging" >&5
# Check whether --with-syslog or --without-syslog was given.
if test "${with_syslog+set}" = set; then
withval="$with_syslog"
@@ -11858,7 +11488,7 @@ fi
#################################################
# check for a shared memory profiling support
echo $ac_n "checking whether to use profiling""... $ac_c" 1>&6
-echo "configure:11862: checking whether to use profiling" >&5
+echo "configure:11492: checking whether to use profiling" >&5
# Check whether --with-profile or --without-profile was given.
if test "${with_profile+set}" = set; then
withval="$with_profile"
@@ -11884,7 +11514,7 @@ fi
#################################################
# check for experimental netatalk resource fork support
echo $ac_n "checking whether to support netatalk""... $ac_c" 1>&6
-echo "configure:11888: checking whether to support netatalk" >&5
+echo "configure:11518: checking whether to support netatalk" >&5
# Check whether --with-netatalk or --without-netatalk was given.
if test "${with_netatalk+set}" = set; then
withval="$with_netatalk"
@@ -11911,7 +11541,7 @@ fi
QUOTAOBJS=smbd/noquotas.o
echo $ac_n "checking whether to support disk-quotas""... $ac_c" 1>&6
-echo "configure:11915: checking whether to support disk-quotas" >&5
+echo "configure:11545: checking whether to support disk-quotas" >&5
# Check whether --with-quotas or --without-quotas was given.
if test "${with_quotas+set}" = set; then
withval="$with_quotas"
@@ -11935,7 +11565,7 @@ fi
# check for experimental utmp accounting
echo $ac_n "checking whether to support utmp accounting""... $ac_c" 1>&6
-echo "configure:11939: checking whether to support utmp accounting" >&5
+echo "configure:11569: checking whether to support utmp accounting" >&5
# Check whether --with-utmp or --without-utmp was given.
if test "${with_utmp+set}" = set; then
withval="$with_utmp"
@@ -11961,7 +11591,7 @@ fi
# check for MS Dfs support
echo $ac_n "checking whether to support Microsoft Dfs""... $ac_c" 1>&6
-echo "configure:11965: checking whether to support Microsoft Dfs" >&5
+echo "configure:11595: checking whether to support Microsoft Dfs" >&5
# Check whether --with-msdfs or --without-msdfs was given.
if test "${with_msdfs+set}" = set; then
withval="$with_msdfs"
@@ -11987,7 +11617,7 @@ fi
# check for Samba VFS support
echo $ac_n "checking whether to support the experimantal Samba vfs""... $ac_c" 1>&6
-echo "configure:11991: checking whether to support the experimantal Samba vfs" >&5
+echo "configure:11621: checking whether to support the experimantal Samba vfs" >&5
# Check whether --with-vfs or --without-vfs was given.
if test "${with_vfs+set}" = set; then
withval="$with_vfs"
@@ -12012,14 +11642,14 @@ fi
#################################################
# these tests are taken from the GNU fileutils package
echo "checking how to get filesystem space usage" 1>&6
-echo "configure:12016: checking how to get filesystem space usage" >&5
+echo "configure:11646: checking how to get filesystem space usage" >&5
space=no
# Test for statvfs64.
if test $space = no; then
# SVR4
echo $ac_n "checking statvfs64 function (SVR4)""... $ac_c" 1>&6
-echo "configure:12023: checking statvfs64 function (SVR4)" >&5
+echo "configure:11653: checking statvfs64 function (SVR4)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs64'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -12027,7 +11657,7 @@ else
fu_cv_sys_stat_statvfs64=cross
else
cat > conftest.$ac_ext <<EOF
-#line 12031 "configure"
+#line 11661 "configure"
#include "confdefs.h"
#if defined(HAVE_UNISTD_H)
@@ -12041,7 +11671,7 @@ else
exit (statvfs64 (".", &fsd));
}
EOF
-if { (eval echo configure:12045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:11675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_statvfs64=yes
else
@@ -12074,12 +11704,12 @@ fi
if test $space = no; then
# SVR4
echo $ac_n "checking statvfs function (SVR4)""... $ac_c" 1>&6
-echo "configure:12078: checking statvfs function (SVR4)" >&5
+echo "configure:11708: checking statvfs function (SVR4)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statvfs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12083 "configure"
+#line 11713 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/statvfs.h>
@@ -12087,7 +11717,7 @@ int main() {
struct statvfs fsd; statvfs (0, &fsd);
; return 0; }
EOF
-if { (eval echo configure:12091: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
fu_cv_sys_stat_statvfs=yes
else
@@ -12112,7 +11742,7 @@ fi
if test $space = no; then
# DEC Alpha running OSF/1
echo $ac_n "checking for 3-argument statfs function (DEC OSF/1)""... $ac_c" 1>&6
-echo "configure:12116: checking for 3-argument statfs function (DEC OSF/1)" >&5
+echo "configure:11746: checking for 3-argument statfs function (DEC OSF/1)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs3_osf1'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -12120,7 +11750,7 @@ else
fu_cv_sys_stat_statfs3_osf1=no
else
cat > conftest.$ac_ext <<EOF
-#line 12124 "configure"
+#line 11754 "configure"
#include "confdefs.h"
#include <sys/param.h>
@@ -12133,7 +11763,7 @@ else
exit (statfs (".", &fsd, sizeof (struct statfs)));
}
EOF
-if { (eval echo configure:12137: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:11767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_statfs3_osf1=yes
else
@@ -12160,7 +11790,7 @@ fi
if test $space = no; then
# AIX
echo $ac_n "checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)""... $ac_c" 1>&6
-echo "configure:12164: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5
+echo "configure:11794: checking for two-argument statfs with statfs.bsize member (AIX, 4.3BSD)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_bsize'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -12168,7 +11798,7 @@ else
fu_cv_sys_stat_statfs2_bsize=no
else
cat > conftest.$ac_ext <<EOF
-#line 12172 "configure"
+#line 11802 "configure"
#include "confdefs.h"
#ifdef HAVE_SYS_PARAM_H
@@ -12187,7 +11817,7 @@ else
exit (statfs (".", &fsd));
}
EOF
-if { (eval echo configure:12191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:11821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_statfs2_bsize=yes
else
@@ -12214,7 +11844,7 @@ fi
if test $space = no; then
# SVR3
echo $ac_n "checking for four-argument statfs (AIX-3.2.5, SVR3)""... $ac_c" 1>&6
-echo "configure:12218: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5
+echo "configure:11848: checking for four-argument statfs (AIX-3.2.5, SVR3)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs4'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -12222,7 +11852,7 @@ else
fu_cv_sys_stat_statfs4=no
else
cat > conftest.$ac_ext <<EOF
-#line 12226 "configure"
+#line 11856 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/statfs.h>
@@ -12232,7 +11862,7 @@ else
exit (statfs (".", &fsd, sizeof fsd, 0));
}
EOF
-if { (eval echo configure:12236: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:11866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_statfs4=yes
else
@@ -12259,7 +11889,7 @@ fi
if test $space = no; then
# 4.4BSD and NetBSD
echo $ac_n "checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)""... $ac_c" 1>&6
-echo "configure:12263: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5
+echo "configure:11893: checking for two-argument statfs with statfs.fsize member (4.4BSD and NetBSD)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_statfs2_fsize'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -12267,7 +11897,7 @@ else
fu_cv_sys_stat_statfs2_fsize=no
else
cat > conftest.$ac_ext <<EOF
-#line 12271 "configure"
+#line 11901 "configure"
#include "confdefs.h"
#include <sys/types.h>
#ifdef HAVE_SYS_PARAM_H
@@ -12283,7 +11913,7 @@ else
exit (statfs (".", &fsd));
}
EOF
-if { (eval echo configure:12287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:11917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_statfs2_fsize=yes
else
@@ -12310,7 +11940,7 @@ fi
if test $space = no; then
# Ultrix
echo $ac_n "checking for two-argument statfs with struct fs_data (Ultrix)""... $ac_c" 1>&6
-echo "configure:12314: checking for two-argument statfs with struct fs_data (Ultrix)" >&5
+echo "configure:11944: checking for two-argument statfs with struct fs_data (Ultrix)" >&5
if eval "test \"`echo '$''{'fu_cv_sys_stat_fs_data'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -12318,7 +11948,7 @@ else
fu_cv_sys_stat_fs_data=no
else
cat > conftest.$ac_ext <<EOF
-#line 12322 "configure"
+#line 11952 "configure"
#include "confdefs.h"
#include <sys/types.h>
#ifdef HAVE_SYS_PARAM_H
@@ -12338,7 +11968,7 @@ else
exit (statfs (".", &fsd) != 1);
}
EOF
-if { (eval echo configure:12342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:11972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
fu_cv_sys_stat_fs_data=yes
else
@@ -12371,9 +12001,9 @@ fi
# file support.
#
echo $ac_n "checking checking if large file support can be enabled""... $ac_c" 1>&6
-echo "configure:12375: checking checking if large file support can be enabled" >&5
+echo "configure:12005: checking checking if large file support can be enabled" >&5
cat > conftest.$ac_ext <<EOF
-#line 12377 "configure"
+#line 12007 "configure"
#include "confdefs.h"
#if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
@@ -12386,7 +12016,7 @@ int main() {
int i
; return 0; }
EOF
-if { (eval echo configure:12390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12020: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes
else
@@ -12453,7 +12083,7 @@ fi
# check for ACL support
echo $ac_n "checking whether to support ACLs""... $ac_c" 1>&6
-echo "configure:12457: checking whether to support ACLs" >&5
+echo "configure:12087: checking whether to support ACLs" >&5
# Check whether --with-acl-support or --without-acl-support was given.
if test "${with_acl_support+set}" = set; then
withval="$with_acl_support"
@@ -12491,7 +12121,7 @@ EOF
;;
*)
echo $ac_n "checking for acl_get_file in -lacl""... $ac_c" 1>&6
-echo "configure:12495: checking for acl_get_file in -lacl" >&5
+echo "configure:12125: checking for acl_get_file in -lacl" >&5
ac_lib_var=`echo acl'_'acl_get_file | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12499,7 +12129,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lacl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 12503 "configure"
+#line 12133 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -12510,7 +12140,7 @@ int main() {
acl_get_file()
; return 0; }
EOF
-if { (eval echo configure:12514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -12538,13 +12168,13 @@ else
fi
echo $ac_n "checking for ACL support""... $ac_c" 1>&6
-echo "configure:12542: checking for ACL support" >&5
+echo "configure:12172: checking for ACL support" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_POSIX_ACLS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12548 "configure"
+#line 12178 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/acl.h>
@@ -12552,7 +12182,7 @@ int main() {
acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);
; return 0; }
EOF
-if { (eval echo configure:12556: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
samba_cv_HAVE_POSIX_ACLS=yes
else
@@ -12572,13 +12202,13 @@ echo "$ac_t""$samba_cv_HAVE_POSIX_ACLS" 1>&6
EOF
echo $ac_n "checking for acl_get_perm_np""... $ac_c" 1>&6
-echo "configure:12576: checking for acl_get_perm_np" >&5
+echo "configure:12206: checking for acl_get_perm_np" >&5
if eval "test \"`echo '$''{'samba_cv_HAVE_ACL_GET_PERM_NP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12582 "configure"
+#line 12212 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/acl.h>
@@ -12586,7 +12216,7 @@ int main() {
acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);
; return 0; }
EOF
-if { (eval echo configure:12590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
samba_cv_HAVE_ACL_GET_PERM_NP=yes
else
@@ -12606,6 +12236,41 @@ EOF
fi
fi
+ echo $ac_n "checking for XFS ACL support""... $ac_c" 1>&6
+echo "configure:12241: checking for XFS ACL support" >&5
+if eval "test \"`echo '$''{'samba_cv_HAVE_XFS_ACLS'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cat > conftest.$ac_ext <<EOF
+#line 12247 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <acl/acl.h>
+int main() {
+ char test_str[13] = SGI_ACL_FILE;
+; return 0; }
+EOF
+if { (eval echo configure:12255: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ samba_cv_HAVE_XFS_ACLS=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ samba_cv_XFS_POSIX_ACLS=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$samba_cv_HAVE_XFS_ACLS" 1>&6
+ if test x"$samba_cv_HAVE_XFS_ACLS" = x"yes"; then
+ echo "$ac_t""Using XFS ACLs" 1>&6
+ cat >> confdefs.h <<\EOF
+#define HAVE_XFS_ACLS 1
+EOF
+
+ fi
;;
esac
;;
@@ -12640,11 +12305,11 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 12644 "configure"
+#line 12309 "configure"
#include "confdefs.h"
#include "${srcdir-.}/tests/summary.c"
EOF
-if { (eval echo configure:12648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:12313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
echo "configure OK";
else
@@ -12803,7 +12468,6 @@ s%@RUNPROG@%$RUNPROG%g
s%@MPROGS@%$MPROGS%g
s%@LDSHFLAGS@%$LDSHFLAGS%g
s%@HOST_OS@%$HOST_OS%g
-s%@PAM_MOD@%$PAM_MOD%g
s%@WRAP@%$WRAP%g
s%@WRAP32@%$WRAP32%g
s%@PICFLAG@%$PICFLAG%g
diff --git a/source/configure.in b/source/configure.in
index 9f628769221..a25300fe856 100644
--- a/source/configure.in
+++ b/source/configure.in
@@ -25,7 +25,7 @@ AC_ARG_WITH(fhs, [ --with-fhs use FHS-compliant paths [default=no]],
#################################################
# set private directory location
AC_ARG_WITH(privatedir,
-[ --with-privatedir=DIR Where to put smbpasswd ($ac_default_prefix/private)],
+[ --with-privatedir=DIR Where to put smbpasswd ($privatedir)],
[ case "$withval" in
yes|no)
#
@@ -41,7 +41,7 @@ AC_ARG_WITH(privatedir,
#################################################
# set lock directory location
AC_ARG_WITH(lockdir,
-[ --with-lockdir=DIR Where to put lock files ($ac_default_prefix/var/locks)],
+[ --with-lockdir=DIR Where to put lock files ($lockdir)],
[ case "$withval" in
yes|no)
#
@@ -57,7 +57,7 @@ AC_ARG_WITH(lockdir,
#################################################
# set SWAT directory location
AC_ARG_WITH(swatdir,
-[ --with-swatdir=DIR Where to put SWAT files ($ac_default_prefix/swat)],
+[ --with-swatdir=DIR Where to put SWAT files ($swatdir)],
[ case "$withval" in
yes|no)
#
@@ -73,7 +73,7 @@ AC_ARG_WITH(swatdir,
#################################################
# set configuration directory location
AC_ARG_WITH(configdir,
-[ --with-configdir=DIR Where to put configuration files (\$libdir)],
+[ --with-configdir=DIR Where to put configuration files ($configdir)],
[ case "$withval" in
yes|no)
#
@@ -89,7 +89,7 @@ AC_ARG_WITH(configdir,
#################################################
# set codepage directory location
AC_ARG_WITH(codepagedir,
-[ --with-codepagedir=DIR Where to put codepage files (\$libdir/codepages)],
+[ --with-codepagedir=DIR Where to put codepage files ($codepagedir)],
[ case "$withval" in
yes|no)
#
@@ -118,7 +118,6 @@ AC_SUBST(RUNPROG)
AC_SUBST(MPROGS)
AC_SUBST(LDSHFLAGS)
AC_SUBST(HOST_OS)
-AC_SUBST(PAM_MOD)
AC_SUBST(WRAP)
AC_SUBST(WRAP32)
AC_SUBST(PICFLAG)
@@ -268,7 +267,7 @@ exit(1);
*linux*)
AC_MSG_CHECKING([for LFS support])
old_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
+ CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
AC_TRY_RUN([
#include <unistd.h>
#include <sys/utsname.h>
@@ -306,7 +305,7 @@ main() {
], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
CPPFLAGS="$old_CPPFLAGS"
if test x$LINUX_LFS_SUPPORT = xyes ; then
- CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
+ CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
fi
AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
;;
@@ -341,12 +340,10 @@ AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS(arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h)
AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h)
AC_CHECK_HEADERS(compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h)
-AC_CHECK_HEADERS(sys/param.h ctype.h sys/un.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/mode.h)
-AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
+AC_CHECK_HEADERS(sys/param.h ctype.h sys/un.h sys/wait.h sys/resource.h sys/ioctl.h sys/mode.h)
+AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h string.h strings.h stdlib.h sys/socket.h)
AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
-AC_CHECK_HEADERS(security/pam_modules.h security/_pam_macros.h)
-
#
# HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
# This causes configure to fail to detect it. Check for shadow separately on HPUX.
@@ -361,10 +358,10 @@ case "$host_os" in
;;
esac
AC_CHECK_HEADERS(shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ip.h)
-AC_CHECK_HEADERS(nss.h nss_common.h sys/security.h security/pam_appl.h security/pam_modules.h)
+AC_CHECK_HEADERS(nss.h sys/security.h security/pam_appl.h)
AC_CHECK_HEADERS(stropts.h poll.h)
AC_CHECK_HEADERS(sys/capability.h syscall.h sys/syscall.h)
-AC_CHECK_HEADERS(sys/acl.h sys/cdefs.h glob.h)
+AC_CHECK_HEADERS(sys/acl.h sys/cdefs.h glob.h acl/acl.h)
# For experimental utmp support (lastlog on some BSD-like systems)
AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
@@ -402,19 +399,6 @@ AC_CHECK_LIB(cups,httpConnect)
AC_CHECK_LIB(dl, dlopen, [LIBS="$LIBS -ldl";
AC_DEFINE(HAVE_LIBDL)])
-AC_CACHE_CHECK([for socklen_t type],samba_cv_socklen_t, [
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#include <sys/socket.h>],[socklen_t i = 0],
- samba_cv_socklen_t=yes,samba_cv_socklen_t=no)])
-if test x"$samba_cv_socklen_t" = x"yes"; then
- AC_DEFINE(HAVE_SOCKLEN_T_TYPE)
-fi
-
AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
AC_TRY_COMPILE([
#include <sys/types.h>
@@ -428,14 +412,28 @@ if test x"$samba_cv_sig_atomic_t" = x"yes"; then
AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE)
fi
-# stupid headers have the functions but no declaration. grrrr.
-AC_HAVE_DECL(errno, [#include <errno.h>])
-AC_HAVE_DECL(setresuid, [#include <unistd.h>])
-AC_HAVE_DECL(setresgid, [#include <unistd.h>])
-AC_HAVE_DECL(asprintf, [#include <stdio.h>])
-AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
-AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
-AC_HAVE_DECL(snprintf, [#include <stdio.h>])
+AC_CACHE_CHECK([for errno in errno.h],samba_cv_errno, [
+ AC_TRY_COMPILE([#include <errno.h>],[int i = errno],
+ samba_cv_errno=yes,samba_cv_have_errno=no)])
+if test x"$samba_cv_errno" = x"yes"; then
+ AC_DEFINE(HAVE_ERRNO_DECL)
+fi
+
+# stupid glibc has the functions but no declaration. grrrr.
+AC_CACHE_CHECK([for setresuid declaration],samba_cv_have_setresuid_decl,[
+ AC_TRY_COMPILE([#include <unistd.h>],[int i = (int)setresuid],
+ samba_cv_have_setresuid_decl=yes,samba_cv_have_setresuid_decl=no)])
+if test x"$samba_cv_have_setresuid_decl" = x"yes"; then
+ AC_DEFINE(HAVE_SETRESUID_DECL)
+fi
+
+# stupid glibc has the functions but no declaration. grrrr.
+AC_CACHE_CHECK([for setresgid declaration],samba_cv_have_setresgid_decl,[
+ AC_TRY_COMPILE([#include <unistd.h>],[int i = (int)setresgid],
+ samba_cv_have_setresgid_decl=yes,samba_cv_have_setresgid_decl=no)])
+if test x"$samba_cv_have_setresgid_decl" = x"yes"; then
+ AC_DEFINE(HAVE_SETRESGID_DECL)
+fi
# and glibc has setresuid under linux but the function does
# nothing until kernel 2.1.44! very dumb.
@@ -461,6 +459,14 @@ fi
AC_FUNC_MEMCMP
###############################################
+# test for where we get crypt() from
+AC_CHECK_FUNCS(crypt)
+if test x"$ac_cv_func_crypt" = x"no"; then
+ AC_CHECK_LIB(crypt, crypt, [LIBS="$LIBS -lcrypt";
+ AC_DEFINE(HAVE_CRYPT)])
+fi
+
+###############################################
# Readline included by default unless explicitly asked not to
test "${with_readline+set}" != "set" && with_readline=yes
@@ -575,13 +581,13 @@ fi
AC_CHECK_FUNCS(waitpid getcwd strdup strtoul strerror chown fchown chmod fchmod chroot)
AC_CHECK_FUNCS(fstat strchr utime utimes getrlimit fsync bzero memset)
-AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
+AC_CHECK_FUNCS(memmove vsnprintf snprintf setsid glob strpbrk pipe crypt16 getauthuid)
AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction innetgr setnetgrent getnetgrent endnetgrent)
AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf)
AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64)
AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64)
AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
-AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
+AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl)
# syscall() is needed for smbwrapper.
AC_CHECK_FUNCS(syscall)
@@ -890,30 +896,6 @@ if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
AC_DEFINE(HAVE_GETTIMEOFDAY_TZ)
fi
-AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
-AC_TRY_RUN([
-#include <sys/types.h>
-#include <stdarg.h>
-void foo(const char *format, ...) {
- va_list ap;
- int len;
- char buf[5];
-
- va_start(ap, format);
- len = vsnprintf(0, 0, format, ap);
- va_end(ap);
- if (len != 5) exit(1);
-
- if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
-
- exit(0);
-}
-main() { foo("hello"); }
-],
-samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
-if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
- AC_DEFINE(HAVE_C99_VSNPRINTF)
-fi
AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
AC_TRY_RUN([#include <sys/types.h>
@@ -1228,7 +1210,7 @@ fi
AC_CACHE_CHECK([whether getpass should be replaced],samba_cv_REPLACE_GETPASS,[
SAVE_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/smbwrapper"
+CPPFLAGS="$CPPFLAGS -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/smbwrapper"
AC_TRY_COMPILE([
#define REPLACE_GETPASS 1
#define NO_CONFIG_H 1
@@ -1623,7 +1605,6 @@ AC_ARG_WITH(smbmount,
#################################################
# check for a PAM password database
-with_pam_for_crypt=no
AC_MSG_CHECKING(whether to use PAM password database)
AC_ARG_WITH(pam,
[ --with-pam Include PAM password database support
@@ -1633,40 +1614,6 @@ AC_ARG_WITH(pam,
AC_MSG_RESULT(yes)
AC_DEFINE(WITH_PAM)
LIBS="$LIBS -lpam"
- with_pam_for_crypt=yes
- ;;
- *)
- AC_MSG_RESULT(no)
- ;;
- esac ],
- AC_MSG_RESULT(no)
-)
-
-# we can't build a pam module if we don't have pam.
-AC_CHECK_LIB(pam, pam_get_data, [AC_DEFINE(HAVE_LIBPAM)])
-
-#################################################
-# check for pam_smbpass support
-AC_MSG_CHECKING(whether to use pam_smbpass)
-AC_ARG_WITH(pam_smbpass,
-[ --with-pam_smbpass Include the smbpass PAM module
- --without-pam_smbpass Don't include the smbpass PAM module (default)],
-[ case "$withval" in
- yes)
- AC_MSG_RESULT(yes)
-
-# Conditions under which pam_smbpass should not be built.
-
- if test x$PICFLAG = x; then
- AC_MSG_RESULT([No support for PIC code - disabling pam_smbpass])
- PAM_MOD=""
- elif test x$ac_cv_lib_pam_pam_get_data = xno; then
- AC_MSG_RESULT([No libpam found -- disabling pam_smbpass])
- PAM_MOD=""
- else
- AC_DEFINE(WITH_PAM_SMBPASS)
- PAM_MOD="bin/pam_smbpass.so"
- fi
;;
*)
AC_MSG_RESULT(no)
@@ -1675,19 +1622,6 @@ AC_ARG_WITH(pam_smbpass,
AC_MSG_RESULT(no)
)
-
-###############################################
-# test for where we get crypt() from, but only
-# if not using PAM
-if test $with_pam_for_crypt = no; then
-AC_CHECK_FUNCS(crypt)
-if test x"$ac_cv_func_crypt" = x"no"; then
- AC_CHECK_LIB(crypt, crypt, [LIBS="$LIBS -lcrypt";
- AC_DEFINE(HAVE_CRYPT)])
-fi
-fi
-
-
#################################################
# removed until we get the code actually working
# --jeremy
@@ -2231,6 +2165,15 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)])
AC_DEFINE(HAVE_ACL_GET_PERM_NP)
fi
fi
+ AC_CACHE_CHECK([for XFS ACL support],samba_cv_HAVE_XFS_ACLS,[
+ AC_TRY_COMPILE([#include <sys/types.h>
+#include <acl/acl.h>],
+[ char test_str[13] = SGI_ACL_FILE; ],
+samba_cv_HAVE_XFS_ACLS=yes,samba_cv_XFS_POSIX_ACLS=no)])
+ if test x"$samba_cv_HAVE_XFS_ACLS" = x"yes"; then
+ AC_MSG_RESULT(Using XFS ACLs)
+ AC_DEFINE(HAVE_XFS_ACLS)
+ fi
;;
esac
;;
diff --git a/source/include/config.h.in b/source/include/config.h.in
index 15a7a856276..66561c9761e 100644
--- a/source/include/config.h.in
+++ b/source/include/config.h.in
@@ -63,7 +63,6 @@
#undef HAVE_VOLATILE
#undef HAVE_BROKEN_READDIR
-#undef HAVE_C99_VSNPRINTF
#undef HAVE_ERRNO_DECL
#undef HAVE_LONGLONG
#undef HAVE_OFF64_T
@@ -71,7 +70,6 @@
#undef HAVE_UNSIGNED_CHAR
#undef HAVE_UTIMBUF
#undef HAVE_SIG_ATOMIC_T_TYPE
-#undef HAVE_SOCKLEN_T_TYPE
#undef ssize_t
#undef ino_t
#undef ssize_t
@@ -126,7 +124,6 @@
#undef WITH_NISPLUS
#undef WITH_TDBPWD
#undef WITH_PAM
-#undef WITH_PAM_SMBPASS
#undef WITH_NISPLUS_HOME
#undef WITH_AUTOMOUNT
#undef WITH_SMBMOUNT
@@ -210,13 +207,9 @@
#undef HAVE_UNIXWARE_ACLS
#undef HAVE_SOLARIS_ACLS
#undef HAVE_IRIX_ACLS
+#undef HAVE_XFS_ACLS
#undef HAVE_AIX_ACLS
#undef HAVE_NO_ACLS
-#undef HAVE_LIBPAM
-#undef HAVE_ASPRINTF_DECL
-#undef HAVE_VASPRINTF_DECL
-#undef HAVE_SNPRINTF_DECL
-#undef HAVE_VSNPRINTF_DECL
/* The number of bytes in a int. */
#undef SIZEOF_INT
@@ -437,9 +430,6 @@
/* Define if you have the _write function. */
#undef HAVE__WRITE
-/* Define if you have the asprintf function. */
-#undef HAVE_ASPRINTF
-
/* Define if you have the atexit function. */
#undef HAVE_ATEXIT
@@ -629,9 +619,6 @@
/* Define if you have the readdir64 function. */
#undef HAVE_READDIR64
-/* Define if you have the readlink function. */
-#undef HAVE_READLINK
-
/* Define if you have the rename function. */
#undef HAVE_RENAME
@@ -710,9 +697,6 @@
/* Define if you have the strtoul function. */
#undef HAVE_STRTOUL
-/* Define if you have the symlink function. */
-#undef HAVE_SYMLINK
-
/* Define if you have the syscall function. */
#undef HAVE_SYSCALL
@@ -734,9 +718,6 @@
/* Define if you have the utimes function. */
#undef HAVE_UTIMES
-/* Define if you have the vasprintf function. */
-#undef HAVE_VASPRINTF
-
/* Define if you have the vsnprintf function. */
#undef HAVE_VSNPRINTF
@@ -746,6 +727,9 @@
/* Define if you have the yp_get_default_domain function. */
#undef HAVE_YP_GET_DEFAULT_DOMAIN
+/* Define if you have the <acl/acl.h> header file. */
+#undef HAVE_ACL_ACL_H
+
/* Define if you have the <arpa/inet.h> header file. */
#undef HAVE_ARPA_INET_H
@@ -800,9 +784,6 @@
/* Define if you have the <nss.h> header file. */
#undef HAVE_NSS_H
-/* Define if you have the <nss_common.h> header file. */
-#undef HAVE_NSS_COMMON_H
-
/* Define if you have the <poll.h> header file. */
#undef HAVE_POLL_H
@@ -827,15 +808,9 @@
/* Define if you have the <rpcsvc/ypclnt.h> header file. */
#undef HAVE_RPCSVC_YPCLNT_H
-/* Define if you have the <security/_pam_macros.h> header file. */
-#undef HAVE_SECURITY__PAM_MACROS_H
-
/* Define if you have the <security/pam_appl.h> header file. */
#undef HAVE_SECURITY_PAM_APPL_H
-/* Define if you have the <security/pam_modules.h> header file. */
-#undef HAVE_SECURITY_PAM_MODULES_H
-
/* Define if you have the <shadow.h> header file. */
#undef HAVE_SHADOW_H
@@ -890,9 +865,6 @@
/* Define if you have the <sys/ioctl.h> header file. */
#undef HAVE_SYS_IOCTL_H
-/* Define if you have the <sys/ipc.h> header file. */
-#undef HAVE_SYS_IPC_H
-
/* Define if you have the <sys/mman.h> header file. */
#undef HAVE_SYS_MMAN_H
@@ -920,9 +892,6 @@
/* Define if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H
-/* Define if you have the <sys/shm.h> header file. */
-#undef HAVE_SYS_SHM_H
-
/* Define if you have the <sys/socket.h> header file. */
#undef HAVE_SYS_SOCKET_H
diff --git a/source/include/debug.h b/source/include/debug.h
index 240da0d6fc5..d2c3b1d37ef 100644
--- a/source/include/debug.h
+++ b/source/include/debug.h
@@ -37,8 +37,21 @@
arguemnts to DEBUG() right. We have got them wrong too often in the
past.
*/
-int Debug1( char *, ... ) PRINTF_ATTRIBUTE(1,2);
-BOOL dbgtext( char *, ... ) PRINTF_ATTRIBUTE(1,2);
+#ifdef HAVE_STDARG_H
+int Debug1( char *, ... )
+#ifdef __GNUC__
+ __attribute__ ((format (__printf__, 1, 2)))
+#endif
+;
+BOOL dbgtext( char *, ... )
+#ifdef __GNUC__
+ __attribute__ ((format (__printf__, 1, 2)))
+#endif
+;
+#else
+int Debug1();
+BOOL dbgtext();
+#endif
/* If we have these macros, we can add additional info to the header. */
#ifdef HAVE_FILE_MACRO
diff --git a/source/include/includes.h b/source/include/includes.h
index 96688c5217e..eef1c1e0bc1 100644
--- a/source/include/includes.h
+++ b/source/include/includes.h
@@ -54,13 +54,6 @@
#endif
#endif
-/* use gcc attribute to check printf fns */
-#ifdef __GNUC__
-#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
-#else
-#define PRINTF_ATTRIBUTE(a1, a2)
-#endif
-
#ifdef RELIANTUNIX
/*
* <unistd.h> has to be included before any other to get
@@ -278,6 +271,10 @@
#include <sys/acl.h>
#endif
+#ifdef HAVE_XFS_ACLS
+#include <acl/acl.h>
+#endif
+
#ifdef HAVE_SYS_FS_S5PARAM_H
#include <sys/fs/s5param.h>
#endif
@@ -353,14 +350,6 @@
#endif
#endif /* HAVE_NETGROUP */
-#if defined(HAVE_SYS_IPC_H)
-#include <sys/ipc.h>
-#endif /* HAVE_SYS_IPC_H */
-
-#if defined(HAVE_SYS_SHM_H)
-#include <sys/shm.h>
-#endif /* HAVE_SYS_SHM_H */
-
/*
* Define VOLATILE if needed.
*/
@@ -372,17 +361,15 @@
#endif
/*
- * Define additional missing types
+ * Define SIG_ATOMIC_T if needed.
*/
-#ifndef HAVE_SIG_ATOMIC_T_TYPE
-typedef int sig_atomic_t;
-#endif
-#ifndef HAVE_SOCKLEN_T_TYPE
-typedef int socklen_t;
+#if defined(HAVE_SIG_ATOMIC_T_TYPE)
+#define SIG_ATOMIC_T sig_atomic_t
+#else
+#define SIG_ATOMIC_T int
#endif
-
#ifndef uchar
#define uchar unsigned char
#endif
@@ -449,9 +436,6 @@ typedef int socklen_t;
#define uint32 unsigned long
#elif (SIZEOF_SHORT == 4)
#define uint32 unsigned short
-#else
-/* uggh - no 32 bit type?? probably a CRAY. just hope this works ... */
-#define uint32 unsigned
#endif
#endif
@@ -638,8 +622,6 @@ extern int errno;
#include "messages.h"
#include "util_list.h"
-#include "util_getent.h"
-
#ifndef UBI_BINTREE_H
#include "ubi_Cache.h"
#endif /* UBI_BINTREE_H */
@@ -662,8 +644,6 @@ extern int errno;
#include "profile.h"
-#include "mapping.h"
-
#ifndef MAXCODEPAGELINES
#define MAXCODEPAGELINES 256
#endif
@@ -698,38 +678,17 @@ typedef struct smb_wpasswd {
#define UNI_XDIGIT 0x8
#define UNI_SPACE 0x10
-#ifdef HAVE_NSS_COMMON_H
-
-/* Sun Solaris */
-
-#include <nss_common.h>
-#include <nss_dbdefs.h>
-#include <nsswitch.h>
-
-typedef nss_status_t NSS_STATUS;
-
-#define NSS_STATUS_SUCCESS NSS_SUCCESS
-#define NSS_STATUS_NOTFOUND NSS_NOTFOUND
-#define NSS_STATUS_UNAVAIL NSS_UNAVAIL
-#define NSS_STATUS_TRYAGAIN NSS_TRYAGAIN
-
-#elif HAVE_NSS_H
-
-/* GNU */
-
+#ifdef HAVE_NSS_H
#include <nss.h>
+#else
-typedef enum nss_status NSS_STATUS;
-
-#else /* Nothing's defined. Neither gnu nor sun */
+/* Minimal needed to compile.. */
-typedef enum
-{
- NSS_STATUS_SUCCESS,
- NSS_STATUS_NOTFOUND,
- NSS_STATUS_UNAVAIL,
- NSS_STATUS_TRYAGAIN
-} NSS_STATUS;
+enum nss_status {
+ NSS_STATUS_SUCCESS,
+ NSS_STATUS_NOTFOUND,
+ NSS_STATUS_UNAVAIL
+};
#endif
@@ -887,9 +846,6 @@ int setresuid(uid_t ruid, uid_t euid, uid_t suid);
#if (defined(USE_SETRESUID) && !defined(HAVE_SETRESGID_DECL))
int setresgid(gid_t rgid, gid_t egid, gid_t sgid);
#endif
-#ifndef HAVE_VASPRINTF_DECL
-int vasprintf(char **ptr, const char *format, va_list ap);
-#endif
#if !defined(HAVE_BZERO) && defined(HAVE_MEMSET)
#define bzero(a,b) memset((a),'\0',(b))
@@ -978,13 +934,13 @@ int vasprintf(char **ptr, const char *format, va_list ap);
#define S_IXOTH 00001 /* execute permission: other */
#endif
-/* NetBSD doesn't have these */
-#ifndef SHM_R
-#define SHM_R 0400
-#endif
+/* Some systems (SCO) treat UNIX domain sockets as FIFOs */
-#ifndef SHM_W
-#define SHM_W 0200
+#ifndef S_IFSOCK
+#define S_IFSOCK S_IFIFO
+#endif
+#ifndef S_ISSOCK
+#define S_ISSOCK(mode) ((mode & S_IFSOCK) == S_IFSOCK)
#endif
#if HAVE_KERNEL_SHARE_MODES
@@ -1026,19 +982,5 @@ extern int DEBUGLEVEL;
#define RTLD_NOW 0
#endif
-/* add varargs prototypes with printf checking */
-int fdprintf(int , char *, ...) PRINTF_ATTRIBUTE(2,3);
-#ifndef HAVE_SNPRINTF_DECL
-int snprintf(char *,size_t ,const char *, ...) PRINTF_ATTRIBUTE(3,4);
-#endif
-#ifndef HAVE_ASPRINTF_DECL
-int asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
-#endif
-
-/* we used to use these fns, but now we have good replacements
- for snprintf and vsnprintf */
-#define slprintf snprintf
-#define vslprintf vsnprintf
-
#endif /* _INCLUDES_H */
diff --git a/source/include/libsmbclient.h b/source/include/libsmbclient.h
deleted file mode 100644
index 54660c48535..00000000000
--- a/source/include/libsmbclient.h
+++ /dev/null
@@ -1,780 +0,0 @@
-/*=====================================================================
- Unix SMB/Netbios implementation.
- Version 2.0
- SMB client library API definitions
- Copyright (C) Andrew Tridgell 1998
- Copyright (C) Richard Sharpe 2000
- Copyright (C) John Terpsra 2000
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-=====================================================================*/
-
-#ifndef SMBCLIENT_H_INCLUDED
-#define SMBCLIENT_H_INCLUDED
-
-/*-------------------------------------------------------------------*/
-/* The following are special comments to instruct DOXYGEN (automated
- * documentation tool:
-*/
-/** \defgroup structure Data Structures Type and Constants
-* Data structures, types, and constants
-*/
-/** \defgroup file File Functions
-* Functions used to access individual file contents
-*/
-/** \defgroup directory Directory Functions
-* Functions used to access directory entries
-*/
-/** \defgroup attribute Attributes Functions
-* Functions used to view or change file and directory attributes
-*/
-/** \defgroup print Print Functions
-* Functions used to access printing functionality
-*/
-/** \defgroup attribute Miscellaneous Functions
-* Functions that don't fit in to other categories
-*/
-/*-------------------------------------------------------------------*/
-
-/* Make sure we have the following includes for now ... */
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define SMBC_MAX_NAME 1023
-#define SMBC_WORKGROUP 1
-#define SMBC_SERVER 2
-#define SMBC_FILE_SHARE 3
-#define SMBC_PRINTER_SHARE 4
-#define SMBC_COMMS_SHARE 5
-#define SMBC_IPC_SHARE 6
-#define SMBC_DIR 7
-#define SMBC_FILE 8
-#define SMBC_LINK 9
-
-#define SMBC_FILE_MODE (S_IFREG | 0444)
-#define SMBC_DIR_MODE (S_IFDIR | 0555)
-
-/**@ingroup structure
- * Structure that represents a directory entry.
- *
-*/
-struct smbc_dirent
-{
- /** Type of entity.
- SMBC_WORKGROUP=1,
- SMBC_SERVER=2,
- SMBC_FILE_SHARE=3,
- SMBC_PRINTER_SHARE=4,
- SMBC_COMMS_SHARE=5,
- SMBC_IPC_SHARE=6,
- SMBC_DIR=7,
- SMBC_FILE=8,
- SMBC_LINK=9,*/
- uint smbc_type;
-
- /** Length of this smbc_dirent in bytes
- */
- uint dirlen;
- /** The length of the comment string in bytes (includes null
- * terminator)
- */
- uint commentlen;
- /** Points to the null terminated comment string
- */
- char *comment;
- /** The length of the name string in bytes (includes null
- * terminator)
- */
- uint namelen;
- /** Points to the null terminated name string
- */
- char name[1];
-};
-
-
-#ifndef _CLIENT_H
-typedef unsigned short uint16;
-
-/**@ingroup structure
- * Structure that represents a print job.
- *
- */
-struct print_job_info
-{
- /** numeric ID of the print job
- */
- uint16 id;
-
- /** represents print job priority (lower numbers mean higher priority)
- */
- uint16 priority;
-
- /** Size of the print job
- */
- size_t size;
-
- /** Name of the user that owns the print job
- */
- char user[128];
-
- /** Name of the print job. This will have no name if an anonymous print
- * file was opened. Ie smb://server/printer
- */
- char name[128];
-
- /** Time the print job was spooled
- */
- time_t t;
-};
-#endif
-
-
-/**@ingroup structure
- * Authentication callback function type.
- *
- * Type for the the authentication function called by the library to
- * obtain authentication credentals
- *
- * @param srv Server being authenticated to
- *
- * @param shr Share being authenticated to
- *
- * @param wg Pointer to buffer containing a "hint" for the
- * workgroup to be authenticated. Should be filled in
- * with the correct workgroup if the hint is wrong.
- *
- * @param wglen The size of the workgroup buffer in bytes
- *
- * @param un Pointer to buffer containing a "hint" for the
- * user name to be use for authentication. Should be
- * filled in with the correct workgroup if the hint is
- * wrong.
- *
- * @param unlen The size of the username buffer in bytes
- *
- * @param pw Pointer to buffer containing to which password
- * copied
- *
- * @param pwlen The size of the password buffer in bytes
- *
- */
-typedef void (*smbc_get_auth_data_fn)(const char *srv,
- const char *shr,
- char *wg, int wglen,
- char *un, int unlen,
- char *pw, int pwlen);
-
-
-/**@ingroup structure
- * Print job info callback function type.
- *
- * @param i pointer to print job information structure
- *
- */
-typedef void (*smbc_get_print_job_info)(struct print_job_info *i);
-
-
-/**@ingroup misc
- * Initialize the samba client library.
- *
- * Must be called before using any of the smbclient API function
- *
- * @param fn The function that will be called to obtaion
- * authentication credentials.
- *
- * @param debug Allows caller to set the debug level. Can be
- * changed in smb.conf file. Allows caller to set
- * debugging if no smb.conf.
- *
- * @return 0 on success, < 0 on error with errno set:
- * - ENOMEM Out of memory
- * - ENOENT The smb.conf file would not load
- *
- */
-int smbc_init(smbc_get_auth_data_fn fn, int debug);
-
-
-/**@ingroup file
- * Open a file on an SMB server.
- *
- * @param furl The smb url of the file to be opened.
- *
- * @param flags Is one of O_RDONLY, O_WRONLY or O_RDWR which
- * request opening the file read-only,write-only
- * or read/write. flags may also be bitwise-or'd with
- * one or more of the following:
- * O_CREAT - If the file does not exist it will be
- * created.
- * O_EXCL - When used with O_CREAT, if the file
- * already exists it is an error and the open will
- * fail.
- * O_TRUNC - If the file already exists it will be
- * truncated.
- * O_APPEND The file is opened in append mode
- *
- * @param mode mode specifies the permissions to use if a new
- * file is created. It is modified by the
- * process's umask in the usual way: the permissions
- * of the created file are (mode & ~umask)
- *
- * Not currently use, but there for future use.
- * We will map this to SYSTEM, HIDDEN, etc bits
- * that reverses the mapping that smbc_fstat does.
- *
- * @return Valid file handle, < 0 on error with errno set:
- * - ENOMEM Out of memory
- * - EINVAL if an invalid parameter passed, like no
- * file, or smbc_init not called.
- * - EEXIST pathname already exists and O_CREAT and
- * O_EXCL were used.
- * - EISDIR pathname refers to a directory and
- * the access requested involved writing.
- * - EACCES The requested access to the file is not
- * allowed
- * - ENODEV The requested share does not exist
- * - ENOTDIR A file on the path is not a directory
- * - ENOENT A directory component in pathname does
- * not exist.
- *
- * @see smbc_creat()
- *
- * @note This call uses an underlying routine that may create
- * a new connection to the server specified in the URL.
- * If the credentials supplied in the URL, or via the
- * auth_fn in the smbc_init call, fail, this call will
- * try again with an empty username and password. This
- * often gets mapped to the guest account on some machines.
-*/
-int smbc_open(const char *furl, int flags, mode_t mode);
-
-
-/**@ingroup file
- * Create a file on an SMB server.
- *
- * Same as calling smbc_open() with flags = O_CREAT|O_WRONLY|O_TRUNC
- *
- * @param furl The smb url of the file to be created
- *
- * @param mode mode specifies the permissions to use if a new
- * file is created. It is modified by the
- * process's umask in the usual way: the permissions
- * of the created file are (mode & ~umask)
- *
- * NOTE, the above is not true. We are dealing with
- * an SMB server, which has no concept of a umask!
- *
- * @return Valid file handle, < 0 on error with errno set:
- * - ENOMEM Out of memory
- * - EINVAL if an invalid parameter passed, like no
- * file, or smbc_init not called.
- * - EEXIST pathname already exists and O_CREAT and
- * O_EXCL were used.
- * - EISDIR pathname refers to a directory and
- * the access requested involved writing.
- * - EACCES The requested access to the file is not
- * allowed
- * - ENOENT A directory component in pathname does
- * not exist.
- * - ENODEV The requested share does not exist.
- * @see smbc_open()
- *
-*/
-int smbc_creat(const char *furl, mode_t mode);
-
-
-/**@ingroup file
- * Read from a file using an opened file handle.
- *
- * @param fd Open file handle from smbc_open() or smbc_creat()
- *
- * @param buf Pointer to buffer to recieve read data
- *
- * @param bufsize Size of buf in bytes
- *
- * @return Number of bytes read, < 0 on error with errno set:
- * - EISDIR fd refers to a directory
- * - EBADF fd is not a valid file descriptor or
- * is not open for reading.
- * - EINVAL fd is attached to an object which is
- * unsuitable for reading, or no buffer passed or
- * smbc_init not called.
- *
- * @see smbc_open(), smbc_write()
- *
- */
-ssize_t smbc_read(int fd, void *buf, size_t bufsize);
-
-
-/**@ingroup file
- * Write to a file using an opened file handle.
- *
- * @param fd Open file handle from smbc_open() or smbc_creat()
- *
- * @param buf Pointer to buffer to recieve read data
- *
- * @param bufsize Size of buf in bytes
- *
- * @return Number of bytes written, < 0 on error with errno set:
- * - EISDIR fd refers to a directory.
- * - EBADF fd is not a valid file descriptor or
- * is not open for reading.
- * - EINVAL fd is attached to an object which is
- * unsuitable for reading, or no buffer passed or
- * smbc_init not called.
- *
- * @see smbc_open(), smbc_read()
- *
- */
-ssize_t smbc_write(int fd, void *buf, size_t bufsize);
-
-
-/**@ingroup file
- * Seek to a specific location in a file.
- *
- * @param fd Open file handle from smbc_open() or smbc_creat()
- *
- * @param offset Offset in bytes from whence
- *
- * @param whence A location in the file:
- * - SEEK_SET The offset is set to offset bytes from
- * the beginning of the file
- * - SEEK_CUR The offset is set to current location
- * plus offset bytes.
- * - SEEK_END The offset is set to the size of the
- * file plus offset bytes.
- *
- * @return Upon successful completion, lseek returns the
- * resulting offset location as measured in bytes
- * from the beginning of the file. Otherwise, a value
- * of (off_t)-1 is returned and errno is set to
- * indicate the error:
- * - EBADF Fildes is not an open file descriptor.
- * - EINVAL Whence is not a proper value or smbc_init
- * not called.
- *
- * @todo Are all the whence values really supported?
- *
- * @todo Are errno values complete and correct?
-*/
-off_t smbc_lseek(int fd, off_t offset, int whence);
-
-
-/**@ingroup file
- * Close an open file handle.
- *
- * @param fd The file handle to close
- *
- * @return 0 on success, < 0 on error with errno set:
- * - EBADF fd isn't a valid open file descriptor
- * - EINVAL smbc_init() failed or has not been called
- *
- * @see smbc_open(), smbc_creat()
-*/
-int smbc_close(int fd);
-
-
-/**@ingroup directory
- * Unlink (delete) a file or directory.
- *
- * @param furl The smb url of the file to delete
- *
- * @return 0 on success, < 0 on error with errno set:
- * - EACCES or EPERM Write access to the directory
- * containing pathname is not allowed or one
- * of the directories in pathname did not allow
- * search (execute) permission
- * - ENOENT A directory component in pathname does
- * not exist
- * - EINVAL NULL was passed in the file param or
- * smbc_init not called.
- * - EACCES You do not have access to the file
- * - ENOMEM Insufficient kernel memory was available
- *
- * @see smbc_rmdir()s
- *
- * @todo Are errno values complete and correct?
-*/
-int smbc_unlink(const char *furl);
-
-
-/**@ingroup directory
- * Rename or move a file or directory.
- *
- * @param ourl The original smb url (source url) of file or
- * directory to be moved
- *
- * @param nurl The new smb url (destination url) of the file
- * or directory after the move. Currently nurl must
- * be on the same share as ourl.
- *
- * @return 0 on success, < 0 on error with errno set:
- * - EISDIR nurl is an existing directory, but ourl is
- * not a directory.
- * - EEXIST nurl is a non-empty directory,
- * i.e., contains entries other than "." and ".."
- * - EINVAL The new url contained a path prefix
- * of the old, or, more generally, an attempt was
- * made to make a directory a subdirectory of itself
- * or smbc_init not called.
- * - ENOTDIR A component used as a directory in ourl
- * or nurl path is not, in fact, a directory. Or,
- * ourl is a directory, and newpath exists but is not
- * a directory.
- * - EACCES or EPERM Write access to the directory
- * containing ourl or nurl is not allowed for the
- * process's effective uid, or one of the
- * directories in ourl or nurl did not allow search
- * (execute) permission, or ourl was a directory
- * and did not allow write permission.
- * - ENOENT A directory component in ourl or nurl
- * does not exist.
- * - EXDEV Rename across shares not supported.
- * - ENOMEM Insufficient kernel memory was available.
- * - EEXIST The target file, nurl, already exists.
- *
- *
- * @todo Are we going to support copying when urls are not on the same
- * share? I say no... NOTE. I agree for the moment.
- *
-*/
-int smbc_rename(const char *ourl, const char *nurl);
-
-
-/**@ingroup directory
- * Open a directory used to obtain directory entries.
- *
- * @param durl The smb url of the directory to open
- *
- * @return Valid directory handle. < 0 on error with errno set:
- * - EACCES Permission denied.
- * - EINVAL A NULL file/URL was passed, or the URL would
- * not parse, or was of incorrect form or smbc_init not
- * called.
- * - ENOENT durl does not exist, or name is an
- * - ENOMEM Insufficient memory to complete the
- * operation.
- * - ENOTDIR name is not a directory.
- * - EPERM the workgroup could not be found.
- * - ENODEV the workgroup or server could not be found.
- *
- * @see smbc_getdents(), smbc_readdir(), smbc_closedir()
- *
-*/
-int smbc_opendir(const char *durl);
-
-
-/**@ingroup directory
- * Close a directory handle opened by smbc_opendir().
- *
- * @param dh Directory handle to close
- *
- * @return 0 on success, < 0 on error with errno set:
- * - EBADF dh is an invalid directory handle
- *
- * @see smbc_opendir()
-*/
-int smbc_closedir(int dh);
-
-
-/**@ingroup directory
- * Get multiple directory entries.
- *
- * smbc_getdents() reads as many dirent structures from the an open
- * directory handle into a specified memory area as will fit.
- *
- * @param dh Valid directory as returned by smbc_opendir()
- *
- * @param dirp pointer to buffer that will receive the directory
- * entries.
- *
- * @param count The size of the dirp buffer in bytes
- *
- * @returns If any dirents returned, return will indicate the
- * total size. If there were no more dirents available,
- * 0 is returned. < 0 indicates an error.
- * - EBADF Invalid directory handle
- * - EINVAL Result buffer is too small or smbc_init
- * not called.
- * - ENOENT No such directory.
- * @see , smbc_dirent, smbc_readdir(), smbc_open()
- *
- * @todo Are errno values complete and correct?
- *
- * @todo Add example code so people know how to parse buffers.
- */
-int smbc_getdents(unsigned int dh, struct smbc_dirent *dirp, int count);
-
-
-/**@ingroup directory
- * Get a single directory entry.
- *
- * @param dh Valid directory as returned by smbc_opendir()
- *
- * @return A pointer to a smbc_dirent structure, or NULL if an
- * error occurs or end-of-directory is reached:
- * - EBADF Invalid directory handle
- * - EINVAL smbc_init() failed or has not been called
- *
- * @see smbc_dirent, smbc_getdents(), smbc_open()
-*/
-struct smbc_dirent* smbc_readdir(unsigned int dh);
-
-
-/**@ingroup directory
- * Get the current directory offset.
- *
- * smbc_telldir() may be used in conjunction with smbc_readdir() and
- * smbc_lseekdir().
- *
- * @param dh Valid directory as returned by smbc_opendir()
- *
- * @return The current location in the directory stream or -1
- * if an error occur. The current location is not
- * an offset. Becuase of the implementation, it is a
- * handle that allows the library to find the entry
- * later.
- * - EBADF dh is not a valid directory handle
- * - EINVAL smbc_init() failed or has not been called
- * - ENOTDIR if dh is not a directory
- *
- * @see smbc_readdir()
- *
-*/
-off_t smbc_telldir(int dh);
-
-
-/**@ingroup directory
- * lseek on directories.
- *
- * smbc_lseekdir() may be used in conjunction with smbc_readdir() and
- * smbc_telldir(). (rewind by smbc_lseekdir(fd, NULL))
- *
- * @param fd Valid directory as returned by smbc_opendir()
- *
- * @param offset The offset (as returned by smbc_telldir). Can be
- * NULL, in which case we will rewind
- *
- * @return 0 on success, -1 on failure
- * - EBADF dh is not a valid directory handle
- * - ENOTDIR if dh is not a directory
- * - EINVAL offset did not refer to a valid dirent or
- * smbc_init not called.
- *
- * @see smbc_telldir()
- *
- *
- * @todo In what does the reture and errno values mean?
- */
-int smbc_lseekdir(int fd, off_t offset);
-
-/**@ingroup directory
- * Create a directory.
- *
- * @param durl The url of the directory to create
- *
- * @param mode Specifies the permissions to use. It is modified
- * by the process's umask in the usual way: the
- * permissions of the created file are (mode & ~umask).
- *
- * @return 0 on success, < 0 on error with errno set:
- * - EEXIST directory url already exists
- * - EACCES The parent directory does not allow write
- * permission to the process, or one of the directories
- * - ENOENT A directory component in pathname does not
- * exist.
- * - EINVAL NULL durl passed or smbc_init not called.
- * - ENOMEM Insufficient memory was available.
- *
- * @see smbc_rmdir()
- *
-*/
-int smbc_mkdir(const char *durl, mode_t mode);
-
-
-/**@ingroup directory
- * Remove a directory.
- *
- * @param durl The smb url of the directory to remove
- *
- * @return 0 on success, < 0 on error with errno set:
- * - EACCES or EPERM Write access to the directory
- * containing pathname was not allowed.
- * - EINVAL durl is NULL or smbc_init not called.
- * - ENOENT A directory component in pathname does not
- * exist.
- * - ENOTEMPTY directory contains entries.
- * - ENOMEM Insufficient kernel memory was available.
- *
- * @see smbc_mkdir(), smbc_unlink()
- *
- * @todo Are errno values complete and correct?
- */
-int smbc_rmdir(const char *durl);
-
-
-/**@ingroup attribute
- * Get information about a file or directory.
- *
- * @param url The smb url to get information for
- *
- * @param st pointer to a buffer that will be filled with
- * standard Unix struct stat information.
- *
- * @return 0 on success, < 0 on error with errno set:
- * - ENOENT A component of the path file_name does not
- * exist.
- * - EINVAL a NULL url was passed or smbc_init not called.
- * - EACCES Permission denied.
- * - ENOMEM Out of memory
- * - ENOTDIR The target dir, url, is not a directory.
- *
- * @see Unix stat()
- *
- */
-int smbc_stat(const char *url, struct stat *st);
-
-
-/**@ingroup attribute
- * Get file information via an file descriptor.
- *
- * @param fd Open file handle from smbc_open() or smbc_creat()
- *
- * @param st pointer to a buffer that will be filled with
- * standard Unix struct stat information.
- *
- * @return EBADF filedes is bad.
- * - EACCES Permission denied.
- * - EBADF fd is not a valid file descriptor
- * - EINVAL Problems occurred in the underlying routines
- * or smbc_init not called.
- * - ENOMEM Out of memory
- *
- * @see smbc_stat(), Unix stat()
- *
- */
-int smbc_fstat(int fd, struct stat *st);
-
-
-/**@ingroup attribue
- * Change the ownership of a file or directory.
- *
- * @param url The smb url of the file or directory to change
- * ownership of.
- *
- * @param owner I have no idea?
- *
- * @param group I have not idea?
- *
- * @return 0 on success, < 0 on error with errno set:
- * - EPERM The effective UID does not match the owner
- * of the file, and is not zero; or the owner or group
- * were specified incorrectly.
- * - ENOENT The file does not exist.
- * - ENOMEM Insufficient was available.
- * - ENOENT file or directory does not exist
- *
- * @todo Are we actually going to be able to implement this function
- *
- * @todo How do we abstract owner and group uid and gid?
- *
- */
-int smbc_chown(const char *url, uid_t owner, gid_t group);
-
-
-/**@ingroup attribute
- * Change the permissions of a file.
- *
- * @param url The smb url of the file or directory to change
- * permissions of
- *
- * @param mode The permissions to set:
- * - Put good explaination of permissions here!
- *
- * @return 0 on success, < 0 on error with errno set:
- * - EPERM The effective UID does not match the owner
- * of the file, and is not zero
- * - ENOENT The file does not exist.
- * - ENOMEM Insufficient was available.
- * - ENOENT file or directory does not exist
- *
- * @todo Actually implement this fuction?
- *
- * @todo Are errno values complete and correct?
- */
-int smbc_chmod(const char *url, mode_t mode);
-
-
-/**@ingroup print
- * Print a file given the name in fname. It would be a URL ...
- *
- * @param fname The URL of a file on a remote SMB server that the
- * caller wants printed
- *
- * @param printq The URL of the print share to print the file to.
- *
- * @return 0 on success, < 0 on error with errno set:
- *
- * - EINVAL fname or printq was NULL or smbc_init not
- * not called.
- * and errors returned by smbc_open
- *
-*/
-int smbc_print_file(const char *fname, const char *printq);
-
-/**@ingroup print
- * Open a print file that can be written to by other calls. This simply
- * does an smbc_open call after checking if there is a file name on the
- * URI. If not, a temporary name is added ...
- *
- * @param fname The URL of the print share to print to?
- *
- * @returns A file handle for the print file if successful.
- * Returns -1 if an error ocurred and errno has the values
- * - EINVAL fname was NULL or smbc_init not called.
- * - all errors returned by smbc_open
- *
- */
-int smbc_open_print_job(const char *fname);
-
-/**@ingroup print
- * List the print jobs on a print share, for the moment, pass a callback
- *
- * @param purl The url of the print share to list the jobs of
- *
- * @param fn Callback function the receives printjob info
- *
- * @return 0 on success, < 0 on error with errno set:
- * - EINVAL fname was NULL or smbc_init not called
- * - EACCES ???
- */
-int smbc_list_print_jobs(const char *purl, smbc_get_print_job_info fn);
-
-/**@ingroup print
- * Delete a print job
- *
- * @param purl Url of the print share
- *
- * @param id The id of the job to delete
- *
- * @return 0 on success, < 0 on error with errno set:
- * - EINVAL fname was NULL or smbc_init not called
- *
- * @todo what errno values are possible here?
- */
-int smbc_unlink_print_job(const char *purl, int id);
-
-
-#endif /* SMBCLIENT_H_INCLUDED */
diff --git a/source/include/local.h b/source/include/local.h
index 1a58e9e2d11..b5590f9f912 100644
--- a/source/include/local.h
+++ b/source/include/local.h
@@ -100,11 +100,6 @@
#define GUEST_ACCOUNT "nobody"
#endif
-/* user to test password server with as invalid in security=server mode. */
-#ifndef INVALID_USER_PREFIX
-#define INVALID_USER_PREFIX "sambatest"
-#endif
-
/* the default pager to use for the client "more" command. Users can
override this with the PAGER environment variable */
#ifndef PAGER
@@ -181,12 +176,4 @@
/* Minimum length of allowed password when changing UNIX password. */
#define MINPASSWDLENGTH 5
-/* maximum ID number used for session control. This cannot be larger
- than 62*62 for the current code */
-#define MAX_SESSION_ID 3000
-
-#ifndef SESSION_TEMPLATE
-#define SESSION_TEMPLATE "smb/%d"
-#endif
-
#endif
diff --git a/source/include/messages.h b/source/include/messages.h
index b41f1f38a8e..fb88ddbd0e1 100644
--- a/source/include/messages.h
+++ b/source/include/messages.h
@@ -39,6 +39,5 @@
#define MSG_PRINTER_NOTIFY 2001
#define MSG_SMB_CONF_UPDATED 3001
-#define MSG_SMB_FORCE_TDIS 3002
#endif
diff --git a/source/include/ntdomain.h b/source/include/ntdomain.h
index 58ed1759e71..ecd261949c5 100644
--- a/source/include/ntdomain.h
+++ b/source/include/ntdomain.h
@@ -267,8 +267,7 @@ typedef struct
struct acct_info
{
fstring acct_name; /* account name */
- fstring acct_desc; /* account name */
- uint32 rid; /* domain-relative RID */
+ uint32 smb_userid; /* domain-relative RID */
};
/*
diff --git a/source/include/proto.h b/source/include/proto.h
index b8920a732e6..ba66888ea3c 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -100,8 +100,7 @@ int sys_fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize);
/*The following definitions come from lib/genrand.c */
-void set_rand_reseed_data(unsigned char *data, size_t len);
-void generate_random_buffer( unsigned char *out, int len, BOOL do_reseed_now);
+void generate_random_buffer( unsigned char *out, int len, BOOL re_seed);
char *generate_random_str(size_t len);
/*The following definitions come from lib/getsmbpass.c */
@@ -111,10 +110,11 @@ char *getsmbpass(char *prompt) ;
/*The following definitions come from lib/hash.c */
BOOL hash_table_init(hash_table *table, int num_buckets, compare_function compare_func);
+int string_hash(int hash_size, const char *key);
hash_element *hash_lookup(hash_table *table, char *key);
hash_element *hash_insert(hash_table *table, char *value, char *key);
void hash_remove(hash_table *table, hash_element *hash_elem);
-void hash_clear(hash_table *table);
+BOOL hash_clear(hash_table *table);
/*The following definitions come from lib/interface.c */
@@ -158,7 +158,7 @@ BOOL message_send_all(TDB_CONTEXT *conn_tdb, int msg_type, void *buf, size_t len
/*The following definitions come from lib/ms_fnmatch.c */
-int ms_fnmatch(const char *pattern, const char *string);
+int ms_fnmatch(char *pattern, char *string);
/*The following definitions come from lib/pidfile.c */
@@ -188,6 +188,10 @@ void CatchSignal(int signum,void (*handler)(int ));
void CatchChild(void);
void CatchChildLeaveStatus(void);
+/*The following definitions come from lib/slprintf.c */
+
+int vslprintf(char *str, int n, char *format, va_list ap);
+
/*The following definitions come from libsmb/cliconnect.c */
BOOL cli_session_setup(struct cli_state *cli,
@@ -219,7 +223,6 @@ int cli_set_port(struct cli_state *cli, int port);
BOOL cli_receive_smb(struct cli_state *cli);
BOOL cli_send_smb(struct cli_state *cli);
void cli_setup_packet(struct cli_state *cli);
-void cli_setup_bcc(struct cli_state *cli, void *p);
void cli_init_creds(struct cli_state *cli, const struct ntuser_creds *usr);
struct cli_state *cli_initialise(struct cli_state *cli);
void cli_shutdown(struct cli_state *cli);
@@ -238,10 +241,10 @@ BOOL cli_unlink(struct cli_state *cli, char *fname);
BOOL cli_mkdir(struct cli_state *cli, char *dname);
BOOL cli_rmdir(struct cli_state *cli, char *dname);
int cli_nt_delete_on_close(struct cli_state *cli, int fnum, BOOL flag);
-int cli_nt_create_full(struct cli_state *cli, char *fname, uint32 DesiredAccess,
- uint32 FileAttributes, uint32 ShareAccess,
- uint32 CreateDisposition, uint32 CreateOptions);
+int cli_nt_create_full(struct cli_state *cli, char *fname, uint32 DesiredAccess, uint32 FileAttributes,
+ uint32 ShareAccess, uint32 CreateDisposition, uint32 CreateOptions);
int cli_nt_create(struct cli_state *cli, char *fname, uint32 DesiredAccess);
+int cli_nt_create_uni(struct cli_state *cli, char *fname, uint32 DesiredAccess);
int cli_open(struct cli_state *cli, char *fname, int flags, int share_mode);
BOOL cli_close(struct cli_state *cli, int fnum);
BOOL cli_lock(struct cli_state *cli, int fnum,
@@ -258,39 +261,34 @@ BOOL cli_getatr(struct cli_state *cli, char *fname,
BOOL cli_setatr(struct cli_state *cli, char *fname, uint16 attr, time_t t);
BOOL cli_chkpath(struct cli_state *cli, char *path);
BOOL cli_dskattr(struct cli_state *cli, int *bsize, int *total, int *avail);
-int cli_ctemp(struct cli_state *cli, char *path, char **tmp_path);
/*The following definitions come from libsmb/clilist.c */
-int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
- void (*fn)(file_info *, const char *, void *), void *state);
-int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
- void (*fn)(file_info *, const char *, void *), void *state);
int cli_list(struct cli_state *cli,const char *Mask,uint16 attribute,
- void (*fn)(file_info *, const char *, void *), void *state);
+ void (*fn)(file_info *, const char *));
+int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
+ void (*fn)(file_info *, const char *));
/*The following definitions come from libsmb/cli_lsarpc.c */
struct cli_state *cli_lsa_initialise(struct cli_state *cli, char *system_name,
struct ntuser_creds *creds);
void cli_lsa_shutdown(struct cli_state *cli);
-uint32 cli_lsa_open_policy(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- BOOL sec_qos, uint32 des_access, POLICY_HND *pol);
-uint32 cli_lsa_close(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol);
-uint32 cli_lsa_lookup_sids(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol, int num_sids, DOM_SID *sids,
- char ***names, uint32 **types, int *num_names);
-uint32 cli_lsa_lookup_names(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol, int num_names, char **names,
- DOM_SID **sids, uint32 **types, int *num_sids);
-uint32 cli_lsa_query_info_policy(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol, uint16 info_class,
- fstring domain_name, DOM_SID *domain_sid);
-uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol, uint32 *enum_ctx,
- uint32 *num_domains, char ***domain_names,
- DOM_SID **domain_sids);
+uint32 cli_lsa_open_policy(struct cli_state *cli, BOOL sec_qos,
+ uint32 des_access, POLICY_HND *pol);
+uint32 cli_lsa_close(struct cli_state *cli, POLICY_HND *pol);
+uint32 cli_lsa_lookup_sids(struct cli_state *cli, POLICY_HND *pol,
+ int num_sids, DOM_SID *sids, char ***names,
+ uint32 **types, int *num_names);
+uint32 cli_lsa_lookup_names(struct cli_state *cli, POLICY_HND *pol,
+ int num_names, char **names, DOM_SID **sids,
+ uint32 **types, int *num_sids);
+uint32 cli_lsa_query_info_policy(struct cli_state *cli, POLICY_HND *pol,
+ uint16 info_class, fstring domain_name,
+ DOM_SID * domain_sid);
+uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, POLICY_HND *pol,
+ uint32 *enum_ctx, uint32 *num_domains,
+ char ***domain_names, DOM_SID **domain_sids);
/*The following definitions come from libsmb/climessage.c */
@@ -299,15 +297,6 @@ BOOL cli_message_start(struct cli_state *cli, char *host, char *username,
BOOL cli_message_text(struct cli_state *cli, char *msg, int len, int grp);
BOOL cli_message_end(struct cli_state *cli, int grp);
-/*The following definitions come from libsmb/cli_netlogon.c */
-
-struct cli_state *cli_netlogon_initialise(struct cli_state *cli,
- char *system_name,
- struct ntuser_creds *creds);
-void cli_netlogon_shutdown(struct cli_state *cli);
-uint32 cli_netlogon_logon_ctrl2(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- uint32 query_level);
-
/*The following definitions come from libsmb/cliprint.c */
int cli_print_queue(struct cli_state *cli,
@@ -316,7 +305,7 @@ int cli_printjob_del(struct cli_state *cli, int job);
/*The following definitions come from libsmb/clirap.c */
-BOOL cli_api_pipe(struct cli_state *cli, char *pipe_name,
+BOOL cli_api_pipe(struct cli_state *cli, char *pipe_name, int pipe_name_len,
uint16 *setup, uint32 setup_count, uint32 max_setup_count,
char *params, uint32 param_count, uint32 max_param_count,
char *data, uint32 data_count, uint32 max_data_count,
@@ -328,10 +317,9 @@ BOOL cli_api(struct cli_state *cli,
char **rparam, int *rprcnt,
char **rdata, int *rdrcnt);
BOOL cli_NetWkstaUserLogon(struct cli_state *cli,char *user, char *workstation);
-int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32, const char *, void *), void *state);
+int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32, const char *));
BOOL cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
- void (*fn)(const char *, uint32, const char *, void *),
- void *state);
+ void (*fn)(const char *, uint32, const char *));
BOOL cli_oem_change_password(struct cli_state *cli, const char *user, const char *new_password,
const char *old_password);
BOOL cli_qpathinfo(struct cli_state *cli, const char *fname,
@@ -345,11 +333,10 @@ BOOL cli_qfileinfo(struct cli_state *cli, int fnum,
uint16 *mode, size_t *size,
time_t *c_time, time_t *a_time, time_t *m_time,
time_t *w_time, SMB_INO_T *ino);
-BOOL cli_qfileinfo_test(struct cli_state *cli, int fnum, int level, char *outdata);
/*The following definitions come from libsmb/clireadwrite.c */
-ssize_t cli_read(struct cli_state *cli, int fnum, char *buf, off_t offset, size_t size);
+size_t cli_read(struct cli_state *cli, int fnum, char *buf, off_t offset, size_t size);
ssize_t cli_write(struct cli_state *cli,
int fnum, uint16 write_mode,
char *buf, off_t offset, size_t size);
@@ -361,53 +348,30 @@ ssize_t cli_smbwrite(struct cli_state *cli,
struct cli_state *cli_samr_initialise(struct cli_state *cli, char *system_name,
struct ntuser_creds *creds);
void cli_samr_shutdown(struct cli_state *cli);
-uint32 cli_samr_connect(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- char *srv_name, uint32 access_mask,
- POLICY_HND *connect_pol);
-uint32 cli_samr_close(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *connect_pol);
-uint32 cli_samr_open_domain(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *connect_pol, uint32 access_mask,
- DOM_SID *domain_sid, POLICY_HND *domain_pol);
-uint32 cli_samr_open_user(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *domain_pol, uint32 access_mask,
- uint32 user_rid, POLICY_HND *user_pol);
-uint32 cli_samr_open_group(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *domain_pol, uint32 access_mask,
- uint32 group_rid, POLICY_HND *group_pol);
-uint32 cli_samr_query_userinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *user_pol, uint16 switch_value,
- SAM_USERINFO_CTR *ctr);
-uint32 cli_samr_query_groupinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *group_pol, uint32 info_level,
- GROUP_INFO_CTR *ctr);
-uint32 cli_samr_query_usergroups(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *user_pol, uint32 *num_groups,
- DOM_GID **gid);
-uint32 cli_samr_query_groupmem(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *group_pol, uint32 *num_mem,
- uint32 **rid, uint32 **attr);
-uint32 cli_samr_enum_dom_groups(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol, uint32 *start_idx,
- uint32 size, struct acct_info **dom_groups,
- uint32 *num_dom_groups);
-uint32 cli_samr_query_aliasmem(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *alias_pol, uint32 *num_mem,
- DOM_SID **sids);
-uint32 cli_samr_open_alias(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *domain_pol, uint32 access_mask,
- uint32 alias_rid, POLICY_HND *alias_pol);
-uint32 cli_samr_query_dom_info(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *domain_pol, uint16 switch_value,
- SAM_UNK_CTR *ctr);
-uint32 cli_samr_query_dispinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *domain_pol, uint32 *start_idx,
- uint16 switch_value, uint32 *num_entries,
- uint32 max_entries, SAM_DISPINFO_CTR *ctr);
+uint32 cli_samr_connect(struct cli_state *cli, char *srv_name,
+ uint32 access_mask, POLICY_HND *connect_pol);
+uint32 cli_samr_close(struct cli_state *cli, POLICY_HND *connect_pol);
+uint32 cli_samr_open_domain(struct cli_state *cli, POLICY_HND *connect_pol,
+ uint32 access_mask, DOM_SID *domain_sid,
+ POLICY_HND *domain_pol);
+uint32 cli_samr_open_user(struct cli_state *cli, POLICY_HND *domain_pol,
+ uint32 access_mask, uint32 user_rid,
+ POLICY_HND *user_pol);
+uint32 cli_samr_open_group(struct cli_state *cli, POLICY_HND *domain_pol,
+ uint32 access_mask, uint32 group_rid,
+ POLICY_HND *group_pol);
+uint32 cli_samr_query_userinfo(struct cli_state *cli, POLICY_HND *user_pol,
+ uint16 switch_value, SAM_USERINFO_CTR *ctr);
+uint32 cli_samr_query_groupinfo(struct cli_state *cli, POLICY_HND *group_pol,
+ uint32 info_level, GROUP_INFO_CTR *ctr);
+uint32 cli_samr_query_usergroups(struct cli_state *cli, POLICY_HND *user_pol,
+ uint32 *num_groups, DOM_GID **gid);
+uint32 cli_samr_query_groupmem(struct cli_state *cli, POLICY_HND *group_pol,
+ uint32 *num_mem, uint32 **rid, uint32 **attr);
/*The following definitions come from libsmb/clisecdesc.c */
-SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd, TALLOC_CTX *mem_ctx);
+SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd);
BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd);
/*The following definitions come from libsmb/cli_spoolss.c */
@@ -416,46 +380,24 @@ struct cli_state *cli_spoolss_initialise(struct cli_state *cli,
char *system_name,
struct ntuser_creds *creds);
void cli_spoolss_shutdown(struct cli_state *cli);
-uint32 cli_spoolss_open_printer_ex(
- struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
- char *printername,
- char *datatype,
- uint32 access_required,
- char *station,
- char *username,
- POLICY_HND *pol
-);
-uint32 cli_spoolss_close_printer(
- struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
- POLICY_HND *pol
-);
-uint32 cli_spoolss_enum_printers(
- struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
- uint32 flags,
- uint32 level,
- int *returned,
- PRINTER_INFO_CTR *ctr
-);
-uint32 cli_spoolss_enum_ports(
- struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
- uint32 level,
- int *returned,
- PORT_INFO_CTR *ctr
-);
+uint32 cli_spoolss_open_printer_ex(struct cli_state *cli, char *printername,
+ char *datatype, uint32 access_required,
+ char *station, char *username,
+ POLICY_HND *pol);
+uint32 cli_spoolss_close_printer(struct cli_state *cli, POLICY_HND *pol);
+uint32 cli_spoolss_enum_printers(struct cli_state *cli, uint32 flags,
+ uint32 level, int *returned,
+ PRINTER_INFO_CTR *ctr);
+uint32 cli_spoolss_enum_ports(struct cli_state *cli, uint32 level,
+ int *returned, PORT_INFO_CTR *ctr);
uint32 cli_spoolss_getprinter(
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
POLICY_HND *pol,
uint32 level,
PRINTER_INFO_CTR *ctr
);
uint32 cli_spoolss_setprinter(
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
POLICY_HND *pol,
uint32 level,
PRINTER_INFO_CTR *ctr,
@@ -463,7 +405,6 @@ uint32 cli_spoolss_setprinter(
);
uint32 cli_spoolss_getprinterdriver (
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
POLICY_HND *pol,
uint32 level,
char* env,
@@ -471,7 +412,6 @@ uint32 cli_spoolss_getprinterdriver (
);
uint32 cli_spoolss_enumprinterdrivers (
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
uint32 level,
char* env,
uint32 *returned,
@@ -479,49 +419,25 @@ uint32 cli_spoolss_enumprinterdrivers (
);
uint32 cli_spoolss_getprinterdriverdir (
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
uint32 level,
char* env,
DRIVER_DIRECTORY_CTR *ctr
);
uint32 cli_spoolss_addprinterdriver (
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
uint32 level,
PRINTER_DRIVER_CTR *ctr
);
uint32 cli_spoolss_addprinterex (
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
uint32 level,
PRINTER_INFO_CTR *ctr
);
-uint32 cli_spoolss_deleteprinterdriver (
- struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
- char *arch,
- char *driver
-);
-
-/*The following definitions come from libsmb/cli_srvsvc.c */
-
-struct cli_state *cli_svrsvc_initialise(struct cli_state *cli,
- char *system_name,
- struct ntuser_creds *creds);
-void cli_srvsvc_shutdown(struct cli_state *cli);
-uint32 cli_srvsvc_net_srv_get_info(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- uint32 switch_value, SRV_INFO_CTR *ctr);
-
-/*The following definitions come from libsmb/clistr.c */
-
-int clistr_push(struct cli_state *cli, void *dest, const char *src, int dest_len, int flags);
-int clistr_pull(struct cli_state *cli, char *dest, const void *src, int dest_len, int src_len, int flags);
-int clistr_align(struct cli_state *cli, const void *p, int flags);
/*The following definitions come from libsmb/clitrans.c */
BOOL cli_send_trans(struct cli_state *cli, int trans,
- char *pipe_name,
+ char *name, int pipe_name_len,
int fid, int flags,
uint16 *setup, int lsetup, int msetup,
char *param, int lparam, int mparam,
@@ -559,17 +475,12 @@ BOOL deal_with_creds(uchar sess_key[8],
struct node_status *name_status_query(int fd,struct nmb_name *name,
struct in_addr to_ip, int *num_names);
BOOL name_status_find(int type, struct in_addr to_ip, char *name);
-BOOL name_register(int fd, const char *name, int name_type,
- struct in_addr name_ip, int opcode,
- BOOL bcast,
- struct in_addr to_ip, int *count);
struct in_addr *name_query(int fd,const char *name,int name_type,
BOOL bcast,BOOL recurse,
struct in_addr to_ip, int *count);
FILE *startlmhosts(char *fname);
BOOL getlmhostsent( FILE *fp, pstring name, int *name_type, struct in_addr *ipaddr);
void endlmhosts(FILE *fp);
-BOOL name_register_wins(const char *name, int name_type);
BOOL name_resolve_bcast(const char *name, int name_type,
struct in_addr **return_ip_list, int *return_count);
BOOL resolve_name(const char *name, struct in_addr *return_ip, int name_type);
@@ -697,9 +608,8 @@ int sys_acl_set_tag_type( SMB_ACL_ENTRY_T entry, SMB_ACL_TAG_T tagtype);
int sys_acl_set_qualifier( SMB_ACL_ENTRY_T entry, void *qual);
int sys_acl_set_permset( SMB_ACL_ENTRY_T entry, SMB_ACL_PERMSET_T permset);
int sys_acl_valid( SMB_ACL_T theacl );
-int sys_acl_set_file( const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
+int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
int sys_acl_set_fd( int fd, SMB_ACL_T theacl);
-int sys_acl_delete_def_file(const char *name);
int sys_acl_free_text(char *text);
int sys_acl_free_acl(SMB_ACL_T the_acl) ;
int sys_acl_free_qualifier(void *qual) ;
@@ -719,9 +629,8 @@ int sys_acl_set_tag_type(SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T tag_type);
int sys_acl_set_qualifier(SMB_ACL_ENTRY_T entry_d, void *qual_p);
int sys_acl_set_permset(SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T permset_d);
int sys_acl_valid(SMB_ACL_T acl_d);
-int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
+int sys_acl_set_file(char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
int sys_acl_set_fd(int fd, SMB_ACL_T acl_d);
-int sys_acl_delete_def_file(const char *path);
int sys_acl_free_text(char *text);
int sys_acl_free_acl(SMB_ACL_T acl_d) ;
int sys_acl_free_qualifier(void *qual) ;
@@ -741,12 +650,32 @@ int sys_acl_set_tag_type(SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T tag_type);
int sys_acl_set_qualifier(SMB_ACL_ENTRY_T entry_d, void *qual_p);
int sys_acl_set_permset(SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T permset_d);
int sys_acl_valid(SMB_ACL_T acl_d);
-int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
+int sys_acl_set_file(char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
int sys_acl_set_fd(int fd, SMB_ACL_T acl_d);
-int sys_acl_delete_def_file(const char *name);
int sys_acl_free_text(char *text);
int sys_acl_free_acl(SMB_ACL_T acl_d) ;
int sys_acl_free_qualifier(void *qual) ;
+int sys_acl_get_entry( SMB_ACL_T the_acl, int entry_id, SMB_ACL_ENTRY_T *entry_p);
+SMB_ACL_T sys_acl_get_file( const char *path_p, SMB_ACL_TYPE_T type);
+SMB_ACL_T sys_acl_get_fd(int fd);
+char *sys_acl_to_text( SMB_ACL_T the_acl, ssize_t *plen);
+int sys_acl_valid( SMB_ACL_T theacl );
+int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
+int sys_acl_set_fd( int fd, SMB_ACL_T theacl);
+int sys_acl_create_entry( SMB_ACL_T *acl_p, SMB_ACL_ENTRY_T *entry_p);
+int sys_acl_get_tag_type( SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *tag_type_p);
+int sys_acl_get_permset( SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p);
+void *sys_acl_get_qualifier( SMB_ACL_ENTRY_T entry_d);
+int sys_acl_clear_perms(SMB_ACL_PERMSET_T permset);
+int sys_acl_get_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
+int sys_acl_add_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
+SMB_ACL_T sys_acl_init( int count);
+int sys_acl_set_tag_type( SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T tag_type);
+int sys_acl_set_qualifier( SMB_ACL_ENTRY_T entry_d, void *qual_p);
+int sys_acl_set_permset( SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T permset_d);
+int sys_acl_free_text(char *text);
+int sys_acl_free_acl(SMB_ACL_T the_acl) ;
+int sys_acl_free_qualifier(void *qual) ;
int sys_acl_get_entry( SMB_ACL_T theacl, int entry_id, SMB_ACL_ENTRY_T *entry_p);
int sys_acl_get_tag_type( SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *tag_type_p);
int sys_acl_get_permset( SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p);
@@ -762,9 +691,8 @@ int sys_acl_set_tag_type( SMB_ACL_ENTRY_T entry, SMB_ACL_TAG_T tagtype);
int sys_acl_set_qualifier( SMB_ACL_ENTRY_T entry, void *qual);
int sys_acl_set_permset( SMB_ACL_ENTRY_T entry, SMB_ACL_PERMSET_T permset);
int sys_acl_valid( SMB_ACL_T theacl );
-int sys_acl_set_file( const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
+int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
int sys_acl_set_fd( int fd, SMB_ACL_T theacl);
-int sys_acl_delete_def_file(const char *name);
int sys_acl_get_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
int sys_acl_free_text(char *text);
int sys_acl_free_acl(SMB_ACL_T posix_acl);
@@ -786,9 +714,8 @@ int sys_acl_set_tag_type( SMB_ACL_ENTRY_T entry, SMB_ACL_TAG_T tagtype);
int sys_acl_set_qualifier( SMB_ACL_ENTRY_T entry, void *qual);
int sys_acl_set_permset( SMB_ACL_ENTRY_T entry, SMB_ACL_PERMSET_T permset);
int sys_acl_valid( SMB_ACL_T theacl );
-int sys_acl_set_file( const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
+int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
int sys_acl_set_fd( int fd, SMB_ACL_T theacl);
-int sys_acl_delete_def_file(const char *name);
int sys_acl_free_acl(SMB_ACL_T the_acl) ;
int sys_acl_free_qualifier(void *qual) ;
@@ -808,8 +735,6 @@ FILE *sys_fopen(const char *path, const char *type);
SMB_STRUCT_DIRENT *sys_readdir(DIR *dirp);
int sys_waitpid(pid_t pid,int *status,int options);
char *sys_getwd(char *s);
-int sys_symlink(const char *oldpath, const char *newpath);
-int sys_readlink(const char *path, char *buf, size_t bufsiz);
int sys_chown(const char *fname,uid_t uid,gid_t gid);
int sys_chroot(const char *dname);
struct hostent *sys_gethostbyname(const char *name);
@@ -845,13 +770,11 @@ int sys_dlclose (void *handle);
TALLOC_CTX *talloc_init(void);
void *talloc(TALLOC_CTX *t, size_t size);
-void *talloc_realloc(TALLOC_CTX *t, void *ptr, size_t size);
void talloc_destroy_pool(TALLOC_CTX *t);
void talloc_destroy(TALLOC_CTX *t);
size_t talloc_pool_size(TALLOC_CTX *t);
void *talloc_zero(TALLOC_CTX *t, size_t size);
void *talloc_memdup(TALLOC_CTX *t, void *p, size_t size);
-char *talloc_strdup(TALLOC_CTX *t, char *p);
/*The following definitions come from lib/time.c */
@@ -919,8 +842,6 @@ char *attrib_string(uint16 mode);
void show_msg(char *buf);
void smb_setlen(char *buf,int len);
int set_message(char *buf,int num_words,int num_bytes,BOOL zero);
-void set_message_bcc(char *buf,int num_bytes);
-void set_message_end(void *outbuf,void *end_ptr);
void dos_clean_name(char *s);
void unix_clean_name(char *s);
void make_dir_struct(char *buf,char *mask,char *fname,SMB_OFF_T size,int mode,time_t date);
@@ -941,6 +862,7 @@ BOOL zero_ip(struct in_addr ip);
char *automount_lookup(char *user_name);
char *automount_lookup(char *user_name);
BOOL same_net(struct in_addr ip1,struct in_addr ip2,struct in_addr mask);
+struct hostent *Get_Hostbyname(const char *name);
BOOL process_exists(pid_t pid);
char *uidtoname(uid_t uid);
char *gidtoname(gid_t gid);
@@ -964,6 +886,7 @@ int str_checksum(const char *s);
void zero_free(void *p, size_t size);
int set_maxfiles(int requested_max);
BOOL reg_split_key(char *full_keyname, uint32 *reg_type, char *key_name);
+char *smbd_mktemp(char *template);
int smb_mkstemp(char *template);
void *memdup(void *p, size_t size);
char *myhostname(void);
@@ -994,13 +917,6 @@ char **file_lines_pload(char *syscmd, int *numlines, BOOL convert);
void file_lines_free(char **lines);
void file_lines_slashcont(char **lines);
-/*The following definitions come from lib/util_getent.c */
-
-struct sys_grent * getgrent_list(void);
-void grent_free (struct sys_grent *glist);
-struct sys_pwent * getpwent_list(void);
-void pwent_free (struct sys_pwent *plist);
-
/*The following definitions come from lib/util_list.c */
BOOL copy_policy_hnd (POLICY_HND *dest, const POLICY_HND *src);
@@ -1041,7 +957,6 @@ char *sid_to_string(fstring sidstr_out, DOM_SID *sid);
BOOL string_to_sid(DOM_SID *sidout, char *sidstr);
BOOL sid_append_rid(DOM_SID *sid, uint32 rid);
BOOL sid_split_rid(DOM_SID *sid, uint32 *rid);
-BOOL sid_peek_rid(DOM_SID *sid, uint32 *rid);
void sid_copy(DOM_SID *dst, const DOM_SID *src);
DOM_SID *sid_dup(DOM_SID *src);
BOOL sid_linearize(char *outbuf, size_t len, DOM_SID *sid);
@@ -1063,10 +978,12 @@ ssize_t write_socket(int fd,char *buf,size_t len);
ssize_t read_smb_length(int fd,char *inbuf,unsigned int timeout);
BOOL receive_smb(int fd,char *buffer, unsigned int timeout);
BOOL client_receive_smb(int fd,char *buffer, unsigned int timeout);
+BOOL send_null_session_msg(int fd);
BOOL send_smb(int fd,char *buffer);
BOOL send_one_packet(char *buf,int len,struct in_addr ip,int port,int type);
int open_socket_in(int type, int port, int dlevel,uint32 socket_addr, BOOL rebind);
int open_socket_out(int type, struct in_addr *addr, int port ,int timeout);
+void reset_globals_after_fork(void);
void client_setfd(int fd);
char *client_name(void);
char *client_addr(void);
@@ -1075,7 +992,6 @@ char *get_socket_addr(int fd);
int open_pipe_sock(char *path);
int create_pipe_socket(char *dir, int dir_perms,
char *path, int path_perms);
-int sock_exec(const char *prog);
/*The following definitions come from lib/util_str.c */
@@ -1211,7 +1127,6 @@ unsigned long wins_srv_count( void );
/*The following definitions come from locking/brlock.c */
void brl_init(int read_only);
-void brl_shutdown(int read_only);
BOOL brl_lock(SMB_DEV_T dev, SMB_INO_T ino, int fnum,
uint16 smbpid, pid_t pid, uint16 tid,
br_off start, br_off size,
@@ -1222,7 +1137,7 @@ BOOL brl_unlock(SMB_DEV_T dev, SMB_INO_T ino, int fnum,
BOOL brl_locktest(SMB_DEV_T dev, SMB_INO_T ino, int fnum,
uint16 smbpid, pid_t pid, uint16 tid,
br_off start, br_off size,
- enum brl_type lock_type, int check_self);
+ enum brl_type lock_type);
void brl_close(SMB_DEV_T dev, SMB_INO_T ino, pid_t pid, int tid, int fnum);
int brl_forall(BRLOCK_FN(fn));
@@ -1230,7 +1145,7 @@ int brl_forall(BRLOCK_FN(fn));
BOOL is_locked(files_struct *fsp,connection_struct *conn,
SMB_BIG_UINT count,SMB_BIG_UINT offset,
- enum brl_type lock_type, BOOL check_self);
+ enum brl_type lock_type);
BOOL do_lock(files_struct *fsp,connection_struct *conn,
SMB_BIG_UINT count,SMB_BIG_UINT offset,enum brl_type lock_type,
int *eclass,uint32 *ecode);
@@ -1274,11 +1189,15 @@ BOOL is_msdfs_link(connection_struct* conn, char* path);
BOOL get_referred_path(struct junction_map* junction);
BOOL dfs_redirect(char* pathname, connection_struct* conn);
BOOL dfs_findfirst_redirect(char* pathname, connection_struct* conn);
-int setup_dfs_referral(char* pathname, int max_referral_level, char** ppdata);
+int setup_dfs_referral(char* pathname, int max_referral_level,
+ char** ppdata);
int dfs_path_error(char* inbuf, char* outbuf);
BOOL create_msdfs_link(struct junction_map* jn, BOOL exists);
BOOL remove_msdfs_link(struct junction_map* jn);
int enum_msdfs_links(struct junction_map* jn);
+int setup_dfs_referral(char* pathname, int max_referral_level,
+ char** ppdata);
+BOOL is_msdfs_link(connection_struct* conn, char* path);
/*The following definitions come from nmbd/asyncdns.c */
@@ -1644,6 +1563,9 @@ void close_sock(void);
int write_sock(void *buffer, int count);
int read_reply(struct winbindd_response *response);
void free_response(struct winbindd_response *response);
+enum nss_status winbindd_request(int req_type,
+ struct winbindd_request *request,
+ struct winbindd_response *response);
/*The following definitions come from param/loadparm.c */
@@ -1661,7 +1583,8 @@ char *lp_os2_driver_map(void);
char *lp_lockdir(void);
char *lp_utmpdir(void);
char *lp_wtmpdir(void);
-BOOL lp_utmp(void);
+char *lp_utmp_hostname(void);
+BOOL lp_utmp_consolidate(void);
char *lp_rootdir(void);
char *lp_source_environment(void);
char *lp_defaultservice(void);
@@ -1691,8 +1614,11 @@ char *lp_panic_action(void);
char *lp_adduser_script(void);
char *lp_deluser_script(void);
char *lp_wins_hook(void);
+char *lp_domain_groups(void);
char *lp_domain_admin_group(void);
char *lp_domain_guest_group(void);
+char *lp_domain_admin_users(void);
+char *lp_domain_guest_users(void);
char *lp_winbind_uid(void);
char *lp_winbind_gid(void);
char *lp_template_homedir(void);
@@ -1733,10 +1659,8 @@ BOOL lp_use_rhosts(void);
BOOL lp_readprediction(void);
BOOL lp_readbmpx(void);
BOOL lp_readraw(void);
-BOOL lp_large_readwrite(void);
BOOL lp_writeraw(void);
BOOL lp_null_passwords(void);
-BOOL lp_obey_pam_restrictions(void);
BOOL lp_strip_dot(void);
BOOL lp_encrypted_passwords(void);
BOOL lp_update_encrypted(void);
@@ -1746,9 +1670,9 @@ BOOL lp_debug_hires_timestamp(void);
BOOL lp_debug_pid(void);
BOOL lp_debug_uid(void);
BOOL lp_browse_list(void);
+BOOL lp_unix_realname(void);
BOOL lp_nis_home_map(void);
BOOL lp_bind_interfaces_only(void);
-BOOL lp_pam_password_change(void);
BOOL lp_unix_password_sync(void);
BOOL lp_passwd_chat_debug(void);
BOOL lp_nt_smb_support(void);
@@ -1760,7 +1684,6 @@ BOOL lp_restrict_anonymous(void);
BOOL lp_lanman_auth(void);
BOOL lp_host_msdfs(void);
BOOL lp_kernel_oplocks(void);
-BOOL lp_enhanced_browsing(void);
int lp_os_level(void);
int lp_max_ttl(void);
int lp_max_wins_ttl(void);
@@ -1839,7 +1762,6 @@ BOOL lp_shortpreservecase(int );
BOOL lp_casemangle(int );
BOOL lp_status(int );
BOOL lp_hide_dot_files(int );
-BOOL lp_hideunreadable(int );
BOOL lp_browseable(int );
BOOL lp_readonly(int );
BOOL lp_no_set_dir(int );
@@ -1852,6 +1774,7 @@ BOOL lp_map_archive(int );
BOOL lp_locking(int );
BOOL lp_strict_locking(int );
BOOL lp_posix_locking(int );
+BOOL lp_utmp(int );
BOOL lp_share_modes(int );
BOOL lp_oplocks(int );
BOOL lp_level2_oplocks(int );
@@ -1873,12 +1796,12 @@ BOOL lp_blocking_locks(int );
BOOL lp_inherit_perms(int );
int lp_create_mask(int );
int lp_force_create_mode(int );
-int lp_security_mask(int );
-int lp_force_security_mode(int );
+int _lp_security_mask(int );
+int _lp_force_security_mode(int );
int lp_dir_mask(int );
int lp_force_dir_mode(int );
-int lp_dir_security_mask(int );
-int lp_force_dir_security_mode(int );
+int _lp_dir_security_mask(int );
+int _lp_force_dir_security_mode(int );
int lp_max_connections(int );
int lp_defaultcase(int );
int lp_minprintspace(int );
@@ -1920,6 +1843,10 @@ int lp_default_server_announce(void);
int lp_major_announce_version(void);
int lp_minor_announce_version(void);
void lp_set_name_resolve_order(char *new_order);
+int lp_security_mask(int snum);
+int lp_force_security_mode(int snum);
+int lp_dir_security_mask(int snum);
+int lp_force_dir_security_mode(int snum);
char *lp_printername(int snum);
/*The following definitions come from param/params.c */
@@ -1938,11 +1865,9 @@ struct passdb_ops *nisplus_initialize_password_db(void);
/*The following definitions come from passdb/pampass.c */
-BOOL smb_pam_claim_session(char *user, char *tty, char *rhost);
-BOOL smb_pam_close_session(char *user, char *tty, char *rhost);
-uint32 smb_pam_accountcheck(char * user);
-uint32 smb_pam_passcheck(char * user, char * password);
-BOOL smb_pam_passchange(char * user, char * oldpassword, char * newpassword);
+BOOL pam_session(BOOL flag, const connection_struct *conn, char *tty);
+BOOL pam_accountcheck(char * user);
+BOOL pam_passcheck(char * user, char * password);
/*The following definitions come from passdb/pass_check.c */
@@ -2017,7 +1942,6 @@ BOOL secrets_fetch_trust_account_password(char *domain, uint8 ret_pwd[16],
time_t *pass_last_set_time);
BOOL secrets_store_trust_account_password(char *domain, uint8 new_pwd[16]);
BOOL trust_password_delete(char *domain);
-void reset_globals_after_fork(void);
/*The following definitions come from passdb/smbpass.c */
@@ -2086,8 +2010,6 @@ uint32 add_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 level);
uint32 get_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL *driver, uint32 level,
fstring printername, fstring architecture, uint32 version);
uint32 free_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 level);
-BOOL printer_driver_in_use (char *arch, char *driver);
-uint32 delete_printer_driver (NT_PRINTER_DRIVER_INFO_LEVEL_3 *i);
BOOL get_specific_param_by_index(NT_PRINTER_INFO_LEVEL printer, uint32 level, uint32 param_index,
fstring value, uint8 **data, uint32 *type, uint32 *len);
BOOL get_specific_param(NT_PRINTER_INFO_LEVEL printer, uint32 level,
@@ -2109,7 +2031,7 @@ void pcap_printer_fn(void (*fn)(char *, char *));
/*The following definitions come from printing/printfsp.c */
-files_struct *print_fsp_open(connection_struct *conn);
+files_struct *print_fsp_open(connection_struct *conn,char *jobname);
void print_fsp_end(files_struct *fsp, BOOL normal_close);
/*The following definitions come from printing/print_generic.c */
@@ -2244,9 +2166,6 @@ void cli_use_wait_keyboard(void);
/*The following definitions come from rpcclient/cmd_lsarpc.c */
-/*The following definitions come from rpcclient/cmd_netlogon.c */
-
-
/*The following definitions come from rpcclient/cmd_samr.c */
@@ -2255,9 +2174,6 @@ void cli_use_wait_keyboard(void);
BOOL get_short_archi(char *short_archi, char *long_archi);
void set_drv_info_3_env (DRIVER_INFO_3 *info, const char *arch);
-/*The following definitions come from rpcclient/cmd_srvsvc.c */
-
-
/*The following definitions come from rpc_client/ncacn_np_use.c */
BOOL ncacn_np_use_del(const char *srv_name, const char *pipe_name,
@@ -2381,6 +2297,7 @@ void init_r_enum_trust_dom(LSA_R_ENUM_TRUST_DOM *r_e, uint32 enum_context,
uint32 status);
BOOL lsa_io_r_enum_trust_dom(char *desc, LSA_R_ENUM_TRUST_DOM *r_e,
prs_struct *ps, int depth);
+void lsa_free_r_enum_trust_dom(LSA_R_ENUM_TRUST_DOM * r_e);
BOOL lsa_io_dom_query_5(char *desc, DOM_QUERY_5 *d_q, prs_struct *ps, int depth);
BOOL lsa_io_r_query(char *desc, LSA_R_QUERY_INFO *r_q, prs_struct *ps,
int depth);
@@ -2404,8 +2321,6 @@ BOOL lsa_io_q_close(char *desc, LSA_Q_CLOSE *q_c, prs_struct *ps, int depth);
BOOL lsa_io_r_close(char *desc, LSA_R_CLOSE *r_c, prs_struct *ps, int depth);
BOOL lsa_io_q_open_secret(char *desc, LSA_Q_OPEN_SECRET *q_c, prs_struct *ps, int depth);
BOOL lsa_io_r_open_secret(char *desc, LSA_R_OPEN_SECRET *r_c, prs_struct *ps, int depth);
-BOOL lsa_io_q_unk_get_connuser(char *desc, LSA_Q_UNK_GET_CONNUSER *q_c, prs_struct *ps, int depth);
-BOOL lsa_io_r_unk_get_connuser(char *desc, LSA_R_UNK_GET_CONNUSER *r_c, prs_struct *ps, int depth);
/*The following definitions come from rpc_parse/parse_misc.c */
@@ -2476,28 +2391,16 @@ void init_owf_info(OWF_INFO *hash, uint8 data[16]);
BOOL smb_io_owf_info(char *desc, OWF_INFO *hash, prs_struct *ps, int depth);
BOOL smb_io_gid(char *desc, DOM_GID *gid, prs_struct *ps, int depth);
BOOL smb_io_pol_hnd(char *desc, POLICY_HND *pol, prs_struct *ps, int depth);
-void init_unistr3(UNISTR3 *str, const char *buf);
BOOL smb_io_unistr3(char *desc, UNISTR3 *name, prs_struct *ps, int depth);
BOOL prs_uint64(char *name, prs_struct *ps, int depth, UINT64_S *data64);
/*The following definitions come from rpc_parse/parse_net.c */
BOOL net_io_q_logon_ctrl2(char *desc, NET_Q_LOGON_CTRL2 *q_l, prs_struct *ps, int depth);
-void init_net_q_logon_ctrl2(NET_Q_LOGON_CTRL2 *q_l, char *srv_name,
- uint32 query_level);
-void init_net_r_logon_ctrl2(NET_R_LOGON_CTRL2 *r_l, uint32 query_level,
- uint32 flags, uint32 pdc_status,
- uint32 logon_attempts, uint32 tc_status,
- char *trusted_domain_name);
+void init_r_logon_ctrl2(NET_R_LOGON_CTRL2 *r_l, uint32 query_level,
+ uint32 flags, uint32 pdc_status, uint32 logon_attempts,
+ uint32 tc_status, char *trusted_domain_name);
BOOL net_io_r_logon_ctrl2(char *desc, NET_R_LOGON_CTRL2 *r_l, prs_struct *ps, int depth);
-BOOL net_io_q_logon_ctrl(char *desc, NET_Q_LOGON_CTRL *q_l, prs_struct *ps,
- int depth);
-void init_net_q_logon_ctrl(NET_Q_LOGON_CTRL *q_l, char *srv_name,
- uint32 query_level);
-void init_net_r_logon_ctrl(NET_R_LOGON_CTRL *r_l, uint32 query_level,
- uint32 flags, uint32 pdc_status);
-BOOL net_io_r_logon_ctrl(char *desc, NET_R_LOGON_CTRL *r_l, prs_struct *ps,
- int depth);
void init_r_trust_dom(NET_R_TRUST_DOM_LIST *r_t,
uint32 num_doms, char *dom_name);
BOOL net_io_r_trust_dom(char *desc, NET_R_TRUST_DOM_LIST *r_t, prs_struct *ps, int depth);
@@ -2507,8 +2410,6 @@ void init_q_req_chal(NET_Q_REQ_CHAL *q_c,
DOM_CHAL *clnt_chal);
BOOL net_io_q_req_chal(char *desc, NET_Q_REQ_CHAL *q_c, prs_struct *ps, int depth);
BOOL net_io_r_req_chal(char *desc, NET_R_REQ_CHAL *r_c, prs_struct *ps, int depth);
-BOOL net_io_q_auth(char *desc, NET_Q_AUTH *q_a, prs_struct *ps, int depth);
-BOOL net_io_r_auth(char *desc, NET_R_AUTH *r_a, prs_struct *ps, int depth);
void init_q_auth_2(NET_Q_AUTH_2 *q_a,
char *logon_srv, char *acct_name, uint16 sec_chan, char *comp_name,
DOM_CHAL *clnt_chal, uint32 clnt_flgs);
@@ -2814,19 +2715,19 @@ void init_samr_q_query_dispinfo(SAMR_Q_QUERY_DISPINFO * q_e, POLICY_HND *pol,
uint32 max_entries);
BOOL samr_io_q_query_dispinfo(char *desc, SAMR_Q_QUERY_DISPINFO * q_e,
prs_struct *ps, int depth);
-uint32 init_sam_dispinfo_1(TALLOC_CTX *ctx, SAM_DISPINFO_1 *sam, uint32 *num_entries,
+void init_sam_dispinfo_1(SAM_DISPINFO_1 * sam, uint32 *num_entries,
uint32 *data_size, uint32 start_idx,
SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES]);
-uint32 init_sam_dispinfo_2(TALLOC_CTX *ctx, SAM_DISPINFO_2 *sam, uint32 *num_entries,
+void init_sam_dispinfo_2(SAM_DISPINFO_2 * sam, uint32 *num_entries,
uint32 *data_size, uint32 start_idx,
SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES]);
-uint32 init_sam_dispinfo_3(TALLOC_CTX *ctx, SAM_DISPINFO_3 *sam, uint32 *num_entries,
+void init_sam_dispinfo_3(SAM_DISPINFO_3 * sam, uint32 *num_entries,
uint32 *data_size, uint32 start_idx,
DOMAIN_GRP * grp);
-uint32 init_sam_dispinfo_4(TALLOC_CTX *ctx, SAM_DISPINFO_4 *sam, uint32 *num_entries,
+void init_sam_dispinfo_4(SAM_DISPINFO_4 * sam, uint32 *num_entries,
uint32 *data_size, uint32 start_idx,
SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES]);
-uint32 init_sam_dispinfo_5(TALLOC_CTX *ctx, SAM_DISPINFO_5 *sam, uint32 *num_entries,
+void init_sam_dispinfo_5(SAM_DISPINFO_5 * sam, uint32 *num_entries,
uint32 *data_size, uint32 start_idx,
DOMAIN_GRP * grp);
void init_samr_r_query_dispinfo(SAMR_R_QUERY_DISPINFO * r_u,
@@ -2972,7 +2873,7 @@ BOOL samr_io_rids(char *desc, uint32 *num_rids, uint32 **rid,
BOOL samr_io_r_query_useraliases(char *desc, SAMR_R_QUERY_USERALIASES * r_u,
prs_struct *ps, int depth);
void init_samr_q_open_alias(SAMR_Q_OPEN_ALIAS * q_u, POLICY_HND *pol,
- uint32 access_mask, uint32 rid);
+ uint32 unknown_0, uint32 rid);
BOOL samr_io_q_open_alias(char *desc, SAMR_Q_OPEN_ALIAS * q_u,
prs_struct *ps, int depth);
BOOL samr_io_r_open_alias(char *desc, SAMR_R_OPEN_ALIAS * r_u,
@@ -3027,12 +2928,12 @@ void init_samr_r_query_aliasmem(SAMR_R_QUERY_ALIASMEM * r_u,
uint32 status);
BOOL samr_io_r_query_aliasmem(char *desc, SAMR_R_QUERY_ALIASMEM * r_u,
prs_struct *ps, int depth);
-uint32 init_samr_q_lookup_names(TALLOC_CTX *ctx, SAMR_Q_LOOKUP_NAMES * q_u,
+void init_samr_q_lookup_names(SAMR_Q_LOOKUP_NAMES * q_u,
POLICY_HND *pol, uint32 flags,
uint32 num_names, char **name);
BOOL samr_io_q_lookup_names(char *desc, SAMR_Q_LOOKUP_NAMES * q_u,
prs_struct *ps, int depth);
-uint32 init_samr_r_lookup_names(TALLOC_CTX *ctx, SAMR_R_LOOKUP_NAMES * r_u,
+void init_samr_r_lookup_names(TALLOC_CTX *ctx, SAMR_R_LOOKUP_NAMES * r_u,
uint32 num_rids,
uint32 *rid, uint32 *type,
uint32 status);
@@ -3070,7 +2971,8 @@ void init_sam_user_info11(SAM_USER_INFO_11 * usr,
NTTIME * expiry,
char *mach_acct,
uint32 rid_user, uint32 rid_group, uint16 acct_ctrl);
-void init_sam_user_info24(SAM_USER_INFO_24 * usr, char newpass[516]);
+void init_sam_user_info24(SAM_USER_INFO_24 * usr,
+ char newpass[516], uint16 passlen);
void init_sam_user_info23W(SAM_USER_INFO_23 * usr, NTTIME * logon_time, /* all zeros */
NTTIME * logoff_time, /* all zeros */
NTTIME * kickoff_time, /* all zeros */
@@ -3257,7 +3159,6 @@ BOOL make_spoolss_q_open_printer_ex(SPOOL_Q_OPEN_PRINTER_EX *q_u,
const fstring clientname,
const fstring user_name);
BOOL make_spoolss_q_addprinterex(
- TALLOC_CTX *mem_ctx,
SPOOL_Q_ADDPRINTEREX *q_u,
const char *srv_name,
const char* clientname,
@@ -3265,18 +3166,10 @@ BOOL make_spoolss_q_addprinterex(
uint32 level,
PRINTER_INFO_CTR *ctr);
BOOL make_spoolss_printer_info_2(
- TALLOC_CTX *mem_ctx,
SPOOL_PRINTER_INFO_LEVEL_2 **spool_info2,
PRINTER_INFO_2 *info
);
BOOL spoolss_io_q_open_printer_ex(char *desc, SPOOL_Q_OPEN_PRINTER_EX *q_u, prs_struct *ps, int depth);
-BOOL make_spoolss_q_deleteprinterdriver(
- TALLOC_CTX *mem_ctx,
- SPOOL_Q_DELETEPRINTERDRIVER *q_u,
- const char *server,
- const char* arch,
- const char* driver
-);
BOOL spoolss_io_r_open_printer_ex(char *desc, SPOOL_R_OPEN_PRINTER_EX *r_u, prs_struct *ps, int depth);
BOOL make_spoolss_q_getprinterdata(SPOOL_Q_GETPRINTERDATA *q_u,
const POLICY_HND *handle,
@@ -3290,8 +3183,6 @@ BOOL spoolss_io_q_abortprinter(char *desc, SPOOL_Q_ABORTPRINTER *q_u, prs_struct
BOOL spoolss_io_r_abortprinter(char *desc, SPOOL_R_ABORTPRINTER *r_u, prs_struct *ps, int depth);
BOOL spoolss_io_q_deleteprinter(char *desc, SPOOL_Q_DELETEPRINTER *q_u, prs_struct *ps, int depth);
BOOL spoolss_io_r_deleteprinter(char *desc, SPOOL_R_DELETEPRINTER *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_deleteprinterdriver(char *desc, SPOOL_Q_DELETEPRINTERDRIVER *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_deleteprinterdriver(char *desc, SPOOL_R_DELETEPRINTERDRIVER *r_u, prs_struct *ps, int depth);
BOOL spoolss_io_q_closeprinter(char *desc, SPOOL_Q_CLOSEPRINTER *q_u, prs_struct *ps, int depth);
BOOL spoolss_io_r_closeprinter(char *desc, SPOOL_R_CLOSEPRINTER *r_u, prs_struct *ps, int depth);
BOOL spoolss_io_q_startdocprinter(char *desc, SPOOL_Q_STARTDOCPRINTER *q_u, prs_struct *ps, int depth);
@@ -3356,14 +3247,9 @@ BOOL make_spoolss_q_getprinterdriver2(SPOOL_Q_GETPRINTERDRIVER2 *q_u,
NEW_BUFFER *buffer, uint32 offered);
BOOL spoolss_io_q_getprinterdriver2(char *desc, SPOOL_Q_GETPRINTERDRIVER2 *q_u, prs_struct *ps, int depth);
BOOL spoolss_io_r_getprinterdriver2(char *desc, SPOOL_R_GETPRINTERDRIVER2 *r_u, prs_struct *ps, int depth);
-BOOL make_spoolss_q_enumprinters(
- SPOOL_Q_ENUMPRINTERS *q_u,
- uint32 flags,
- fstring servername,
- uint32 level,
- NEW_BUFFER *buffer,
- uint32 offered
-);
+BOOL make_spoolss_q_enumprinters(SPOOL_Q_ENUMPRINTERS *q_u, uint32 flags,
+ fstring servername, uint32 level,
+ NEW_BUFFER *buffer, uint32 offered);
BOOL make_spoolss_q_enumports(SPOOL_Q_ENUMPORTS *q_u,
fstring servername, uint32 level,
NEW_BUFFER *buffer, uint32 offered);
@@ -3372,7 +3258,6 @@ BOOL spoolss_io_r_enumprinters(char *desc, SPOOL_R_ENUMPRINTERS *r_u, prs_struct
BOOL spoolss_io_r_getprinter(char *desc, SPOOL_R_GETPRINTER *r_u, prs_struct *ps, int depth);
BOOL spoolss_io_q_getprinter(char *desc, SPOOL_Q_GETPRINTER *q_u, prs_struct *ps, int depth);
BOOL make_spoolss_q_getprinter(
- TALLOC_CTX *mem_ctx,
SPOOL_Q_GETPRINTER *q_u,
const POLICY_HND *hnd,
uint32 level,
@@ -3380,7 +3265,6 @@ BOOL make_spoolss_q_getprinter(
uint32 offered
);
BOOL make_spoolss_q_setprinter(
- TALLOC_CTX *mem_ctx,
SPOOL_Q_SETPRINTER *q_u,
const POLICY_HND *hnd,
uint32 level,
@@ -3432,22 +3316,15 @@ BOOL spool_io_printer_driver_info_level_6(char *desc, SPOOL_PRINTER_DRIVER_INFO_
BOOL smb_io_unibuffer(char *desc, UNISTR2 *buffer, prs_struct *ps, int depth);
BOOL spool_io_printer_driver_info_level(char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL *il, prs_struct *ps, int depth);
BOOL make_spoolss_q_addprinterdriver(
- TALLOC_CTX *mem_ctx,
SPOOL_Q_ADDPRINTERDRIVER *q_u,
const char* srv_name,
uint32 level,
PRINTER_DRIVER_CTR *info);
BOOL make_spoolss_driver_info_3(
- TALLOC_CTX *mem_ctx,
SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **spool_drv_info,
DRIVER_INFO_3 *info3
);
-BOOL make_spoolss_buffer5(
- TALLOC_CTX *mem_ctx,
- BUFFER5 *buf5,
- uint32 len,
- uint16 *src
-);
+BOOL make_spoolss_buffer5(BUFFER5 *buf5, uint32 len, uint16 *src);
BOOL spoolss_io_q_addprinterdriver(char *desc, SPOOL_Q_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth);
BOOL spoolss_io_r_addprinterdriver(char *desc, SPOOL_R_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth);
BOOL uni_2_asc_printer_driver_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *uni,
@@ -3463,8 +3340,6 @@ BOOL spoolss_io_q_getprinterdriverdir(char *desc, SPOOL_Q_GETPRINTERDRIVERDIR *q
BOOL spoolss_io_r_getprinterdriverdir(char *desc, SPOOL_R_GETPRINTERDRIVERDIR *r_u, prs_struct *ps, int depth);
BOOL spoolss_io_r_enumprintprocessors(char *desc, SPOOL_R_ENUMPRINTPROCESSORS *r_u, prs_struct *ps, int depth);
BOOL spoolss_io_q_enumprintprocessors(char *desc, SPOOL_Q_ENUMPRINTPROCESSORS *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_addprintprocessor(char *desc, SPOOL_Q_ADDPRINTPROCESSOR *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_addprintprocessor(char *desc, SPOOL_R_ADDPRINTPROCESSOR *r_u, prs_struct *ps, int depth);
BOOL spoolss_io_r_enumprintprocdatatypes(char *desc, SPOOL_R_ENUMPRINTPROCDATATYPES *r_u, prs_struct *ps, int depth);
BOOL spoolss_io_q_enumprintprocdatatypes(char *desc, SPOOL_Q_ENUMPRINTPROCDATATYPES *q_u, prs_struct *ps, int depth);
BOOL spoolss_io_q_enumprintmonitors(char *desc, SPOOL_Q_ENUMPRINTMONITORS *q_u, prs_struct *ps, int depth);
@@ -3518,8 +3393,7 @@ void init_srv_share_info502(SH_INFO_502 *sh502,
char *net_name, uint32 type, char *remark,
uint32 perms, uint32 max_uses, uint32 num_uses,
char *path, char *passwd, SEC_DESC *psd, size_t sd_size);
-void init_srv_share_info502_str(SH_INFO_502_STR *sh502str,
- SH_INFO_502 *ptrs,
+void init_srv_share_info502_str(SH_INFO_502_STR *sh502,
char *net_name, char *remark,
char *path, char *passwd, SEC_DESC *psd, size_t sd_size);
void init_srv_q_net_share_enum(SRV_Q_NET_SHARE_ENUM *q_n,
@@ -3587,27 +3461,13 @@ void init_srv_q_net_srv_get_info(SRV_Q_NET_SRV_GET_INFO *srv,
BOOL srv_io_q_net_srv_get_info(char *desc, SRV_Q_NET_SRV_GET_INFO *q_n, prs_struct *ps, int depth);
void init_srv_r_net_srv_get_info(SRV_R_NET_SRV_GET_INFO *srv,
uint32 switch_value, SRV_INFO_CTR *ctr, uint32 status);
-void init_srv_r_net_srv_set_info(SRV_R_NET_SRV_SET_INFO *srv,
- uint32 switch_value, uint32 status);
-BOOL srv_io_q_net_srv_set_info(char *desc, SRV_Q_NET_SRV_SET_INFO *q_n,
- prs_struct *ps, int depth);
BOOL srv_io_r_net_srv_get_info(char *desc, SRV_R_NET_SRV_GET_INFO *r_n, prs_struct *ps, int depth);
-BOOL srv_io_r_net_srv_set_info(char *desc, SRV_R_NET_SRV_SET_INFO *r_n,
- prs_struct *ps, int depth);
BOOL srv_io_q_net_remote_tod(char *desc, SRV_Q_NET_REMOTE_TOD *q_n, prs_struct *ps, int depth);
void init_time_of_day_info(TIME_OF_DAY_INFO *tod, uint32 elapsedt, uint32 msecs,
uint32 hours, uint32 mins, uint32 secs, uint32 hunds,
uint32 zone, uint32 tintervals, uint32 day,
uint32 month, uint32 year, uint32 weekday);
BOOL srv_io_r_net_remote_tod(char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *ps, int depth);
-BOOL srv_io_q_net_disk_enum(char *desc, SRV_Q_NET_DISK_ENUM *q_n, prs_struct *ps, int depth);
-BOOL srv_io_r_net_disk_enum(char *desc, SRV_R_NET_DISK_ENUM *r_n, prs_struct *ps, int depth);
-BOOL srv_io_q_net_name_validate(char *desc, SRV_Q_NET_NAME_VALIDATE *q_n, prs_struct *ps, int depth);
-BOOL srv_io_r_net_name_validate(char *desc, SRV_R_NET_NAME_VALIDATE *r_n, prs_struct *ps, int depth);
-BOOL srv_io_q_net_file_query_secdesc(char *desc, SRV_Q_NET_FILE_QUERY_SECDESC *q_n, prs_struct *ps, int depth);
-BOOL srv_io_r_net_file_query_secdesc(char *desc, SRV_R_NET_FILE_QUERY_SECDESC *r_n, prs_struct *ps, int depth);
-BOOL srv_io_q_net_file_set_secdesc(char *desc, SRV_Q_NET_FILE_SET_SECDESC *q_n, prs_struct *ps, int depth);
-BOOL srv_io_r_net_file_set_secdesc(char *desc, SRV_R_NET_FILE_SET_SECDESC *r_n, prs_struct *ps, int depth);
/*The following definitions come from rpc_parse/parse_wks.c */
@@ -3656,7 +3516,6 @@ uint32 _lsa_lookup_sids(pipes_struct *p, LSA_Q_LOOKUP_SIDS *q_u, LSA_R_LOOKUP_SI
uint32 _lsa_lookup_names(pipes_struct *p,LSA_Q_LOOKUP_NAMES *q_u, LSA_R_LOOKUP_NAMES *r_u);
uint32 _lsa_close(pipes_struct *p, LSA_Q_CLOSE *q_u, LSA_R_CLOSE *r_u);
uint32 _lsa_open_secret(pipes_struct *p, LSA_Q_OPEN_SECRET *q_u, LSA_R_OPEN_SECRET *r_u);
-uint32 _lsa_unk_get_connuser(pipes_struct *p, LSA_Q_UNK_GET_CONNUSER *q_u, LSA_R_UNK_GET_CONNUSER *r_u);
/*The following definitions come from rpc_server/srv_netlog.c */
@@ -3667,7 +3526,6 @@ BOOL api_netlog_rpc(pipes_struct *p);
uint32 _net_logon_ctrl2(pipes_struct *p, NET_Q_LOGON_CTRL2 *q_u, NET_R_LOGON_CTRL2 *r_u);
uint32 _net_trust_dom_list(pipes_struct *p, NET_Q_TRUST_DOM_LIST *q_u, NET_R_TRUST_DOM_LIST *r_u);
uint32 _net_req_chal(pipes_struct *p, NET_Q_REQ_CHAL *q_u, NET_R_REQ_CHAL *r_u);
-uint32 _net_auth(pipes_struct *p, NET_Q_AUTH *q_u, NET_R_AUTH *r_u);
uint32 _net_auth_2(pipes_struct *p, NET_Q_AUTH_2 *q_u, NET_R_AUTH_2 *r_u);
uint32 _net_srv_pwset(pipes_struct *p, NET_Q_SRV_PWSET *q_u, NET_R_SRV_PWSET *r_u);
uint32 _net_sam_logoff(pipes_struct *p, NET_Q_SAM_LOGOFF *q_u, NET_R_SAM_LOGOFF *r_u);
@@ -3677,7 +3535,7 @@ uint32 _net_sam_logon(pipes_struct *p, NET_Q_SAM_LOGON *q_u, NET_R_SAM_LOGON *r_
BOOL create_next_pdu(pipes_struct *p);
BOOL api_pipe_bind_auth_resp(pipes_struct *p, prs_struct *rpc_in_p);
-BOOL setup_fault_pdu(pipes_struct *p, uint32 status);
+BOOL setup_fault_pdu(pipes_struct *p);
BOOL check_bind_req(char* pipe_name, RPC_IFACE* abstract,
RPC_IFACE* transfer);
BOOL api_pipe_bind_req(pipes_struct *p, prs_struct *rpc_in_p);
@@ -3770,13 +3628,12 @@ BOOL api_spoolss_rpc(pipes_struct *p);
/*The following definitions come from rpc_server/srv_spoolss_nt.c */
+void srv_spoolss_receive_message(int msg_type, pid_t src, void *buf, size_t len);
uint32 _spoolss_open_printer_ex( pipes_struct *p, SPOOL_Q_OPEN_PRINTER_EX *q_u, SPOOL_R_OPEN_PRINTER_EX *r_u);
BOOL convert_devicemode(char *printername, const DEVICEMODE *devmode,
NT_DEVICEMODE **pp_nt_devmode);
uint32 _spoolss_closeprinter(pipes_struct *p, SPOOL_Q_CLOSEPRINTER *q_u, SPOOL_R_CLOSEPRINTER *r_u);
uint32 _spoolss_deleteprinter(pipes_struct *p, SPOOL_Q_DELETEPRINTER *q_u, SPOOL_R_DELETEPRINTER *r_u);
-uint32 _spoolss_deleteprinterdriver(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIVER *q_u,
- SPOOL_R_DELETEPRINTERDRIVER *r_u);
uint32 _spoolss_getprinterdata(pipes_struct *p, SPOOL_Q_GETPRINTERDATA *q_u, SPOOL_R_GETPRINTERDATA *r_u);
uint32 _spoolss_rffpcnex(pipes_struct *p, SPOOL_Q_RFFPCNEX *q_u, SPOOL_R_RFFPCNEX *r_u);
uint32 _spoolss_rfnpcnex( pipes_struct *p, SPOOL_Q_RFNPCNEX *q_u, SPOOL_R_RFNPCNEX *r_u);
@@ -3823,7 +3680,6 @@ BOOL share_info_db_init(void);
void map_generic_share_sd_bits(SEC_DESC *psd);
BOOL share_access_check(connection_struct *conn, int snum, uint16 vuid, uint32 desired_access);
uint32 _srv_net_srv_get_info(pipes_struct *p, SRV_Q_NET_SRV_GET_INFO *q_u, SRV_R_NET_SRV_GET_INFO *r_u);
-uint32 _srv_net_srv_set_info(pipes_struct *p, SRV_Q_NET_SRV_SET_INFO *q_u, SRV_R_NET_SRV_SET_INFO *r_u);
uint32 _srv_net_file_enum(pipes_struct *p, SRV_Q_NET_FILE_ENUM *q_u, SRV_R_NET_FILE_ENUM *r_u);
uint32 _srv_net_conn_enum(pipes_struct *p, SRV_Q_NET_CONN_ENUM *q_u, SRV_R_NET_CONN_ENUM *r_u);
uint32 _srv_net_sess_enum(pipes_struct *p, SRV_Q_NET_SESS_ENUM *q_u, SRV_R_NET_SESS_ENUM *r_u);
@@ -3834,12 +3690,6 @@ uint32 _srv_net_share_set_info(pipes_struct *p, SRV_Q_NET_SHARE_SET_INFO *q_u, S
uint32 _srv_net_share_add(pipes_struct *p, SRV_Q_NET_SHARE_ADD *q_u, SRV_R_NET_SHARE_ADD *r_u);
uint32 _srv_net_share_del(pipes_struct *p, SRV_Q_NET_SHARE_DEL *q_u, SRV_R_NET_SHARE_DEL *r_u);
uint32 _srv_net_remote_tod(pipes_struct *p, SRV_Q_NET_REMOTE_TOD *q_u, SRV_R_NET_REMOTE_TOD *r_u);
-uint32 _srv_net_file_query_secdesc(pipes_struct *p, SRV_Q_NET_FILE_QUERY_SECDESC *q_u,
- SRV_R_NET_FILE_QUERY_SECDESC *r_u);
-uint32 _srv_net_file_set_secdesc(pipes_struct *p, SRV_Q_NET_FILE_SET_SECDESC *q_u,
- SRV_R_NET_FILE_SET_SECDESC *r_u);
-uint32 _srv_net_disk_enum(pipes_struct *p, SRV_Q_NET_DISK_ENUM *q_u, SRV_R_NET_DISK_ENUM *r_u);
-uint32 _srv_net_name_validate(pipes_struct *p, SRV_Q_NET_NAME_VALIDATE *q_u, SRV_R_NET_NAME_VALIDATE *r_u);
/*The following definitions come from rpc_server/srv_util.c */
@@ -3903,7 +3753,6 @@ connection_struct *conn_new(void);
void conn_close_all(void);
BOOL conn_idle_all(time_t t, int deadtime);
void conn_free(connection_struct *conn);
-void msg_force_tdis(int msg_type, pid_t pid, void *buf, size_t len);
/*The following definitions come from smbd/connection.c */
@@ -4110,12 +3959,11 @@ void generate_next_challenge(char *challenge);
BOOL set_challenge(unsigned char *challenge);
user_struct *get_valid_user_struct(uint16 vuid);
void invalidate_vuid(uint16 vuid);
-void invalidate_all_vuids(void);
char *validated_username(uint16 vuid);
char *validated_domain(uint16 vuid);
NT_USER_TOKEN *create_nt_token(uid_t uid, gid_t gid, int ngroups, gid_t *groups, BOOL is_guest);
-int register_vuid(uid_t uid,gid_t gid, char *unix_name, char *requested_name,
- char *domain,BOOL guest);
+uint16 register_vuid(uid_t uid,gid_t gid, char *unix_name, char *requested_name,
+ char *domain,BOOL guest);
void add_session_user(char *user);
BOOL smb_password_check(char *password, unsigned char *part_passwd, unsigned char *c8);
BOOL smb_password_ok(struct smb_passwd *smb_pass, uchar chal[8],
@@ -4267,11 +4115,6 @@ int find_service(char *service);
connection_struct *make_connection(char *service,char *user,char *password, int pwlen, char *dev,uint16 vuid, int *ecode);
void close_cnum(connection_struct *conn, uint16 vuid);
-/*The following definitions come from smbd/session.c */
-
-BOOL session_claim(uint16 vuid);
-void session_yield(uint16 vuid);
-
/*The following definitions come from smbd/ssl.c */
int sslutil_init(int isServer);
@@ -4315,16 +4158,10 @@ DOM_SID *gid_to_sid(DOM_SID *psid, gid_t gid);
BOOL sid_to_uid(DOM_SID *psid, uid_t *puid, enum SID_NAME_USE *sidtype);
BOOL sid_to_gid(DOM_SID *psid, gid_t *pgid, enum SID_NAME_USE *sidtype);
-/*The following definitions come from smbd/utmp.c */
-
-void sys_utmp_yield(const char *username, const char *hostname,
- const char *id_str, int id_num);
-void sys_utmp_claim(const char *username, const char *hostname,
- const char *id_str, int id_num);
-
/*The following definitions come from smbd/vfs.c */
-BOOL vfs_init(connection_struct *conn);
+int vfs_init_default(connection_struct *conn);
+BOOL vfs_init_custom(connection_struct *conn);
BOOL vfs_directory_exist(connection_struct *conn, char *dname, SMB_STRUCT_STAT *st);
int vfs_mkdir(connection_struct *conn, char *fname, mode_t mode);
char *vfs_getwd(connection_struct *conn, char *unix_path);
@@ -4371,8 +4208,6 @@ char *vfswrap_getwd(connection_struct *conn, char *path);
int vfswrap_utime(connection_struct *conn, char *path, struct utimbuf *times);
int vfswrap_ftruncate(files_struct *fsp, int fd, SMB_OFF_T len);
BOOL vfswrap_lock(files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type);
-int vfswrap_symlink(connection_struct *conn, const char *oldpath, const char *newpath);
-int vfswrap_readlink(connection_struct *conn, const char *path, char *buf, size_t bufsiz);
size_t vfswrap_fget_nt_acl(files_struct *fsp, int fd, SEC_DESC **ppdesc);
size_t vfswrap_get_nt_acl(files_struct *fsp, char *name, SEC_DESC **ppdesc);
BOOL vfswrap_fset_nt_acl(files_struct *fsp, int fd, uint32 security_info_sent, SEC_DESC *psd);
@@ -4470,9 +4305,7 @@ int tdb_clear_spinlocks(TDB_CONTEXT *tdb);
/*The following definitions come from tdb/tdb.c */
-void tdb_dump_all(TDB_CONTEXT *tdb);
void tdb_printfreelist(TDB_CONTEXT *tdb);
-enum TDB_ERROR tdb_error(TDB_CONTEXT *tdb);
const char *tdb_errorstr(TDB_CONTEXT *tdb);
TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key);
int tdb_exists(TDB_CONTEXT *tdb, TDB_DATA key);
@@ -4490,7 +4323,6 @@ int tdb_lockkeys(TDB_CONTEXT *tdb, u32 number, TDB_DATA keys[]);
void tdb_unlockkeys(TDB_CONTEXT *tdb);
int tdb_chainlock(TDB_CONTEXT *tdb, TDB_DATA key);
void tdb_chainunlock(TDB_CONTEXT *tdb, TDB_DATA key);
-void tdb_logging_function(TDB_CONTEXT *tdb, void (*fn)(TDB_CONTEXT *, int , const char *, ...));
/*The following definitions come from tdb/tdbutil.c */
@@ -4502,11 +4334,8 @@ int tdb_store_int_byblob(TDB_CONTEXT *tdb, char *keystr, size_t len, int v);
int tdb_store_int(TDB_CONTEXT *tdb, char *keystr, int v);
int tdb_store_by_string(TDB_CONTEXT *tdb, char *keystr, void *buffer, int len);
TDB_DATA tdb_fetch_by_string(TDB_CONTEXT *tdb, char *keystr);
-int tdb_change_int_atomic(TDB_CONTEXT *tdb, char *keystr, int *oldval, int change_val);
size_t tdb_pack(char *buf, int bufsize, char *fmt, ...);
int tdb_unpack(char *buf, int bufsize, char *fmt, ...);
-TDB_CONTEXT *tdb_open_log(char *name, int hash_size, int tdb_flags,
- int open_flags, mode_t mode);
/*The following definitions come from utils/nbio.c */
@@ -4524,7 +4353,6 @@ void nb_create(char *fname, int size);
/*The following definitions come from utils/torture.c */
-void new_trans(struct cli_state *pcli, int fnum, int level);
/*The following definitions come from web/cgi.c */
diff --git a/source/include/rpc_lsa.h b/source/include/rpc_lsa.h
index 1a6e178068a..ad7fa31365e 100644
--- a/source/include/rpc_lsa.h
+++ b/source/include/rpc_lsa.h
@@ -48,7 +48,6 @@ enum SID_NAME_USE
#define LSA_OPENPOLICY 0x06
#define LSA_OPENPOLICY2 0x2c
#define LSA_OPENSECRET 0x1C
-#define LSA_UNK_GET_CONNUSER 0x2d /* LsaGetConnectedCredentials ? */
/* XXXX these are here to get a compile! */
#define LSA_LOOKUPRIDS 0xFD
@@ -381,31 +380,4 @@ typedef struct lsa_r_open_secret
uint32 status;
} LSA_R_OPEN_SECRET;
-/* LSA_Q_UNK_GET_CONNUSER - gets username\domain of connected user
- called when "Take Ownership" is clicked -SK */
-typedef struct lsa_q_unk_get_connuser
-{
- uint32 ptr_srvname;
- UNISTR2 uni2_srvname;
- uint32 unk1; /* 3 unknown uint32's are seen right after uni2_srvname */
- uint32 unk2; /* unk2 appears to be a ptr, unk1 = unk3 = 0 usually */
- uint32 unk3;
-} LSA_Q_UNK_GET_CONNUSER;
-
-/* LSA_R_UNK_GET_CONNUSER */
-typedef struct lsa_r_unk_get_connuser
-{
- uint32 ptr_user_name;
- UNIHDR hdr_user_name;
- UNISTR2 uni2_user_name;
-
- uint32 unk1;
-
- uint32 ptr_dom_name;
- UNIHDR hdr_dom_name;
- UNISTR2 uni2_dom_name;
-
- uint32 status;
-} LSA_R_UNK_GET_CONNUSER;
-
#endif /* _RPC_LSA_H */
diff --git a/source/include/rpc_netlogon.h b/source/include/rpc_netlogon.h
index f15cec3ca9a..29b17e6a059 100644
--- a/source/include/rpc_netlogon.h
+++ b/source/include/rpc_netlogon.h
@@ -26,22 +26,17 @@
/* NETLOGON pipe */
-#define NET_SAMLOGON 0x02
-#define NET_SAMLOGOFF 0x03
#define NET_REQCHAL 0x04
-#define NET_AUTH 0x05
#define NET_SRVPWSET 0x06
-#define NET_SAM_DELTAS 0x07
-#define NET_LOGON_CTRL 0x0c
+#define NET_SAMLOGON 0x02
+#define NET_SAMLOGOFF 0x03
#define NET_AUTH2 0x0f
#define NET_LOGON_CTRL2 0x0e
-#define NET_SAM_SYNC 0x10
#define NET_TRUST_DOM_LIST 0x13
/* Secure Channel types. used in NetrServerAuthenticate negotiation */
#define SEC_CHAN_WKSTA 2
#define SEC_CHAN_DOMAIN 4
-#define SEC_CHAN_BDC 6
#if 0
/* I think this is correct - it's what gets parsed on the wire. JRA. */
@@ -164,6 +159,25 @@ typedef struct net_user_info_3
} NET_USER_INFO_3;
+/********************************************************
+ Logon Control Query
+
+ query_level 0x1 - pdc status
+ query_level 0x3 - number of logon attempts.
+
+ ********************************************************/
+/* NET_Q_LOGON_CTRL2 - LSA Netr Logon Control 2*/
+typedef struct net_q_logon_ctrl2_info
+{
+ uint32 ptr; /* undocumented buffer pointer */
+ UNISTR2 uni_server_name; /* server name, starting with two '\'s */
+
+ uint32 function_code; /* 0x1 */
+ uint32 query_level; /* 0x1, 0x3 */
+ uint32 switch_value; /* 0x1 */
+
+} NET_Q_LOGON_CTRL2;
+
/* NETLOGON_INFO_1 - pdc status info, i presume */
typedef struct netlogon_1_info
{
@@ -196,59 +210,6 @@ typedef struct netlogon_3_info
} NETLOGON_INFO_3;
-/********************************************************
- Logon Control Query
-
- This is generated by a nltest /bdc_query:DOMAIN
-
- query_level 0x1, function_code 0x1
-
- ********************************************************/
-
-/* NET_Q_LOGON_CTRL - LSA Netr Logon Control */
-
-typedef struct net_q_logon_ctrl_info
-{
- uint32 ptr;
- UNISTR2 uni_server_name;
- uint32 function_code;
- uint32 query_level;
-} NET_Q_LOGON_CTRL;
-
-/* NET_R_LOGON_CTRL - LSA Netr Logon Control */
-
-typedef struct net_r_logon_ctrl_info
-{
- uint32 switch_value;
- uint32 ptr;
-
- union {
- NETLOGON_INFO_1 info1;
- } logon;
-
- uint32 status;
-} NET_R_LOGON_CTRL;
-
-/********************************************************
- Logon Control2 Query
-
- query_level 0x1 - pdc status
- query_level 0x3 - number of logon attempts.
-
- ********************************************************/
-
-/* NET_Q_LOGON_CTRL2 - LSA Netr Logon Control 2 */
-typedef struct net_q_logon_ctrl2_info
-{
- uint32 ptr; /* undocumented buffer pointer */
- UNISTR2 uni_server_name; /* server name, starting with two '\'s */
-
- uint32 function_code; /* 0x1 */
- uint32 query_level; /* 0x1, 0x3 */
- uint32 switch_value; /* 0x1 */
-
-} NET_Q_LOGON_CTRL2;
-
/*******************************************************
Logon Control Response
@@ -321,19 +282,7 @@ typedef struct net_r_req_chal_info
} NET_R_REQ_CHAL;
-/* NET_Q_AUTH */
-typedef struct net_q_auth_info
-{
- DOM_LOG_INFO clnt_id; /* client identification info */
- DOM_CHAL clnt_chal; /* client-calculated credentials */
-} NET_Q_AUTH;
-/* NET_R_AUTH */
-typedef struct net_r_auth_info
-{
- DOM_CHAL srv_chal; /* server-calculated credentials */
- uint32 status; /* return code */
-} NET_R_AUTH;
/* NET_Q_AUTH_2 */
typedef struct net_q_auth2_info
@@ -481,4 +430,6 @@ typedef struct net_r_sam_logoff_info
} NET_R_SAM_LOGOFF;
+
#endif /* _RPC_NETLOGON_H */
+
diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h
index 18b0a8c1432..15705a1b6cc 100644
--- a/source/include/rpc_samr.h
+++ b/source/include/rpc_samr.h
@@ -219,58 +219,6 @@ typedef struct sam_user_info_24
uint8 pass[516];
} SAM_USER_INFO_24;
-/*
- * NB. This structure is *definately* incorrect. It's my best guess
- * currently for W2K SP2. The password field is encrypted in a different
- * way than normal... And there are definately other problems. JRA.
- */
-
-/* SAM_USER_INFO_25 */
-typedef struct sam_user_info_25
-{
- /* TIMES MAY NOT IN RIGHT ORDER!!!! */
- NTTIME logon_time; /* logon time */
- NTTIME logoff_time; /* logoff time */
- NTTIME kickoff_time; /* kickoff time */
- NTTIME pass_last_set_time; /* password last set time */
- NTTIME pass_can_change_time; /* password can change time */
- NTTIME pass_must_change_time; /* password must change time */
-
- UNIHDR hdr_user_name; /* NULL - user name unicode string header */
- UNIHDR hdr_full_name; /* user's full name unicode string header */
- UNIHDR hdr_home_dir; /* home directory unicode string header */
- UNIHDR hdr_dir_drive; /* home drive unicode string header */
- UNIHDR hdr_logon_script; /* logon script unicode string header */
- UNIHDR hdr_profile_path; /* profile path unicode string header */
- UNIHDR hdr_acct_desc ; /* user description */
- UNIHDR hdr_workstations; /* comma-separated workstations user can log in from */
- UNIHDR hdr_unknown_str ; /* don't know what this is, yet. */
- UNIHDR hdr_munged_dial ; /* munged path name and dial-back tel number */
-
- uint8 lm_pwd[16]; /* lm user passwords */
- uint8 nt_pwd[16]; /* nt user passwords */
-
- uint32 user_rid; /* Primary User ID */
- uint32 group_rid; /* Primary Group ID */
-
- uint32 acb_info; /* account info (ACB_xxxx bit-mask) */
-
- uint32 unknown_6[6];
-
- uint8 pass[532];
-
- UNISTR2 uni_user_name; /* NULL - username unicode string */
- UNISTR2 uni_full_name; /* user's full name unicode string */
- UNISTR2 uni_home_dir; /* home directory unicode string */
- UNISTR2 uni_dir_drive; /* home directory drive unicode string */
- UNISTR2 uni_logon_script; /* logon script unicode string */
- UNISTR2 uni_profile_path; /* profile path unicode string */
- UNISTR2 uni_acct_desc ; /* user description unicode string */
- UNISTR2 uni_workstations; /* login from workstations unicode string */
- UNISTR2 uni_unknown_str ; /* don't know what this is, yet. */
- UNISTR2 uni_munged_dial ; /* munged path name and dial-back tel no */
-} SAM_USER_INFO_25;
-
/* SAM_USER_INFO_21 */
typedef struct sam_user_info_21
@@ -786,8 +734,8 @@ typedef struct samr_str_entry_info1
typedef struct sam_entry_info_1
{
- SAM_ENTRY1 *sam;
- SAM_STR1 *str;
+ SAM_ENTRY1 sam[MAX_SAM_ENTRIES];
+ SAM_STR1 str[MAX_SAM_ENTRIES];
} SAM_DISPINFO_1;
@@ -816,8 +764,8 @@ typedef struct samr_str_entry_info2
typedef struct sam_entry_info_2
{
- SAM_ENTRY2 *sam;
- SAM_STR2 *str;
+ SAM_ENTRY2 sam[MAX_SAM_ENTRIES];
+ SAM_STR2 str[MAX_SAM_ENTRIES];
} SAM_DISPINFO_2;
@@ -845,8 +793,8 @@ typedef struct samr_str_entry_info3
typedef struct sam_entry_info_3
{
- SAM_ENTRY3 *sam;
- SAM_STR3 *str;
+ SAM_ENTRY3 sam[MAX_SAM_ENTRIES];
+ SAM_STR3 str[MAX_SAM_ENTRIES];
} SAM_DISPINFO_3;
@@ -868,8 +816,8 @@ typedef struct samr_str_entry_info4
typedef struct sam_entry_info_4
{
- SAM_ENTRY4 *sam;
- SAM_STR4 *str;
+ SAM_ENTRY4 sam[MAX_SAM_ENTRIES];
+ SAM_STR4 str[MAX_SAM_ENTRIES];
} SAM_DISPINFO_4;
@@ -891,8 +839,8 @@ typedef struct samr_str_entry_info5
typedef struct sam_entry_info_5
{
- SAM_ENTRY5 *sam;
- SAM_STR5 *str;
+ SAM_ENTRY5 sam[MAX_SAM_ENTRIES];
+ SAM_STR5 str[MAX_SAM_ENTRIES];
} SAM_DISPINFO_5;
@@ -1192,7 +1140,6 @@ typedef struct sam_userinfo_ctr_info
SAM_USER_INFO_21 *id21; /* auth-level 21 */
SAM_USER_INFO_23 *id23; /* auth-level 0x17 */
SAM_USER_INFO_24 *id24; /* auth-level 0x18 */
- SAM_USER_INFO_25 *id25; /* auth-level 0x19 */
void* id; /* to make typecasting easy */
} info;
@@ -1302,8 +1249,8 @@ typedef struct q_samr_lookup_names_info
uint32 ptr; /* 0x0000 0000 - 32 bit unknown */
uint32 num_names2; /* number of names being looked up */
- UNIHDR *hdr_name; /* unicode account name header */
- UNISTR2 *uni_name; /* unicode account name string */
+ UNIHDR hdr_name[MAX_LOOKUP_SIDS]; /* unicode account name header */
+ UNISTR2 uni_name[MAX_LOOKUP_SIDS]; /* unicode account name string */
} SAMR_Q_LOOKUP_NAMES;
@@ -1583,8 +1530,8 @@ typedef struct q_samr_open_alias_info
{
POLICY_HND dom_pol;
- uint32 access_mask;
- uint32 rid_alias;
+ uint32 unknown_0; /* 0x0000 0008 */
+ uint32 rid_alias; /* rid */
} SAMR_Q_OPEN_ALIAS;
diff --git a/source/include/rpc_spoolss.h b/source/include/rpc_spoolss.h
index dd66982cd5c..1e0a43987cb 100755
--- a/source/include/rpc_spoolss.h
+++ b/source/include/rpc_spoolss.h
@@ -30,6 +30,8 @@
/* spoolss pipe: this are the calls which are not implemented ...
#define SPOOLSS_OPENPRINTER 0x01
#define SPOOLSS_GETPRINTERDRIVER 0x0b
+#define SPOOLSS_DELETEPRINTERDRIVER 0x0d
+#define SPOOLSS_ADDPRINTPROCESSOR 0x0e
#define SPOOLSS_GETPRINTPROCESSORDIRECTORY 0x10
#define SPOOLSS_READPRINTER 0x16
#define SPOOLSS_WAITFORPRINTERCHANGE 0x1c
@@ -72,8 +74,6 @@
#define SPOOLSS_ADDPRINTERDRIVER 0x09
#define SPOOLSS_ENUMPRINTERDRIVERS 0x0a
#define SPOOLSS_GETPRINTERDRIVERDIRECTORY 0x0c
-#define SPOOLSS_DELETEPRINTERDRIVER 0x0d
-#define SPOOLSS_ADDPRINTPROCESSOR 0x0e
#define SPOOLSS_ENUMPRINTPROCESSORS 0x0f
#define SPOOLSS_STARTDOCPRINTER 0x11
#define SPOOLSS_STARTPAGEPRINTER 0x12
@@ -577,23 +577,6 @@ typedef struct spool_r_endpageprinter
}
SPOOL_R_ENDPAGEPRINTER;
-
-typedef struct spool_q_deleteprinterdriver
-{
- uint32 server_ptr;
- UNISTR2 server;
- UNISTR2 arch;
- UNISTR2 driver;
-}
-SPOOL_Q_DELETEPRINTERDRIVER;
-
-typedef struct spool_r_deleteprinterdriver
-{
- uint32 status;
-}
-SPOOL_R_DELETEPRINTERDRIVER;
-
-
typedef struct spool_doc_info_1
{
uint32 p_docname;
@@ -1575,23 +1558,6 @@ typedef struct spool_r_getprinterdriverdirectory
}
SPOOL_R_GETPRINTERDRIVERDIR;
-typedef struct spool_q_addprintprocessor
-{
- uint32 server_ptr;
- UNISTR2 server;
- UNISTR2 environment;
- UNISTR2 path;
- UNISTR2 name;
-}
-SPOOL_Q_ADDPRINTPROCESSOR;
-
-typedef struct spool_r_addprintprocessor
-{
- uint32 status;
-}
-SPOOL_R_ADDPRINTPROCESSOR;
-
-
typedef struct spool_q_enumprintprocessors
{
uint32 name_ptr;
diff --git a/source/include/rpc_srvsvc.h b/source/include/rpc_srvsvc.h
index d6fe7617b25..2224f387662 100644
--- a/source/include/rpc_srvsvc.h
+++ b/source/include/rpc_srvsvc.h
@@ -36,48 +36,8 @@
#define SRV_NET_SHARE_DEL 0x12
#define SRV_NET_SRV_GET_INFO 0x15
#define SRV_NET_SRV_SET_INFO 0x16
-#define SRV_NET_DISK_ENUM 0x17
#define SRV_NET_REMOTE_TOD 0x1c
-#define SRV_NET_NAME_VALIDATE 0x21
#define SRV_NETSHAREENUM 0x24
-#define SRV_NETFILEQUERYSECDESC 0x27
-#define SRV_NETFILESETSECDESC 0x28
-
-#define MAX_SERVER_DISK_ENTRIES 15
-
-typedef struct disk_info {
- uint32 unknown;
- UNISTR3 disk_name;
-} DISK_INFO;
-
-typedef struct disk_enum_container {
- uint32 level;
- uint32 entries_read;
- uint32 unknown;
- uint32 disk_info_ptr;
- DISK_INFO disk_info[MAX_SERVER_DISK_ENTRIES];
-} DISK_ENUM_CONTAINER;
-
-typedef struct net_srv_disk_enum {
- uint32 ptr_srv_name; /* pointer (to server name?) */
- UNISTR2 uni_srv_name; /* server name */
-
- DISK_ENUM_CONTAINER disk_enum_ctr;
-
- uint32 preferred_len; /* preferred maximum length (0xffff ffff) */
- uint32 total_entries; /* total number of entries */
- ENUM_HND enum_hnd;
- uint32 status; /* return status */
-} SRV_Q_NET_DISK_ENUM, SRV_R_NET_DISK_ENUM;
-
-typedef struct net_name_validate {
- uint32 ptr_srv_name;
- UNISTR2 uni_srv_name;
- UNISTR2 uni_name; /*name to validate*/
- uint32 type;
- uint32 flags;
- uint32 status;
-} SRV_Q_NET_NAME_VALIDATE, SRV_R_NET_NAME_VALIDATE;
/* SESS_INFO_0 (pointers to level 0 session info strings) */
typedef struct ptr_sess_info0
@@ -368,8 +328,6 @@ typedef struct ptr_share_info502
/* SH_INFO_502_STR (level 502 share info strings) */
typedef struct str_share_info502
{
- SH_INFO_502 *ptrs;
-
UNISTR2 uni_netname; /* unicode string of net name (e.g NETLOGON) */
UNISTR2 uni_remark; /* unicode string of comment (e.g "Logon server share") */
UNISTR2 uni_path; /* unicode string of local path (e.g c:\winnt\system32\repl\import\scripts) */
@@ -765,48 +723,5 @@ typedef struct r_net_remote_tod
} SRV_R_NET_REMOTE_TOD;
-/* SRV_Q_NET_FILE_QUERY_SECDESC */
-typedef struct q_net_file_query_secdesc
-{
- uint32 ptr_srv_name;
- UNISTR2 uni_srv_name;
- uint32 ptr_qual_name;
- UNISTR2 uni_qual_name;
- UNISTR2 uni_file_name;
- uint32 unknown1;
- uint32 unknown2;
- uint32 unknown3;
-} SRV_Q_NET_FILE_QUERY_SECDESC;
-
-/* SRV_R_NET_FILE_QUERY_SECDESC */
-typedef struct r_net_file_query_secdesc
-{
- uint32 ptr_response;
- uint32 size_response;
- uint32 ptr_secdesc;
- uint32 size_secdesc;
- SEC_DESC *sec_desc;
- uint32 status;
-} SRV_R_NET_FILE_QUERY_SECDESC;
-/* SRV_Q_NET_FILE_SET_SECDESC */
-typedef struct q_net_file_set_secdesc
-{
- uint32 ptr_srv_name;
- UNISTR2 uni_srv_name;
- uint32 ptr_qual_name;
- UNISTR2 uni_qual_name;
- UNISTR2 uni_file_name;
- uint32 sec_info;
- uint32 size_set;
- uint32 ptr_secdesc;
- uint32 size_secdesc;
- SEC_DESC *sec_desc;
-} SRV_Q_NET_FILE_SET_SECDESC;
-
-/* SRV_R_NET_FILE_SET_SECDESC */
-typedef struct r_net_file_set_secdesc
-{
- uint32 status;
-} SRV_R_NET_FILE_SET_SECDESC;
#endif /* _RPC_SRVSVC_H */
diff --git a/source/include/safe_string.h b/source/include/safe_string.h
index 2c3d2eda01f..815939d1541 100644
--- a/source/include/safe_string.h
+++ b/source/include/safe_string.h
@@ -37,6 +37,11 @@
#endif /* sprintf */
#define sprintf __ERROR__XX__NEVER_USE_SPRINTF__;
+#ifdef snprintf
+#undef snprintf
+#endif /* snprintf */
+#define snprintf __ERROR__XX__NEVER_USE_SNPRINTF___;
+
#define pstrcpy(d,s) safe_strcpy((d),(s),sizeof(pstring)-1)
#define pstrcat(d,s) safe_strcat((d),(s),sizeof(pstring)-1)
#define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
diff --git a/source/include/smb.h b/source/include/smb.h
index 7cb9c0bb973..d8bd852b859 100644
--- a/source/include/smb.h
+++ b/source/include/smb.h
@@ -27,7 +27,6 @@
#define BUFFER_SIZE (0xFFFF)
#define SAFETY_MARGIN 1024
-#define LARGE_WRITEX_HDR_SIZE 65
#define NMB_PORT 137
#define DGRAM_PORT 138
@@ -57,7 +56,7 @@ typedef int BOOL;
#define STR_UPPER 4
#define STR_ASCII 8
#define STR_UNICODE 16
-#define STR_NOALIGN 32
+
/* how long to wait for secondary SMB packets (milli-seconds) */
#define SMB_SECONDARY_WAIT (60*1000)
@@ -177,7 +176,6 @@ implemented */
#define ERRfilexists 80 /* File in operation already exists */
#define ERRcannotopen 110 /* Cannot open the file specified */
#define ERRunknownlevel 124
-#define ERRnotlocked 158 /* This region is not locked by this locking context. */
#define ERRrename 183
#define ERRbadpipe 230 /* Named pipe invalid */
#define ERRpipebusy 231 /* All instances of pipe are busy */
@@ -207,7 +205,6 @@ implemented */
#define ERROR_INVALID_PRINTER_NAME (1801)
#define ERROR_INVALID_DATATYPE (1804)
#define ERROR_INVALID_ENVIRONMENT (1805)
-#define ERROR_PRINTER_DRIVER_IN_USE (3001)
/* here's a special one from observing NT */
#define ERRnoipc 66 /* don't support ipc */
@@ -1181,16 +1178,6 @@ struct bitmap {
FILE_EXECUTE|SYNCHRONIZE_ACCESS)
/* Mapping of access rights to UNIX perms. */
-#define UNIX_ACCESS_RWX FILE_GENERIC_ALL
-#define UNIX_ACCESS_R FILE_GENERIC_READ
-#define UNIX_ACCESS_W FILE_GENERIC_WRITE
-#define UNIX_ACCESS_X FILE_GENERIC_EXECUTE
-
-#if 0
-/*
- * This is the old mapping we used to use. To get W2KSP2 profiles
- * working we need to map to the canonical file perms.
- */
#define UNIX_ACCESS_RWX (UNIX_ACCESS_R|UNIX_ACCESS_W|UNIX_ACCESS_X)
#define UNIX_ACCESS_R (READ_CONTROL_ACCESS|SYNCHRONIZE_ACCESS|\
FILE_READ_ATTRIBUTES|FILE_READ_EA|FILE_READ_DATA)
@@ -1199,7 +1186,6 @@ struct bitmap {
FILE_APPEND_DATA|FILE_WRITE_DATA)
#define UNIX_ACCESS_X (READ_CONTROL_ACCESS|SYNCHRONIZE_ACCESS|\
FILE_EXECUTE|FILE_READ_ATTRIBUTES)
-#endif
#define UNIX_ACCESS_NONE (WRITE_OWNER_ACCESS)
@@ -1418,9 +1404,7 @@ char *strdup(char *s);
#define CAP_LOCK_AND_READ 0x0100
#define CAP_NT_FIND 0x0200
#define CAP_DFS 0x1000
-#define CAP_W2K_SMBS 0x2000
#define CAP_LARGE_READX 0x4000
-#define CAP_LARGE_WRITEX 0x8000
#define CAP_EXTENDED_SECURITY 0x80000000
/* protocol types. It assumes that higher protocols include lower protocols
@@ -1716,8 +1700,6 @@ typedef struct user_struct
gid_t *groups;
NT_USER_TOKEN *nt_user_token;
-
- int session_id; /* used by utmp and pam session code */
} user_struct;
#include "ntdomain.h"
diff --git a/source/include/smb_acls.h b/source/include/smb_acls.h
index bea90bf46a0..613f6db3e32 100644
--- a/source/include/smb_acls.h
+++ b/source/include/smb_acls.h
@@ -124,6 +124,48 @@ typedef struct SMB_ACL_T {
#define SMB_ACL_TYPE_ACCESS ACL_TYPE_ACCESS
#define SMB_ACL_TYPE_DEFAULT ACL_TYPE_DEFAULT
+/* XFS ACLS are defined here */
+/* donated by John Trostel (jtrostel@connex.com) */
+
+#elif defined(HAVE_XFS_ACLS)
+
+/* This is an nearly an identity mapping (just remove the SMB_). */
+#define SMB_ACL_TAG_T acl_tag_t
+#define SMB_ACL_TYPE_T acl_type_t
+//#define SMB_ACL_PERMSET_T acl_permset_t
+typedef ushort *SMB_ACL_PERMSET_T;
+#define SMB_ACL_PERM_T acl_perm_t
+#define SMB_ACL_READ ACL_READ
+#define SMB_ACL_WRITE ACL_WRITE
+#define SMB_ACL_EXECUTE ACL_EXECUTE
+
+/* Types of ACLs. */
+#define SMB_ACL_USER ACL_USER
+#define SMB_ACL_USER_OBJ ACL_USER_OBJ
+#define SMB_ACL_GROUP ACL_GROUP
+#define SMB_ACL_GROUP_OBJ ACL_GROUP_OBJ
+#define SMB_ACL_OTHER ACL_OTHER_OBJ
+#define SMB_ACL_MASK ACL_MASK
+
+#define SMB_ACL_T acl_t
+
+#define SMB_ACL_ENTRY_T acl_entry_t
+
+#define SMB_ACL_FIRST_ENTRY ACL_FIRST_ENTRY
+#define SMB_ACL_NEXT_ENTRY ACL_NEXT_ENTRY
+
+#define SMB_ACL_TYPE_ACCESS ACL_TYPE_ACCESS
+#define SMB_ACL_TYPE_DEFAULT ACL_TYPE_DEFAULT
+
+/* Not yet in Official SGI XFS CVS */
+
+#if defined(CONFIG_EXTENDED_PERMISSSION)
+#define SMB_ACL_CHOWN ACL_CHOWN
+#define SMB_ACL_CHMOD ACL_CHMOD
+#define SMB_ACL_DELETE ACL_DELETE
+#define EXTENDED_PERM_BITS (ACL_CHOWN|ACL_CHMOD|ACL_DELETE)
+#endif /* CONFIG_EXTENDED_PERMISSION */
+
#elif defined(HAVE_AIX_ACLS)
/* Donated by Medha Date, mdate@austin.ibm.com, for IBM */
diff --git a/source/include/talloc.h b/source/include/talloc.h
index 89c2f82e056..32b0f28ae6d 100644
--- a/source/include/talloc.h
+++ b/source/include/talloc.h
@@ -21,10 +21,17 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#ifdef DEBUG_TALLOC
+#define BAD_PTR (void*)0xdeadbeef
+#else
+#define BAD_PTR NULL
+#endif
+
struct talloc_chunk {
struct talloc_chunk *next;
- size_t size;
void *ptr;
+ size_t alloc_size;
+ size_t total_size;
};
typedef struct {
diff --git a/source/include/version.h b/source/include/version.h
index 682efc644da..14d0827c298 100644
--- a/source/include/version.h
+++ b/source/include/version.h
@@ -1 +1 @@
-#define VERSION "2.2.1"
+#define VERSION "2.2.0a"
diff --git a/source/include/vfs.h b/source/include/vfs.h
index 93823a5f239..51f3df1ec95 100644
--- a/source/include/vfs.h
+++ b/source/include/vfs.h
@@ -86,8 +86,6 @@ struct vfs_ops {
int (*utime)(struct connection_struct *conn, char *path, struct utimbuf *times);
int (*ftruncate)(struct files_struct *fsp, int fd, SMB_OFF_T offset);
BOOL (*lock)(struct files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type);
- int (*symlink)(struct connection_struct *conn, const char *oldpath, const char *newpath);
- int (*readlink)(struct connection_struct *conn, const char *path, char *buf, size_t bufsiz);
/* NT ACL operations. */
diff --git a/source/lib/access.c b/source/lib/access.c
index ed4d5ac3631..bcfef1dc2ff 100644
--- a/source/lib/access.c
+++ b/source/lib/access.c
@@ -260,12 +260,13 @@ static BOOL only_ipaddrs_in_list(const char* list)
if (!is_ipaddress(tok))
{
+ char *p;
/*
* if we failed, make sure that it was not because the token
* was a network/netmask pair. Only network/netmask pairs
* have a '/' in them
*/
- if (strchr(tok, '/') == NULL)
+ if ((p=strchr(tok, '/')) == NULL)
{
only_ip = False;
DEBUG(3,("only_ipaddrs_in_list: list [%s] has non-ip address %s\n", list, tok));
diff --git a/source/lib/debug.c b/source/lib/debug.c
index 4ec70bd118a..9c97385db33 100644
--- a/source/lib/debug.c
+++ b/source/lib/debug.c
@@ -180,7 +180,7 @@ BOOL debug_parse_params(char **params, int *debuglevel_class)
/* Allow DBGC_ALL to be specifies w/o requiring its class name e.g."10"
* v.s. "all:10", this is the traditional way to set DEBUGLEVEL
*/
- if (isdigit((int)params[0][0])) {
+ if (isdigit(params[0][0])) {
debuglevel_class[DBGC_ALL] = atoi(params[0]);
i = 1; /* start processing at the next params */
}
@@ -242,9 +242,9 @@ void debug_message(int msg_type, pid_t src, void *buf, size_t len)
/* Set the new DEBUGLEVEL_CLASS array from the pased array */
memcpy(DEBUGLEVEL_CLASS, buf, sizeof(DEBUGLEVEL_CLASS));
- DEBUG(1,("INFO: Debug class %s level = %d (pid %u from pid %u)\n",
+ DEBUG(1,("INFO: Debug class %s level = %d (pid %d from pid %d)\n",
classname_table[DBGC_ALL],
- DEBUGLEVEL_CLASS[DBGC_ALL], (unsigned int)getpid(), (unsigned int)src));
+ DEBUGLEVEL_CLASS[DBGC_ALL], getpid(), (int)src));
for (i=1; i<DBGC_LAST; i++) {
if (DEBUGLEVEL_CLASS[i])
@@ -310,14 +310,21 @@ BOOL reopen_logs( void )
FILE *new_dbf = NULL;
BOOL ret = True;
+ if (DEBUGLEVEL_CLASS[ DBGC_ALL ] <= 0) {
+ if (dbf) {
+ (void)fclose(dbf);
+ dbf = NULL;
+ }
+ return True;
+ }
+
oldumask = umask( 022 );
pstrcpy(fname, debugf );
if (lp_loaded() && (*lp_logfile()))
pstrcpy(fname, lp_logfile());
- pstrcpy(debugf, fname);
-
+ pstrcpy( debugf, fname );
if (append_log)
new_dbf = sys_fopen( debugf, "a" );
else
@@ -443,14 +450,26 @@ void check_log_size( void )
* This is called by dbghdr() and format_debug_text().
* ************************************************************************** **
*/
+#ifdef HAVE_STDARG_H
int Debug1( char *format_str, ... )
{
+#else
+ int Debug1(va_alist)
+va_dcl
+{
+ char *format_str;
+#endif
va_list ap;
int old_errno = errno;
if( stdout_logging )
{
+#ifdef HAVE_STDARG_H
va_start( ap, format_str );
+#else
+ va_start( ap );
+ format_str = va_arg( ap, char * );
+#endif
if(dbf)
(void)vfprintf( dbf, format_str, ap );
va_end( ap );
@@ -505,7 +524,12 @@ void check_log_size( void )
else
priority = priority_map[syslog_level];
+#ifdef HAVE_STDARG_H
va_start( ap, format_str );
+#else
+ va_start( ap );
+ format_str = va_arg( ap, char * );
+#endif
vslprintf( msgbuf, sizeof(msgbuf)-1, format_str, ap );
va_end( ap );
@@ -520,7 +544,12 @@ void check_log_size( void )
if( !lp_syslog_only() )
#endif
{
+#ifdef HAVE_STDARG_H
va_start( ap, format_str );
+#else
+ va_start( ap );
+ format_str = va_arg( ap, char * );
+#endif
if(dbf)
(void)vfprintf( dbf, format_str, ap );
va_end( ap );
@@ -711,6 +740,7 @@ BOOL dbghdr( int level, char *file, char *func, int line )
*
* ************************************************************************** **
*/
+#ifdef HAVE_STDARG_H
BOOL dbgtext( char *format_str, ... )
{
va_list ap;
@@ -725,5 +755,24 @@ BOOL dbghdr( int level, char *file, char *func, int line )
return( True );
} /* dbgtext */
+#else
+ BOOL dbgtext( va_alist )
+ va_dcl
+ {
+ char *format_str;
+ va_list ap;
+ pstring msgbuf;
+
+ va_start( ap );
+ format_str = va_arg( ap, char * );
+ vslprintf( msgbuf, sizeof(msgbuf)-1, format_str, ap );
+ va_end( ap );
+
+ format_debug_text( msgbuf );
+
+ return( True );
+ } /* dbgtext */
+
+#endif
/* ************************************************************************** */
diff --git a/source/lib/genrand.c b/source/lib/genrand.c
index 7af44118ae5..4a7de802e8f 100644
--- a/source/lib/genrand.c
+++ b/source/lib/genrand.c
@@ -1,10 +1,10 @@
/*
Unix SMB/Netbios implementation.
- Version 2.2
+ Version 1.9.
Functions to create reasonable random numbers for crypto use.
- Copyright (C) Jeremy Allison 2001
+ Copyright (C) Jeremy Allison 1998
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
@@ -24,230 +24,208 @@
#include "includes.h"
extern int DEBUGLEVEL;
-
-
-static unsigned char hash[258];
-static uint32 counter;
-unsigned char *reseed_data;
-size_t reseed_data_size;
-
-/****************************************************************
- Copy any user given reseed data.
-*****************************************************************/
-
-void set_rand_reseed_data(unsigned char *data, size_t len)
-{
- if (reseed_data)
- free(reseed_data);
- reseed_data_size = 0;
-
- reseed_data = (unsigned char *)memdup(data, len);
- if (reseed_data)
- reseed_data_size = len;
-}
-
-/****************************************************************
- Setup the seed.
-*****************************************************************/
-
-static void seed_random_stream(unsigned char *seedval, size_t seedlen)
-{
- unsigned char j = 0;
- size_t ind;
-
- for (ind = 0; ind < 256; ind++)
- hash[ind] = (unsigned char)ind;
-
- for( ind = 0; ind < 256; ind++) {
- unsigned char tc;
-
- j += (hash[ind] + seedval[ind%seedlen]);
-
- tc = hash[ind];
- hash[ind] = hash[j];
- hash[j] = tc;
- }
-
- hash[256] = 0;
- hash[257] = 0;
-}
-
-/****************************************************************
- Get datasize bytes worth of random data.
-*****************************************************************/
-
-static void get_random_stream(unsigned char *data, size_t datasize)
-{
- unsigned char index_i = hash[256];
- unsigned char index_j = hash[257];
- size_t ind;
-
- for( ind = 0; ind < datasize; ind++) {
- unsigned char tc;
- unsigned char t;
-
- index_i++;
- index_j += hash[index_i];
-
- tc = hash[index_i];
- hash[index_i] = hash[index_j];
- hash[index_j] = tc;
-
- t = hash[index_i] + hash[index_j];
- data[ind] = hash[t];
- }
-
- hash[256] = index_i;
- hash[257] = index_j;
-}
+static uint32 counter = 0;
/****************************************************************
- Get a 16 byte hash from the contents of a file.
- Note that the hash is not initialised.
+get a 16 byte hash from the contents of a file
+Note that the hash is not initialised.
*****************************************************************/
-
-static void do_filehash(char *fname, unsigned char *the_hash)
+static void do_filehash(char *fname, unsigned char *hash)
{
unsigned char buf[1011]; /* deliberate weird size */
unsigned char tmp_md4[16];
int fd, n;
fd = sys_open(fname,O_RDONLY,0);
- if (fd == -1)
- return;
+ if (fd == -1) return;
while ((n = read(fd, (char *)buf, sizeof(buf))) > 0) {
mdfour(tmp_md4, buf, n);
for (n=0;n<16;n++)
- the_hash[n] ^= tmp_md4[n];
+ hash[n] ^= tmp_md4[n];
}
close(fd);
}
+
+
+/****************************************************************
+ Try and get a seed by looking at the atimes of files in a given
+ directory. XOR them into the buf array.
+*****************************************************************/
+
+static void do_dirrand(char *name, unsigned char *buf, int buf_len)
+{
+ DIR *dp = opendir(name);
+ pstring fullname;
+ int len_left;
+ int fullname_len;
+ char *pos;
+
+ pstrcpy(fullname, name);
+ fullname_len = strlen(fullname);
+
+ if(fullname_len + 2 > sizeof(pstring))
+ return;
+
+ if(fullname[fullname_len] != '/') {
+ fullname[fullname_len] = '/';
+ fullname[fullname_len+1] = '\0';
+ fullname_len = strlen(fullname);
+ }
+
+ len_left = sizeof(pstring) - fullname_len - 1;
+ pos = &fullname[fullname_len];
+
+ if(dp != NULL) {
+ char *p;
+
+ while ((p = readdirname(dp))) {
+ SMB_STRUCT_STAT st;
+
+ if(strlen(p) <= len_left)
+ pstrcpy(pos, p);
+
+ if(sys_stat(fullname,&st) == 0) {
+ SIVAL(buf, ((counter * 4)%(buf_len-4)),
+ IVAL(buf,((counter * 4)%(buf_len-4))) ^ st.st_atime);
+ counter++;
+ DEBUG(10,("do_dirrand: value from file %s.\n", fullname));
+ }
+ }
+ closedir(dp);
+ }
+}
+
/**************************************************************
Try and get a good random number seed. Try a number of
- different factors. Firstly, try /dev/urandom - use if exists.
+ different factors. Firstly, try /dev/urandom and try and
+ read from this. If this fails iterate through /tmp and
+ /dev and XOR all the file timestamps. Next add in
+ a hash of the contents of /etc/shadow and the smb passwd
+ file and a combination of pid and time of day (yes I know this
+ sucks :-). Finally md4 the result.
We use /dev/urandom as a read of /dev/random can block if
the entropy pool dries up. This leads clients to timeout
or be very slow on connect.
- If we can't use /dev/urandom then seed the stream random generator
- above...
+ The result goes in a 16 byte buffer passed from the caller
**************************************************************/
-static int do_reseed(BOOL use_fd, int fd)
+static uint32 do_reseed(unsigned char *md4_outbuf)
{
- unsigned char seed_inbuf[40];
- uint32 v1, v2; struct timeval tval; pid_t mypid;
- struct passwd *pw;
-
- if (use_fd) {
- if (fd != -1)
- return fd;
-
- fd = sys_open( "/dev/urandom", O_RDONLY,0);
- if(fd >= 0)
- return fd;
- }
-
-#ifdef __INSURE__
- memset(seed_inbuf, '\0', sizeof(seed_inbuf));
-#endif
-
- /* Add in some secret file contents */
-
- do_filehash("/etc/shadow", &seed_inbuf[0]);
- do_filehash(lp_smb_passwd_file(), &seed_inbuf[16]);
-
- /*
- * Add in the root encrypted password.
- * On any system where security is taken
- * seriously this will be secret.
- */
-
- pw = sys_getpwnam("root");
- if (pw && pw->pw_passwd) {
- size_t i;
- unsigned char md4_tmp[16];
- mdfour(md4_tmp, (unsigned char *)pw->pw_passwd, strlen(pw->pw_passwd));
- for (i=0;i<16;i++)
- seed_inbuf[8+i] ^= md4_tmp[i];
- }
-
- /*
- * Add the counter, time of day, and pid.
- */
-
- GetTimeOfDay(&tval);
- mypid = sys_getpid();
- v1 = (counter++) + mypid + tval.tv_sec;
- v2 = (counter++) * mypid + tval.tv_usec;
-
- SIVAL(seed_inbuf, 32, v1 ^ IVAL(seed_inbuf, 32));
- SIVAL(seed_inbuf, 36, v2 ^ IVAL(seed_inbuf, 36));
-
- /*
- * Add any user-given reseed data.
- */
-
- if (reseed_data) {
- size_t i;
- for (i = 0; i < sizeof(seed_inbuf); i++)
- seed_inbuf[i] ^= reseed_data[i % reseed_data_size];
- }
-
- seed_random_stream(seed_inbuf, sizeof(seed_inbuf));
-
- return -1;
+ unsigned char md4_inbuf[40];
+ BOOL got_random = False;
+ uint32 v1, v2, ret;
+ int fd;
+ struct timeval tval;
+ pid_t mypid;
+ struct passwd *pw;
+
+ memset(md4_inbuf, '\0', sizeof(md4_inbuf));
+
+ fd = sys_open( "/dev/urandom", O_RDONLY,0);
+ if(fd >= 0) {
+ /*
+ * We can use /dev/urandom !
+ */
+ if(read(fd, md4_inbuf, 40) == 40) {
+ got_random = True;
+ DEBUG(10,("do_reseed: got 40 bytes from /dev/urandom.\n"));
+ }
+ close(fd);
+ }
+
+ if(!got_random) {
+ /*
+ * /dev/urandom failed - try /dev for timestamps.
+ */
+ do_dirrand("/dev", md4_inbuf, sizeof(md4_inbuf));
+ }
+
+ /* possibly add in some secret file contents */
+ do_filehash("/etc/shadow", &md4_inbuf[0]);
+ do_filehash(lp_smb_passwd_file(), &md4_inbuf[16]);
+
+ /* add in the root encrypted password. On any system where security is taken
+ seriously this will be secret */
+ pw = sys_getpwnam("root");
+ if (pw && pw->pw_passwd) {
+ int i;
+ unsigned char md4_tmp[16];
+ mdfour(md4_tmp, (unsigned char *)pw->pw_passwd, strlen(pw->pw_passwd));
+ for (i=0;i<16;i++)
+ md4_inbuf[8+i] ^= md4_tmp[i];
+ }
+
+ /*
+ * Finally add the counter, time of day, and pid.
+ */
+ GetTimeOfDay(&tval);
+ mypid = sys_getpid();
+ v1 = (counter++) + mypid + tval.tv_sec;
+ v2 = (counter++) * mypid + tval.tv_usec;
+
+ SIVAL(md4_inbuf, 32, v1 ^ IVAL(md4_inbuf, 32));
+ SIVAL(md4_inbuf, 36, v2 ^ IVAL(md4_inbuf, 36));
+
+ mdfour(md4_outbuf, md4_inbuf, sizeof(md4_inbuf));
+
+ /*
+ * Return a 32 bit int created from XORing the
+ * 16 bit return buffer.
+ */
+
+ ret = IVAL(md4_outbuf, 0);
+ ret ^= IVAL(md4_outbuf, 4);
+ ret ^= IVAL(md4_outbuf, 8);
+ return (ret ^ IVAL(md4_outbuf, 12));
}
/*******************************************************************
Interface to the (hopefully) good crypto random number generator.
********************************************************************/
-void generate_random_buffer( unsigned char *out, int len, BOOL do_reseed_now)
+void generate_random_buffer( unsigned char *out, int len, BOOL re_seed)
{
- static BOOL done_reseed = False;
- static int urand_fd = -1;
- unsigned char md4_buf[64];
- unsigned char tmp_buf[16];
- unsigned char *p;
-
- if(!done_reseed || do_reseed_now) {
- urand_fd = do_reseed(True, urand_fd);
- done_reseed = True;
- }
-
- if (urand_fd != -1 && len > 0) {
-
- if (read(urand_fd, out, len) == len)
- return; /* len bytes of random data read from urandom. */
-
- /* Read of urand error, drop back to non urand method. */
- close(urand_fd);
- urand_fd = -1;
- do_reseed(False, -1);
- done_reseed = True;
- }
-
- /*
- * Generate random numbers in chunks of 64 bytes,
- * then md4 them & copy to the output buffer.
- * This way the raw state of the stream is never externally
- * seen.
- */
-
- p = out;
- while(len > 0) {
- int copy_len = len > 16 ? 16 : len;
-
- get_random_stream(md4_buf, sizeof(md4_buf));
- mdfour(tmp_buf, md4_buf, sizeof(md4_buf));
- memcpy(p, tmp_buf, copy_len);
- p += copy_len;
- len -= copy_len;
- }
+ static BOOL done_reseed = False;
+ static unsigned char md4_buf[16];
+ unsigned char tmp_buf[16];
+ unsigned char *p;
+
+ if(!done_reseed || re_seed) {
+ sys_srandom(do_reseed(md4_buf));
+ done_reseed = True;
+ }
+
+ /*
+ * Generate random numbers in chunks of 64 bytes,
+ * then md4 them & copy to the output buffer.
+ * Added XOR with output from random, seeded
+ * by the original md4_buf. This is to stop the
+ * output from this function being the previous
+ * md4_buf md4'ed. The output from this function
+ * is often output onto the wire, and so it should
+ * not be possible to guess the next output from
+ * this function based on the previous output.
+ * XORing in the output from random(), seeded by
+ * the original md4 hash should stop this. JRA.
+ */
+
+ p = out;
+ while(len > 0) {
+ int i;
+ int copy_len = len > 16 ? 16 : len;
+ mdfour(tmp_buf, md4_buf, sizeof(md4_buf));
+ memcpy(md4_buf, tmp_buf, sizeof(md4_buf));
+ /* XOR in output from random(). */
+ for(i = 0; i < 4; i++)
+ SIVAL(tmp_buf, i*4, (IVAL(tmp_buf, i*4) ^ (uint32)sys_random()));
+ memcpy(p, tmp_buf, copy_len);
+ p += copy_len;
+ len -= copy_len;
+ }
}
/*******************************************************************
diff --git a/source/lib/hash.c b/source/lib/hash.c
index 92840a4c983..c96315f37e0 100644
--- a/source/lib/hash.c
+++ b/source/lib/hash.c
@@ -92,7 +92,7 @@ BOOL hash_table_init(hash_table *table, int num_buckets, compare_function compar
**************************************************************
*/
-static int string_hash(int hash_size, const char *key)
+int string_hash(int hash_size, const char *key)
{
int j=0;
while (*key)
@@ -147,7 +147,7 @@ static hash_element *hash_chain_find(hash_table *table, ubi_dlList *hash_chain,
hash_element *hash_lookup(hash_table *table, char *key)
{
- return (hash_chain_find(table, &table->buckets[string_hash(table->size, key)], key));
+ return (hash_chain_find(table, &(table->buckets[string_hash(table->size, key)]), key));
}
/* ***************************************************************
@@ -198,7 +198,7 @@ hash_element *hash_insert(hash_table *table, char *value, char *key)
table->num_elements += 1;
}
- bucket = &table->buckets[string_hash(table->size, key)];
+ bucket = &(table->buckets[string_hash(table->size, key)]);
/* Since we only have 1-byte for the key string, we need to
* allocate extra space in the hash_element to store the entire key
@@ -301,7 +301,7 @@ static BOOL enlarge_hash_table(hash_table *table)
*************************************************************************
*/
-void hash_clear(hash_table *table)
+BOOL hash_clear(hash_table *table)
{
int i;
ubi_dlList *bucket = table->buckets;
@@ -319,4 +319,6 @@ void hash_clear(hash_table *table)
if(table->buckets)
free((char *) table->buckets);
table->buckets = NULL;
+
+ return True;
}
diff --git a/source/lib/messages.c b/source/lib/messages.c
index ffa873960e7..5591f141cc1 100644
--- a/source/lib/messages.c
+++ b/source/lib/messages.c
@@ -70,7 +70,7 @@ a useful function for testing the message system
****************************************************************************/
void ping_message(int msg_type, pid_t src, void *buf, size_t len)
{
- DEBUG(1,("INFO: Received PING message from PID %u\n",(unsigned int)src));
+ DEBUG(1,("INFO: Received PING message from PID %d\n",src));
message_send_pid(src, MSG_PONG, buf, len, True);
}
/****************************************************************************
@@ -78,7 +78,7 @@ return current debug level
****************************************************************************/
void debuglevel_message(int msg_type, pid_t src, void *buf, size_t len)
{
- DEBUG(1,("INFO: Received REQ_DEBUGLEVEL message from PID %u\n",(unsigned int)src));
+ DEBUG(1,("INFO: Received REQ_DEBUGLEVEL message from PID %d\n",src));
message_send_pid(src, MSG_DEBUGLEVEL, DEBUGLEVEL_CLASS, sizeof(DEBUGLEVEL_CLASS), True);
}
@@ -89,7 +89,7 @@ BOOL message_init(void)
{
if (tdb) return True;
- tdb = tdb_open_log(lock_path("messages.tdb"),
+ tdb = tdb_open(lock_path("messages.tdb"),
0, TDB_CLEAR_IF_FIRST,
O_RDWR|O_CREAT,0600);
@@ -361,13 +361,9 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void
struct connections_data crec;
struct msg_all *msg_all = (struct msg_all *)state;
- if (dbuf.dsize != sizeof(crec))
- return 0;
-
memcpy(&crec, dbuf.dptr, sizeof(crec));
- if (crec.cnum != -1)
- return 0;
+ if (crec.cnum != -1) return 0;
/* if the msg send fails because the pid was not found (i.e. smbd died),
* the msg has already been deleted from the messages.tdb.*/
@@ -376,8 +372,8 @@ static int traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void
/* if the pid was not found delete the entry from connections.tdb */
if (errno == ESRCH) {
- DEBUG(2,("pid %u doesn't exist - deleting connections %d [%s]\n",
- (unsigned int)crec.pid, crec.cnum, crec.name));
+ DEBUG(2,("pid %d doesn't exist - deleting connections %d [%s]\n",
+ crec.pid, crec.cnum, crec.name));
tdb_delete(the_tdb, kbuf);
}
}
diff --git a/source/lib/ms_fnmatch.c b/source/lib/ms_fnmatch.c
index 87e40049e05..b4591c7dbc4 100644
--- a/source/lib/ms_fnmatch.c
+++ b/source/lib/ms_fnmatch.c
@@ -24,15 +24,22 @@
*/
+#if FNMATCH_TEST
+#include <stdio.h>
+#include <stdlib.h>
+#else
#include "includes.h"
+#endif
+
+
/*
bugger. we need a separate wildcard routine for older versions
of the protocol. This is not yet perfect, but its a lot
better thaan what we had */
-static int ms_fnmatch_lanman_core(const char *pattern, const char *string)
+static int ms_fnmatch_lanman_core(char *pattern, char *string)
{
- const char *p = pattern, *n = string;
+ char *p = pattern, *n = string;
char c;
if (strcmp(p,"?")==0 && strcmp(n,".")==0) goto match;
@@ -111,7 +118,7 @@ next:
return 0;
}
-static int ms_fnmatch_lanman1(const char *pattern, const char *string)
+static int ms_fnmatch_lanman1(char *pattern, char *string)
{
if (!strpbrk(pattern, "?*<>\"")) {
if (strcmp(string,"..") == 0) string = ".";
@@ -135,9 +142,9 @@ static int ms_fnmatch_lanman1(const char *pattern, const char *string)
Returns 0 on match, -1 on fail.
*/
-int ms_fnmatch(const char *pattern, const char *string)
+int ms_fnmatch(char *pattern, char *string)
{
- const char *p = pattern, *n = string;
+ char *p = pattern, *n = string;
char c;
extern int Protocol;
@@ -194,3 +201,59 @@ int ms_fnmatch(const char *pattern, const char *string)
return -1;
}
+
+
+#if FNMATCH_TEST
+
+static int match_one(char *pattern, char *file)
+{
+ if (strcmp(file,"..") == 0) file = ".";
+ if (strcmp(pattern,".") == 0) return -1;
+
+ return ms_fnmatch(pattern, file);
+}
+
+static char *match_test(char *pattern, char *file, char *short_name)
+{
+ static char ret[4];
+ strncpy(ret, "---", 3);
+
+ if (match_one(pattern, ".") == 0) ret[0] = '+';
+ if (match_one(pattern, "..") == 0) ret[1] = '+';
+ if (match_one(pattern, file) == 0 ||
+ (*short_name && match_one(pattern, short_name)==0)) ret[2] = '+';
+ return ret;
+}
+
+ int main(int argc, char *argv[])
+{
+ int ret;
+ char ans[4], mask[100], file[100], mfile[100];
+ char *ans2;
+ int n, i=0;
+ char line[200];
+
+ if (argc == 3) {
+ ret = ms_fnmatch(argv[1], argv[2]);
+ if (ret == 0)
+ printf("YES\n");
+ else printf("NO\n");
+ return ret;
+ }
+ mfile[0] = 0;
+
+ while (fgets(line, sizeof(line)-1, stdin)) {
+ n = sscanf(line, "%3s %s %s %s\n", ans, mask, file, mfile);
+ if (n < 3) continue;
+ ans2 = match_test(mask, file, mfile);
+ if (strcmp(ans2, ans)) {
+ printf("%s %s %d mask=[%s] file=[%s] mfile=[%s]\n",
+ ans, ans2, i, mask, file, mfile);
+ }
+ i++;
+ mfile[0] = 0;
+ }
+ return 0;
+}
+#endif /* FNMATCH_TEST */
+
diff --git a/source/lib/slprintf.c b/source/lib/slprintf.c
new file mode 100644
index 00000000000..be81b4aa120
--- /dev/null
+++ b/source/lib/slprintf.c
@@ -0,0 +1,95 @@
+/*
+ Unix SMB/Netbios implementation.
+ Version 1.9.
+ snprintf replacement
+ Copyright (C) Andrew Tridgell 1998
+
+ 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 2 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, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+extern int DEBUGLEVEL;
+
+
+/* this is like vsnprintf but the 'n' limit does not include
+ the terminating null. So if you have a 1024 byte buffer then
+ pass 1023 for n */
+int vslprintf(char *str, int n, char *format, va_list ap)
+{
+ int ret = vsnprintf(str, n, format, ap);
+ if (ret > n || ret < 0) {
+ str[n] = 0;
+ return -1;
+ }
+ str[ret] = 0;
+ return ret;
+}
+
+#ifdef HAVE_STDARG_H
+ int slprintf(char *str, int n, char *format, ...)
+{
+#else
+ int slprintf(va_alist)
+va_dcl
+{
+ char *str, *format;
+ int n;
+#endif
+ va_list ap;
+ int ret;
+
+#ifdef HAVE_STDARG_H
+ va_start(ap, format);
+#else
+ va_start(ap);
+ str = va_arg(ap,char *);
+ n = va_arg(ap,int);
+ format = va_arg(ap,char *);
+#endif
+
+ ret = vslprintf(str,n,format,ap);
+ va_end(ap);
+ return ret;
+}
+
+ /* this is rather line fprintf, except that it works on a file descriptor
+ and is limited to one pstring of output */
+#ifdef HAVE_STDARG_H
+ int fdprintf(int fd, char *format, ...)
+{
+#else
+ int fdprintf(va_alist)
+va_dcl
+{
+ int fd;
+ char *format;
+#endif
+ va_list ap;
+ pstring str;
+
+#ifdef HAVE_STDARG_H
+ va_start(ap, format);
+#else
+ va_start(ap);
+ fd = va_arg(ap,int);
+ format = va_arg(ap,char *);
+#endif
+ str[0] = 0;
+
+ vslprintf(str,sizeof(str),format,ap);
+ va_end(ap);
+ return write(fd, str, strlen(str));
+}
diff --git a/source/lib/snprintf.c b/source/lib/snprintf.c
index 0a52e1762b1..1a8c10afc40 100644
--- a/source/lib/snprintf.c
+++ b/source/lib/snprintf.c
@@ -49,38 +49,41 @@
* fixed handling of %.0f
* added test for HAVE_LONG_DOUBLE
*
- * tridge@samba.org, idra@samba.org, April 2001
- * got rid of fcvt code (twas buggy and made testing harder)
- * added C99 semantics
- *
**************************************************************/
-#ifndef NO_CONFIG_H /* for some tests */
#include "config.h"
-#endif
-#ifdef HAVE_STRING_H
#include <string.h>
-#endif
-
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
+# include <ctype.h>
#include <sys/types.h>
-#include <stdarg.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if defined(HAVE_SNPRINTF) && defined(HAVE_VSNPRINTF) && defined(HAVE_C99_VSNPRINTF)
-/* only include stdio.h if we are not re-defining snprintf or vsnprintf */
-#include <stdio.h>
- /* make the compiler happy with an empty file */
- void dummy_snprintf(void) {}
+#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
+
+/* Define this as a fall through, HAVE_STDARG_H is probably already set */
+
+#define HAVE_VARARGS_H
+
+/* varargs declarations: */
+
+#if defined(HAVE_STDARG_H)
+# include <stdarg.h>
+# define HAVE_STDARGS /* let's hope that works everywhere (mj) */
+# define VA_LOCAL_DECL va_list ap
+# define VA_START(f) va_start(ap, f)
+# define VA_SHIFT(v,t) ; /* no-op for ANSI */
+# define VA_END va_end(ap)
#else
+# if defined(HAVE_VARARGS_H)
+# include <varargs.h>
+# undef HAVE_STDARGS
+# define VA_LOCAL_DECL va_list ap
+# define VA_START(f) va_start(ap) /* f is ignored! */
+# define VA_SHIFT(v,t) v = va_arg(ap,t)
+# define VA_END va_end(ap)
+# else
+/*XX ** NO VARARGS ** XX*/
+# endif
+#endif
#ifdef HAVE_LONG_DOUBLE
#define LDOUBLE long double
@@ -94,15 +97,18 @@
#define LLONG long
#endif
-static size_t dopr(char *buffer, size_t maxlen, const char *format,
- va_list args);
-static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
+/*int snprintf (char *str, size_t count, const char *fmt, ...);*/
+/*int vsnprintf (char *str, size_t count, const char *fmt, va_list arg);*/
+
+static void dopr (char *buffer, size_t maxlen, const char *format,
+ va_list args);
+static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
char *value, int flags, int min, int max);
-static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
+static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
long value, int base, int min, int max, int flags);
-static void fmtfp(char *buffer, size_t *currlen, size_t maxlen,
+static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
LDOUBLE fvalue, int min, int max, int flags);
-static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c);
+static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c );
/*
* dopr(): poor man's version of doprintf
@@ -134,804 +140,774 @@ static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c);
#define DP_C_LLONG 4
#define char_to_int(p) ((p)- '0')
-#ifndef MAX
#define MAX(p,q) (((p) >= (q)) ? (p) : (q))
-#endif
-static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args)
+static void dopr (char *buffer, size_t maxlen, const char *format, va_list args)
{
- char ch;
- LLONG value;
- LDOUBLE fvalue;
- char *strvalue;
- int min;
- int max;
- int state;
- int flags;
- int cflags;
- size_t currlen;
-
- state = DP_S_DEFAULT;
- currlen = flags = cflags = min = 0;
- max = -1;
+ char ch;
+ LLONG value;
+ LDOUBLE fvalue;
+ char *strvalue;
+ int min;
+ int max;
+ int state;
+ int flags;
+ int cflags;
+ size_t currlen;
+
+ state = DP_S_DEFAULT;
+ currlen = flags = cflags = min = 0;
+ max = -1;
+ ch = *format++;
+
+ while (state != DP_S_DONE)
+ {
+ if ((ch == '\0') || (currlen >= maxlen))
+ state = DP_S_DONE;
+
+ switch(state)
+ {
+ case DP_S_DEFAULT:
+ if (ch == '%')
+ state = DP_S_FLAGS;
+ else
+ dopr_outch (buffer, &currlen, maxlen, ch);
+ ch = *format++;
+ break;
+ case DP_S_FLAGS:
+ switch (ch)
+ {
+ case '-':
+ flags |= DP_F_MINUS;
+ ch = *format++;
+ break;
+ case '+':
+ flags |= DP_F_PLUS;
+ ch = *format++;
+ break;
+ case ' ':
+ flags |= DP_F_SPACE;
+ ch = *format++;
+ break;
+ case '#':
+ flags |= DP_F_NUM;
+ ch = *format++;
+ break;
+ case '0':
+ flags |= DP_F_ZERO;
+ ch = *format++;
+ break;
+ default:
+ state = DP_S_MIN;
+ break;
+ }
+ break;
+ case DP_S_MIN:
+ if (isdigit((unsigned char)ch))
+ {
+ min = 10*min + char_to_int (ch);
ch = *format++;
-
- while (state != DP_S_DONE) {
- if (ch == '\0')
- state = DP_S_DONE;
-
- switch(state) {
- case DP_S_DEFAULT:
- if (ch == '%')
- state = DP_S_FLAGS;
- else
- dopr_outch (buffer, &currlen, maxlen, ch);
- ch = *format++;
- break;
- case DP_S_FLAGS:
- switch (ch) {
- case '-':
- flags |= DP_F_MINUS;
- ch = *format++;
- break;
- case '+':
- flags |= DP_F_PLUS;
- ch = *format++;
- break;
- case ' ':
- flags |= DP_F_SPACE;
- ch = *format++;
- break;
- case '#':
- flags |= DP_F_NUM;
- ch = *format++;
- break;
- case '0':
- flags |= DP_F_ZERO;
- ch = *format++;
- break;
- default:
- state = DP_S_MIN;
- break;
- }
- break;
- case DP_S_MIN:
- if (isdigit((unsigned char)ch)) {
- min = 10*min + char_to_int (ch);
- ch = *format++;
- } else if (ch == '*') {
- min = va_arg (args, int);
- ch = *format++;
- state = DP_S_DOT;
- } else {
- state = DP_S_DOT;
- }
- break;
- case DP_S_DOT:
- if (ch == '.') {
- state = DP_S_MAX;
- ch = *format++;
- } else {
- state = DP_S_MOD;
- }
- break;
- case DP_S_MAX:
- if (isdigit((unsigned char)ch)) {
- if (max < 0)
- max = 0;
- max = 10*max + char_to_int (ch);
- ch = *format++;
- } else if (ch == '*') {
- max = va_arg (args, int);
- ch = *format++;
- state = DP_S_MOD;
- } else {
- state = DP_S_MOD;
- }
- break;
- case DP_S_MOD:
- switch (ch) {
- case 'h':
- cflags = DP_C_SHORT;
- ch = *format++;
- break;
- case 'l':
- cflags = DP_C_LONG;
- ch = *format++;
- if (ch == 'l') { /* It's a long long */
- cflags = DP_C_LLONG;
- ch = *format++;
- }
- break;
- case 'L':
- cflags = DP_C_LDOUBLE;
- ch = *format++;
- break;
- default:
- break;
- }
- state = DP_S_CONV;
- break;
- case DP_S_CONV:
- switch (ch) {
- case 'd':
- case 'i':
- if (cflags == DP_C_SHORT)
- value = va_arg (args, int);
- else if (cflags == DP_C_LONG)
- value = va_arg (args, long int);
- else if (cflags == DP_C_LLONG)
- value = va_arg (args, LLONG);
- else
- value = va_arg (args, int);
- fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
- break;
- case 'o':
- flags |= DP_F_UNSIGNED;
- if (cflags == DP_C_SHORT)
- value = va_arg (args, unsigned int);
- else if (cflags == DP_C_LONG)
- value = (long)va_arg (args, unsigned long int);
- else if (cflags == DP_C_LLONG)
- value = (long)va_arg (args, unsigned LLONG);
- else
- value = (long)va_arg (args, unsigned int);
- fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
- break;
- case 'u':
- flags |= DP_F_UNSIGNED;
- if (cflags == DP_C_SHORT)
- value = va_arg (args, unsigned int);
- else if (cflags == DP_C_LONG)
- value = (long)va_arg (args, unsigned long int);
- else if (cflags == DP_C_LLONG)
- value = (LLONG)va_arg (args, unsigned LLONG);
- else
- value = (long)va_arg (args, unsigned int);
- fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
- break;
- case 'X':
- flags |= DP_F_UP;
- case 'x':
- flags |= DP_F_UNSIGNED;
- if (cflags == DP_C_SHORT)
- value = va_arg (args, unsigned int);
- else if (cflags == DP_C_LONG)
- value = (long)va_arg (args, unsigned long int);
- else if (cflags == DP_C_LLONG)
- value = (LLONG)va_arg (args, unsigned LLONG);
- else
- value = (long)va_arg (args, unsigned int);
- fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
- break;
- case 'f':
- if (cflags == DP_C_LDOUBLE)
- fvalue = va_arg (args, LDOUBLE);
- else
- fvalue = va_arg (args, double);
- /* um, floating point? */
- fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);
- break;
- case 'E':
- flags |= DP_F_UP;
- case 'e':
- if (cflags == DP_C_LDOUBLE)
- fvalue = va_arg (args, LDOUBLE);
- else
- fvalue = va_arg (args, double);
- break;
- case 'G':
- flags |= DP_F_UP;
- case 'g':
- if (cflags == DP_C_LDOUBLE)
- fvalue = va_arg (args, LDOUBLE);
- else
- fvalue = va_arg (args, double);
- break;
- case 'c':
- dopr_outch (buffer, &currlen, maxlen, va_arg (args, int));
- break;
- case 's':
- strvalue = va_arg (args, char *);
- if (max == -1) {
- max = strlen(strvalue);
- }
- if (min > 0 && max >= 0 && min > max) max = min;
- fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max);
- break;
- case 'p':
- strvalue = va_arg (args, void *);
- fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags);
- break;
- case 'n':
- if (cflags == DP_C_SHORT) {
- short int *num;
- num = va_arg (args, short int *);
- *num = currlen;
- } else if (cflags == DP_C_LONG) {
- long int *num;
- num = va_arg (args, long int *);
- *num = (long int)currlen;
- } else if (cflags == DP_C_LLONG) {
- LLONG *num;
- num = va_arg (args, LLONG *);
- *num = (LLONG)currlen;
- } else {
- int *num;
- num = va_arg (args, int *);
- *num = currlen;
- }
- break;
- case '%':
- dopr_outch (buffer, &currlen, maxlen, ch);
- break;
- case 'w':
- /* not supported yet, treat as next char */
- ch = *format++;
- break;
- default:
- /* Unknown, skip */
- break;
- }
- ch = *format++;
- state = DP_S_DEFAULT;
- flags = cflags = min = 0;
- max = -1;
- break;
- case DP_S_DONE:
- break;
- default:
- /* hmm? */
- break; /* some picky compilers need this */
- }
- }
- if (maxlen != 0) {
- if (currlen < maxlen - 1)
- buffer[currlen] = '\0';
- else if (maxlen > 0)
- buffer[maxlen - 1] = '\0';
+ }
+ else if (ch == '*')
+ {
+ min = va_arg (args, int);
+ ch = *format++;
+ state = DP_S_DOT;
+ }
+ else
+ state = DP_S_DOT;
+ break;
+ case DP_S_DOT:
+ if (ch == '.')
+ {
+ state = DP_S_MAX;
+ ch = *format++;
+ }
+ else
+ state = DP_S_MOD;
+ break;
+ case DP_S_MAX:
+ if (isdigit((unsigned char)ch))
+ {
+ if (max < 0)
+ max = 0;
+ max = 10*max + char_to_int (ch);
+ ch = *format++;
+ }
+ else if (ch == '*')
+ {
+ max = va_arg (args, int);
+ ch = *format++;
+ state = DP_S_MOD;
+ }
+ else
+ state = DP_S_MOD;
+ break;
+ case DP_S_MOD:
+ switch (ch)
+ {
+ case 'h':
+ cflags = DP_C_SHORT;
+ ch = *format++;
+ break;
+ case 'l':
+ cflags = DP_C_LONG;
+ ch = *format++;
+ if (ch == 'l') { /* It's a long long */
+ cflags = DP_C_LLONG;
+ ch = *format++;
}
-
- return currlen;
+ break;
+ case 'L':
+ cflags = DP_C_LDOUBLE;
+ ch = *format++;
+ break;
+ default:
+ break;
+ }
+ state = DP_S_CONV;
+ break;
+ case DP_S_CONV:
+ switch (ch)
+ {
+ case 'd':
+ case 'i':
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, short int);
+ else if (cflags == DP_C_LONG)
+ value = va_arg (args, long int);
+ else if (cflags == DP_C_LLONG)
+ value = va_arg (args, LLONG);
+ else
+ value = va_arg (args, int);
+ fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
+ break;
+ case 'o':
+ flags |= DP_F_UNSIGNED;
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, unsigned short int);
+ else if (cflags == DP_C_LONG)
+ value = (long)va_arg (args, unsigned long int);
+ else if (cflags == DP_C_LLONG)
+ value = (long)va_arg (args, unsigned LLONG);
+ else
+ value = (long)va_arg (args, unsigned int);
+ fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags);
+ break;
+ case 'u':
+ flags |= DP_F_UNSIGNED;
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, unsigned short int);
+ else if (cflags == DP_C_LONG)
+ value = (long)va_arg (args, unsigned long int);
+ else if (cflags == DP_C_LLONG)
+ value = (LLONG)va_arg (args, unsigned LLONG);
+ else
+ value = (long)va_arg (args, unsigned int);
+ fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags);
+ break;
+ case 'X':
+ flags |= DP_F_UP;
+ case 'x':
+ flags |= DP_F_UNSIGNED;
+ if (cflags == DP_C_SHORT)
+ value = va_arg (args, unsigned short int);
+ else if (cflags == DP_C_LONG)
+ value = (long)va_arg (args, unsigned long int);
+ else if (cflags == DP_C_LLONG)
+ value = (LLONG)va_arg (args, unsigned LLONG);
+ else
+ value = (long)va_arg (args, unsigned int);
+ fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags);
+ break;
+ case 'f':
+ if (cflags == DP_C_LDOUBLE)
+ fvalue = va_arg (args, LDOUBLE);
+ else
+ fvalue = va_arg (args, double);
+ /* um, floating point? */
+ fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags);
+ break;
+ case 'E':
+ flags |= DP_F_UP;
+ case 'e':
+ if (cflags == DP_C_LDOUBLE)
+ fvalue = va_arg (args, LDOUBLE);
+ else
+ fvalue = va_arg (args, double);
+ break;
+ case 'G':
+ flags |= DP_F_UP;
+ case 'g':
+ if (cflags == DP_C_LDOUBLE)
+ fvalue = va_arg (args, LDOUBLE);
+ else
+ fvalue = va_arg (args, double);
+ break;
+ case 'c':
+ dopr_outch (buffer, &currlen, maxlen, va_arg (args, int));
+ break;
+ case 's':
+ strvalue = va_arg (args, char *);
+ if (max < 0)
+ max = maxlen; /* ie, no max */
+ fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max);
+ break;
+ case 'p':
+ strvalue = va_arg (args, void *);
+ fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags);
+ break;
+ case 'n':
+ if (cflags == DP_C_SHORT)
+ {
+ short int *num;
+ num = va_arg (args, short int *);
+ *num = currlen;
+ }
+ else if (cflags == DP_C_LONG)
+ {
+ long int *num;
+ num = va_arg (args, long int *);
+ *num = (long int)currlen;
+ }
+ else if (cflags == DP_C_LLONG)
+ {
+ LLONG *num;
+ num = va_arg (args, LLONG *);
+ *num = (LLONG)currlen;
+ }
+ else
+ {
+ int *num;
+ num = va_arg (args, int *);
+ *num = currlen;
+ }
+ break;
+ case '%':
+ dopr_outch (buffer, &currlen, maxlen, ch);
+ break;
+ case 'w':
+ /* not supported yet, treat as next char */
+ ch = *format++;
+ break;
+ default:
+ /* Unknown, skip */
+ break;
+ }
+ ch = *format++;
+ state = DP_S_DEFAULT;
+ flags = cflags = min = 0;
+ max = -1;
+ break;
+ case DP_S_DONE:
+ break;
+ default:
+ /* hmm? */
+ break; /* some picky compilers need this */
+ }
+ }
+ if (currlen < maxlen - 1)
+ buffer[currlen] = '\0';
+ else
+ buffer[maxlen - 1] = '\0';
}
-static void fmtstr(char *buffer, size_t *currlen, size_t maxlen,
+static void fmtstr (char *buffer, size_t *currlen, size_t maxlen,
char *value, int flags, int min, int max)
{
- int padlen, strln; /* amount to pad */
- int cnt = 0;
-
-#ifdef DEBUG_SNPRINTF
- printf("fmtstr min=%d max=%d s=[%s]\n", min, max, value);
-#endif
- if (value == 0) {
- value = "<NULL>";
- }
-
- for (strln = 0; value[strln]; ++strln); /* strlen */
- padlen = min - strln;
- if (padlen < 0)
- padlen = 0;
- if (flags & DP_F_MINUS)
- padlen = -padlen; /* Left Justify */
-
- while ((padlen > 0) && (cnt < max)) {
- dopr_outch (buffer, currlen, maxlen, ' ');
- --padlen;
- ++cnt;
- }
- while (*value && (cnt < max)) {
- dopr_outch (buffer, currlen, maxlen, *value++);
- ++cnt;
- }
- while ((padlen < 0) && (cnt < max)) {
- dopr_outch (buffer, currlen, maxlen, ' ');
- ++padlen;
- ++cnt;
- }
+ int padlen, strln; /* amount to pad */
+ int cnt = 0;
+
+ if (value == 0)
+ {
+ value = "<NULL>";
+ }
+
+ for (strln = 0; value[strln]; ++strln); /* strlen */
+ padlen = min - strln;
+ if (padlen < 0)
+ padlen = 0;
+ if (flags & DP_F_MINUS)
+ padlen = -padlen; /* Left Justify */
+
+ while ((padlen > 0) && (cnt < max))
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ --padlen;
+ ++cnt;
+ }
+ while (*value && (cnt < max))
+ {
+ dopr_outch (buffer, currlen, maxlen, *value++);
+ ++cnt;
+ }
+ while ((padlen < 0) && (cnt < max))
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ ++padlen;
+ ++cnt;
+ }
}
/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */
-static void fmtint(char *buffer, size_t *currlen, size_t maxlen,
+static void fmtint (char *buffer, size_t *currlen, size_t maxlen,
long value, int base, int min, int max, int flags)
{
- int signvalue = 0;
- unsigned long uvalue;
- char convert[20];
- int place = 0;
- int spadlen = 0; /* amount to space pad */
- int zpadlen = 0; /* amount to zero pad */
- int caps = 0;
-
- if (max < 0)
- max = 0;
-
- uvalue = value;
-
- if(!(flags & DP_F_UNSIGNED)) {
- if( value < 0 ) {
- signvalue = '-';
- uvalue = -value;
- } else {
- if (flags & DP_F_PLUS) /* Do a sign (+/i) */
- signvalue = '+';
- else if (flags & DP_F_SPACE)
- signvalue = ' ';
- }
- }
+ int signvalue = 0;
+ unsigned long uvalue;
+ char convert[20];
+ int place = 0;
+ int spadlen = 0; /* amount to space pad */
+ int zpadlen = 0; /* amount to zero pad */
+ int caps = 0;
- if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
-
- do {
- convert[place++] =
- (caps? "0123456789ABCDEF":"0123456789abcdef")
- [uvalue % (unsigned)base ];
- uvalue = (uvalue / (unsigned)base );
- } while(uvalue && (place < 20));
- if (place == 20) place--;
- convert[place] = 0;
-
- zpadlen = max - place;
- spadlen = min - MAX (max, place) - (signvalue ? 1 : 0);
- if (zpadlen < 0) zpadlen = 0;
- if (spadlen < 0) spadlen = 0;
- if (flags & DP_F_ZERO) {
- zpadlen = MAX(zpadlen, spadlen);
- spadlen = 0;
- }
- if (flags & DP_F_MINUS)
- spadlen = -spadlen; /* Left Justifty */
+ if (max < 0)
+ max = 0;
+
+ uvalue = value;
+
+ if(!(flags & DP_F_UNSIGNED))
+ {
+ if( value < 0 ) {
+ signvalue = '-';
+ uvalue = -value;
+ }
+ else
+ if (flags & DP_F_PLUS) /* Do a sign (+/i) */
+ signvalue = '+';
+ else
+ if (flags & DP_F_SPACE)
+ signvalue = ' ';
+ }
+
+ if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
+
+ do {
+ convert[place++] =
+ (caps? "0123456789ABCDEF":"0123456789abcdef")
+ [uvalue % (unsigned)base ];
+ uvalue = (uvalue / (unsigned)base );
+ } while(uvalue && (place < 20));
+ if (place == 20) place--;
+ convert[place] = 0;
+
+ zpadlen = max - place;
+ spadlen = min - MAX (max, place) - (signvalue ? 1 : 0);
+ if (zpadlen < 0) zpadlen = 0;
+ if (spadlen < 0) spadlen = 0;
+ if (flags & DP_F_ZERO)
+ {
+ zpadlen = MAX(zpadlen, spadlen);
+ spadlen = 0;
+ }
+ if (flags & DP_F_MINUS)
+ spadlen = -spadlen; /* Left Justifty */
#ifdef DEBUG_SNPRINTF
- printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n",
- zpadlen, spadlen, min, max, place);
+ printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n",
+ zpadlen, spadlen, min, max, place);
#endif
- /* Spaces */
- while (spadlen > 0) {
- dopr_outch (buffer, currlen, maxlen, ' ');
- --spadlen;
- }
-
- /* Sign */
- if (signvalue)
- dopr_outch (buffer, currlen, maxlen, signvalue);
-
- /* Zeros */
- if (zpadlen > 0) {
- while (zpadlen > 0) {
- dopr_outch (buffer, currlen, maxlen, '0');
- --zpadlen;
- }
- }
-
- /* Digits */
- while (place > 0)
- dopr_outch (buffer, currlen, maxlen, convert[--place]);
+ /* Spaces */
+ while (spadlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ --spadlen;
+ }
+
+ /* Sign */
+ if (signvalue)
+ dopr_outch (buffer, currlen, maxlen, signvalue);
+
+ /* Zeros */
+ if (zpadlen > 0)
+ {
+ while (zpadlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, '0');
+ --zpadlen;
+ }
+ }
+
+ /* Digits */
+ while (place > 0)
+ dopr_outch (buffer, currlen, maxlen, convert[--place]);
- /* Left Justified spaces */
- while (spadlen < 0) {
- dopr_outch (buffer, currlen, maxlen, ' ');
- ++spadlen;
- }
+ /* Left Justified spaces */
+ while (spadlen < 0) {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ ++spadlen;
+ }
}
-static LDOUBLE abs_val(LDOUBLE value)
+static LDOUBLE abs_val (LDOUBLE value)
{
- LDOUBLE result = value;
+ LDOUBLE result = value;
- if (value < 0)
- result = -value;
-
- return result;
-}
+ if (value < 0)
+ result = -value;
-static LDOUBLE POW10(int exp)
-{
- LDOUBLE result = 1;
-
- while (exp) {
- result *= 10;
- exp--;
- }
-
- return result;
+ return result;
}
-static LLONG ROUND(LDOUBLE value)
+static LDOUBLE pow10 (int exp)
{
- LLONG intpart;
+ LDOUBLE result = 1;
- intpart = (LLONG)value;
- value = value - intpart;
- if (value >= 0.5) intpart++;
-
- return intpart;
+ while (exp)
+ {
+ result *= 10;
+ exp--;
+ }
+
+ return result;
}
-/* a replacement for modf that doesn't need the math library. Should
- be portable, but slow */
-static double my_modf(double x0, double *iptr)
+static long round (LDOUBLE value)
{
- int i;
- long l;
- double x = x0;
- double f = 1.0;
-
- for (i=0;i<100;i++) {
- l = (long)x;
- if (l <= (x+1) && l >= (x-1)) break;
- x *= 0.1;
- f *= 10.0;
- }
+ long intpart;
- if (i == 100) {
- /* yikes! the number is beyond what we can handle. What do we do? */
- (*iptr) = 0;
- return 0;
- }
-
- if (i != 0) {
- double i2;
- double ret;
+ intpart = (long)value;
+ value = value - intpart;
+ if (value >= 0.5)
+ intpart++;
- ret = my_modf(x0-l*f, &i2);
- (*iptr) = l*f + i2;
- return ret;
- }
-
- (*iptr) = l;
- return x - (*iptr);
+ return intpart;
}
-
static void fmtfp (char *buffer, size_t *currlen, size_t maxlen,
LDOUBLE fvalue, int min, int max, int flags)
{
- int signvalue = 0;
- double ufvalue;
- char iconvert[311];
- char fconvert[311];
- int iplace = 0;
- int fplace = 0;
- int padlen = 0; /* amount to pad */
- int zpadlen = 0;
- int caps = 0;
- int index;
- double intpart;
- double fracpart;
- double temp;
+ int signvalue = 0;
+ LDOUBLE ufvalue;
+#ifndef HAVE_FCVT
+ char iconvert[20];
+ char fconvert[20];
+#else
+ char iconvert[311];
+ char fconvert[311];
+ char *result;
+ int dec_pt, sig;
+ int r_length;
+# ifdef HAVE_FCVTL
+ extern char *fcvtl(long double value, int ndigit, int *decpt, int *sign);
+# else
+ extern char *fcvt(double value, int ndigit, int *decpt, int *sign);
+# endif
+#endif
+ int iplace = 0;
+ int fplace = 0;
+ int padlen = 0; /* amount to pad */
+ int zpadlen = 0;
+ int caps = 0;
+ long intpart;
+ long fracpart;
- /*
- * AIX manpage says the default is 0, but Solaris says the default
- * is 6, and sprintf on AIX defaults to 6
- */
- if (max < 0)
- max = 6;
-
- ufvalue = abs_val (fvalue);
-
- if (fvalue < 0) {
- signvalue = '-';
- } else {
- if (flags & DP_F_PLUS) { /* Do a sign (+/i) */
- signvalue = '+';
- } else {
- if (flags & DP_F_SPACE)
- signvalue = ' ';
- }
- }
+ /*
+ * AIX manpage says the default is 0, but Solaris says the default
+ * is 6, and sprintf on AIX defaults to 6
+ */
+ if (max < 0)
+ max = 6;
+
+ ufvalue = abs_val (fvalue);
+
+ if (fvalue < 0)
+ signvalue = '-';
+ else
+ if (flags & DP_F_PLUS) /* Do a sign (+/i) */
+ signvalue = '+';
+ else
+ if (flags & DP_F_SPACE)
+ signvalue = ' ';
#if 0
- if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
+ if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
#endif
-#if 0
- if (max == 0) ufvalue += 0.5; /* if max = 0 we must round */
+#ifndef HAVE_FCVT
+ intpart = (long)ufvalue;
+
+ /*
+ * Sorry, we only support 9 digits past the decimal because of our
+ * conversion method
+ */
+ if (max > 9)
+ max = 9;
+
+ /* We "cheat" by converting the fractional part to integer by
+ * multiplying by a factor of 10
+ */
+ fracpart = round ((pow10 (max)) * (ufvalue - intpart));
+
+ if (fracpart >= pow10 (max))
+ {
+ intpart++;
+ fracpart -= pow10 (max);
+ }
+
+#ifdef DEBUG_SNPRINTF
+ printf("fmtfp: %g %d.%d min=%d max=%d\n",
+ (double)fvalue, intpart, fracpart, min, max);
#endif
- /*
- * Sorry, we only support 16 digits past the decimal because of our
- * conversion method
- */
- if (max > 16)
- max = 16;
-
- /* We "cheat" by converting the fractional part to integer by
- * multiplying by a factor of 10
- */
-
- temp = ufvalue;
- my_modf(temp, &intpart);
-
- fracpart = ROUND((POW10(max)) * (ufvalue - intpart));
-
- if (fracpart >= POW10(max)) {
- intpart++;
- fracpart -= POW10(max);
+ /* Convert integer part */
+ do {
+ iconvert[iplace++] =
+ (caps? "0123456789ABCDEF":"0123456789abcdef")[intpart % 10];
+ intpart = (intpart / 10);
+ } while(intpart && (iplace < 20));
+ if (iplace == 20) iplace--;
+ iconvert[iplace] = 0;
+
+ /* Convert fractional part */
+ do {
+ fconvert[fplace++] =
+ (caps? "0123456789ABCDEF":"0123456789abcdef")[fracpart % 10];
+ fracpart = (fracpart / 10);
+ } while(fracpart && (fplace < 20));
+ if (fplace == 20) fplace--;
+ fconvert[fplace] = 0;
+#else /* use fcvt() */
+ if (max > 310)
+ max = 310;
+# ifdef HAVE_FCVTL
+ result = fcvtl(ufvalue, max, &dec_pt, &sig);
+# else
+ result = fcvt(ufvalue, max, &dec_pt, &sig);
+# endif
+
+ r_length = strlen(result);
+
+ /*
+ * Fix broken fcvt implementation returns..
+ */
+
+ if (r_length == 0)
+ {
+ result[0] = '0';
+ result[1] = '\0';
+ r_length = 1;
+ }
+
+ if ( r_length < dec_pt )
+ dec_pt = r_length;
+
+ if (dec_pt <= 0) {
+ iplace = 1;
+ iconvert[0] = '0';
+ iconvert[1] = '\0';
+
+ fplace = 0;
+
+ while(r_length)
+ fconvert[fplace++] = result[--r_length];
+
+ while ((dec_pt < 0) && (fplace < max)) {
+ fconvert[fplace++] = '0';
+ dec_pt++;
}
+ } else {
+ int c;
+ iplace=0;
+ for(c=dec_pt; c; iconvert[iplace++] = result[--c])
+ ;
+ iconvert[iplace] = '\0';
- /* Convert integer part */
- do {
- temp = intpart;
- my_modf(intpart*0.1, &intpart);
- temp = temp*0.1;
- index = (int) ((temp -intpart +0.05)* 10.0);
- /* index = (int) (((double)(temp*0.1) -intpart +0.05) *10.0); */
- /* printf ("%llf, %f, %x\n", temp, intpart, index); */
- iconvert[iplace++] =
- (caps? "0123456789ABCDEF":"0123456789abcdef")[index];
- } while (intpart && (iplace < 311));
- if (iplace == 311) iplace--;
- iconvert[iplace] = 0;
-
- /* Convert fractional part */
- if (fracpart)
- {
- do {
- temp = fracpart;
- my_modf(fracpart*0.1, &fracpart);
- temp = temp*0.1;
- index = (int) ((temp -fracpart +0.05)* 10.0);
- /* index = (int) ((((temp/10) -fracpart) +0.05) *10); */
- /* printf ("%lf, %lf, %ld\n", temp, fracpart, index); */
- fconvert[fplace++] =
- (caps? "0123456789ABCDEF":"0123456789abcdef")[index];
- } while(fracpart && (fplace < 311));
- if (fplace == 311) fplace--;
- }
- fconvert[fplace] = 0;
+ result += dec_pt;
+ fplace = 0;
+
+ for(c=(r_length-dec_pt); c; fconvert[fplace++] = result[--c])
+ ;
+ }
+#endif /* fcvt */
- /* -1 for decimal point, another -1 if we are printing a sign */
- padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
- zpadlen = max - fplace;
- if (zpadlen < 0) zpadlen = 0;
- if (padlen < 0)
- padlen = 0;
- if (flags & DP_F_MINUS)
- padlen = -padlen; /* Left Justifty */
-
- if ((flags & DP_F_ZERO) && (padlen > 0)) {
- if (signvalue) {
- dopr_outch (buffer, currlen, maxlen, signvalue);
- --padlen;
- signvalue = 0;
- }
- while (padlen > 0) {
- dopr_outch (buffer, currlen, maxlen, '0');
- --padlen;
- }
- }
- while (padlen > 0) {
- dopr_outch (buffer, currlen, maxlen, ' ');
- --padlen;
- }
- if (signvalue)
- dopr_outch (buffer, currlen, maxlen, signvalue);
-
- while (iplace > 0)
- dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
+ /* -1 for decimal point, another -1 if we are printing a sign */
+ padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
+ zpadlen = max - fplace;
+ if (zpadlen < 0)
+ zpadlen = 0;
+ if (padlen < 0)
+ padlen = 0;
+ if (flags & DP_F_MINUS)
+ padlen = -padlen; /* Left Justifty */
+
+ if ((flags & DP_F_ZERO) && (padlen > 0))
+ {
+ if (signvalue)
+ {
+ dopr_outch (buffer, currlen, maxlen, signvalue);
+ --padlen;
+ signvalue = 0;
+ }
+ while (padlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, '0');
+ --padlen;
+ }
+ }
+ while (padlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ --padlen;
+ }
+ if (signvalue)
+ dopr_outch (buffer, currlen, maxlen, signvalue);
+
+ while (iplace > 0)
+ dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
+
#ifdef DEBUG_SNPRINTF
- printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen);
+ printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen);
#endif
- /*
- * Decimal point. This should probably use locale to find the correct
- * char to print out.
- */
- if (max > 0) {
- dopr_outch (buffer, currlen, maxlen, '.');
-
- while (fplace > 0)
- dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
- }
-
- while (zpadlen > 0) {
- dopr_outch (buffer, currlen, maxlen, '0');
- --zpadlen;
- }
-
- while (padlen < 0) {
- dopr_outch (buffer, currlen, maxlen, ' ');
- ++padlen;
- }
+ /*
+ * Decimal point. This should probably use locale to find the correct
+ * char to print out.
+ */
+ if (max > 0) {
+ dopr_outch (buffer, currlen, maxlen, '.');
+
+ while (fplace > 0)
+ dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
+ }
+
+ while (zpadlen > 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, '0');
+ --zpadlen;
+ }
+
+ while (padlen < 0)
+ {
+ dopr_outch (buffer, currlen, maxlen, ' ');
+ ++padlen;
+ }
}
-static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c)
+static void dopr_outch (char *buffer, size_t *currlen, size_t maxlen, char c)
{
- if (*currlen < maxlen) {
- buffer[(*currlen)] = c;
- }
- (*currlen)++;
+ if (*currlen < maxlen)
+ buffer[(*currlen)++] = c;
}
+#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */
-#if !defined(HAVE_VSNPRINTF) || !defined(HAVE_C99_VSNPRINTF)
+#ifndef HAVE_VSNPRINTF
int vsnprintf (char *str, size_t count, const char *fmt, va_list args)
{
- return dopr(str, count, fmt, args);
+ str[0] = 0;
+ dopr(str, count, fmt, args);
+ return(strlen(str));
}
-#endif
+#endif /* !HAVE_VSNPRINTF */
-#if !defined(HAVE_SNPRINTF) || !defined(HAVE_C99_VSNPRINTF)
- int snprintf(char *str,size_t count,const char *fmt,...)
-{
- size_t ret;
- va_list ap;
-
- va_start(ap, fmt);
- ret = vsnprintf(str, count, fmt, ap);
- va_end(ap);
- return ret;
-}
+#if 0 /* DONT USE SNPRINTF !!! */
+#ifndef HAVE_SNPRINTF
+/* VARARGS3 */
+#ifdef HAVE_STDARGS
+ int snprintf (char *str,size_t count,const char *fmt,...)
+#else
+ int snprintf (va_alist) va_dcl
#endif
-
-#endif
-
-#ifndef HAVE_VASPRINTF
- int vasprintf(char **ptr, const char *format, va_list ap)
{
- int ret;
-
- ret = vsnprintf(NULL, 0, format, ap);
- if (ret <= 0) return ret;
-
- (*ptr) = (char *)malloc(ret+1);
- if (!*ptr) return -1;
- ret = vsnprintf(*ptr, ret+1, format, ap);
-
- return ret;
-}
+#ifndef HAVE_STDARGS
+ char *str;
+ size_t count;
+ char *fmt;
#endif
-
-
-#ifndef HAVE_ASPRINTF
- int asprintf(char **ptr, const char *format, ...)
-{
- va_list ap;
- int ret;
-
- va_start(ap, format);
- ret = vasprintf(ptr, format, ap);
- va_end(ap);
-
- return ret;
+ VA_LOCAL_DECL;
+
+ VA_START (fmt);
+ VA_SHIFT (str, char *);
+ VA_SHIFT (count, size_t );
+ VA_SHIFT (fmt, char *);
+ (void) vsnprintf(str, count, fmt, ap);
+ VA_END;
+ return(strlen(str));
}
#endif
-#ifdef TEST_SNPRINTF
-
- int sprintf(char *str,const char *fmt,...);
+#else
+ /* keep compilers happy about empty files */
+ void dummy_snprintf(void) {}
+#endif /* !HAVE_SNPRINTF */
+#ifdef TEST_SNPRINTF
+#ifndef LONG_STRING
+#define LONG_STRING 1024
+#endif
int main (void)
{
- char buf1[1024];
- char buf2[1024];
- char *fp_fmt[] = {
- "%1.1f",
- "%-1.5f",
- "%1.5f",
- "%123.9f",
- "%10.5f",
- "% 10.5f",
- "%+22.9f",
- "%+4.9f",
- "%01.3f",
- "%4f",
- "%3.1f",
- "%3.2f",
- "%.0f",
- "%f",
- "-16.16f",
- NULL
- };
- double fp_nums[] = { 6442452944.1234, -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996,
- 0.9996, 1.996, 4.136, 0};
- char *int_fmt[] = {
- "%-1.5d",
- "%1.5d",
- "%123.9d",
- "%5.5d",
- "%10.5d",
- "% 10.5d",
- "%+22.33d",
- "%01.3d",
- "%4d",
- "%d",
- NULL
- };
- long int_nums[] = { -1, 134, 91340, 341, 0203, 0};
- char *str_fmt[] = {
- "10.5s",
- "5.10s",
- "10.1s",
- "0.10s",
- "10.0s",
- "1.10s",
- "%s",
- "%.1s",
- "%.10s",
- "%10s",
- NULL
- };
- char *str_vals[] = {"hello", "a", "", "a longer string", NULL};
- int x, y;
- int fail = 0;
- int num = 0;
-
- printf ("Testing snprintf format codes against system sprintf...\n");
-
- for (x = 0; fp_fmt[x] ; x++) {
- for (y = 0; fp_nums[y] != 0 ; y++) {
- int l1 = snprintf(NULL, 0, fp_fmt[x], fp_nums[y]);
- int l2 = snprintf(buf1, sizeof(buf1), fp_fmt[x], fp_nums[y]);
- sprintf (buf2, fp_fmt[x], fp_nums[y]);
- if (strcmp (buf1, buf2)) {
- printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n",
- fp_fmt[x], buf1, buf2);
- fail++;
- }
- if (l1 != l2) {
- printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, fp_fmt[x]);
- fail++;
- }
- num++;
- }
- }
-
- for (x = 0; int_fmt[x] ; x++) {
- for (y = 0; int_nums[y] != 0 ; y++) {
- int l1 = snprintf(NULL, 0, int_fmt[x], int_nums[y]);
- int l2 = snprintf(buf1, sizeof(buf1), int_fmt[x], int_nums[y]);
- sprintf (buf2, int_fmt[x], int_nums[y]);
- if (strcmp (buf1, buf2)) {
- printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n",
- int_fmt[x], buf1, buf2);
- fail++;
- }
- if (l1 != l2) {
- printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, int_fmt[x]);
- fail++;
- }
- num++;
- }
- }
-
- for (x = 0; str_fmt[x] ; x++) {
- for (y = 0; str_vals[y] != 0 ; y++) {
- int l1 = snprintf(NULL, 0, str_fmt[x], str_vals[y]);
- int l2 = snprintf(buf1, sizeof(buf1), str_fmt[x], str_vals[y]);
- sprintf (buf2, str_fmt[x], str_vals[y]);
- if (strcmp (buf1, buf2)) {
- printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n",
- str_fmt[x], buf1, buf2);
- fail++;
- }
- if (l1 != l2) {
- printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, str_fmt[x]);
- fail++;
- }
- num++;
- }
- }
-
- printf ("%d tests failed out of %d.\n", fail, num);
-
- printf("seeing how many digits we support\n");
- {
- double v0 = 0.12345678901234567890123456789012345678901;
- for (x=0; x<100; x++) {
- snprintf(buf1, sizeof(buf1), "%1.1f", v0*pow(10, x));
- sprintf(buf2, "%1.1f", v0*pow(10, x));
- if (strcmp(buf1, buf2)) {
- printf("we seem to support %d digits\n", x-1);
- break;
- }
- }
- }
-
- return 0;
+ char buf1[LONG_STRING];
+ char buf2[LONG_STRING];
+ char *fp_fmt[] = {
+ "%-1.5f",
+ "%1.5f",
+ "%123.9f",
+ "%10.5f",
+ "% 10.5f",
+ "%+22.9f",
+ "%+4.9f",
+ "%01.3f",
+ "%4f",
+ "%3.1f",
+ "%3.2f",
+ "%.0f",
+ "%.1f",
+ NULL
+ };
+ double fp_nums[] = { -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996,
+ 0.9996, 1.996, 4.136, 6442452944.1234, 0};
+ char *int_fmt[] = {
+ "%-1.5d",
+ "%1.5d",
+ "%123.9d",
+ "%5.5d",
+ "%10.5d",
+ "% 10.5d",
+ "%+22.33d",
+ "%01.3d",
+ "%4d",
+ NULL
+ };
+ long int_nums[] = { -1, 134, 91340, 341, 0203, 0};
+ int x, y;
+ int fail = 0;
+ int num = 0;
+
+ printf ("Testing snprintf format codes against system sprintf...\n");
+
+ for (x = 0; fp_fmt[x] != NULL ; x++)
+ for (y = 0; fp_nums[y] != 0 ; y++)
+ {
+ snprintf (buf1, sizeof (buf1), fp_fmt[x], fp_nums[y]);
+ sprintf (buf2, fp_fmt[x], fp_nums[y]);
+ if (strcmp (buf1, buf2))
+ {
+ printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n",
+ fp_fmt[x], buf1, buf2);
+ fail++;
+ }
+ num++;
+ }
+
+ for (x = 0; int_fmt[x] != NULL ; x++)
+ for (y = 0; int_nums[y] != 0 ; y++)
+ {
+ snprintf (buf1, sizeof (buf1), int_fmt[x], int_nums[y]);
+ sprintf (buf2, int_fmt[x], int_nums[y]);
+ if (strcmp (buf1, buf2))
+ {
+ printf("snprintf doesn't match Format: %s\n\tsnprintf = %s\n\tsprintf = %s\n",
+ int_fmt[x], buf1, buf2);
+ fail++;
+ }
+ num++;
+ }
+ printf ("%d tests failed out of %d.\n", fail, num);
}
#endif /* SNPRINTF_TEST */
+
diff --git a/source/lib/substitute.c b/source/lib/substitute.c
index 25be4b030f7..6abdeea114c 100644
--- a/source/lib/substitute.c
+++ b/source/lib/substitute.c
@@ -172,21 +172,9 @@ void standard_sub_basic(char *str)
fstring pidstr;
for (s=str; (p=strchr(s, '%'));s=p) {
- fstring tmp_str;
-
int l = sizeof(pstring) - (int)(p-str);
switch (*(p+1)) {
- case 'U' :
- fstrcpy(tmp_str, sam_logon_in_ssb?samlogon_user:current_user_info.smb_name);
- strlower(tmp_str);
- string_sub(p,"%U",tmp_str,l);
- break;
- case 'D' :
- fstrcpy(tmp_str, current_user_info.domain);
- strupper(tmp_str);
- string_sub(p,"%D", tmp_str,l);
- break;
case 'I' : string_sub(p,"%I", client_addr(),l); break;
case 'L' : string_sub(p,"%L", local_machine,l); break;
case 'M' : string_sub(p,"%M", client_name(),l); break;
@@ -224,6 +212,7 @@ void standard_sub_advanced(int snum, char *user, char *connectpath, gid_t gid, c
int l = sizeof(pstring) - (int)(p-str);
switch (*(p+1)) {
+ case 'U' : string_sub(p,"%U",sam_logon_in_ssb?samlogon_user:current_user_info.smb_name,l); break;
case 'G' :
if ((pass = Get_Pwnam(user,False))!=NULL) {
string_sub(p,"%G",gidtoname(pass->pw_gid),l);
@@ -231,6 +220,7 @@ void standard_sub_advanced(int snum, char *user, char *connectpath, gid_t gid, c
p += 2;
}
break;
+ case 'D' : string_sub(p,"%D", current_user_info.domain,l); break;
case 'N' : string_sub(p,"%N", automount_server(user),l); break;
case 'H':
if ((home = get_user_home_dir(user))) {
diff --git a/source/lib/sysacls.c b/source/lib/sysacls.c
index 0770a8856a2..d1b6e58b409 100644
--- a/source/lib/sysacls.c
+++ b/source/lib/sysacls.c
@@ -45,9 +45,8 @@ extern int DEBUGLEVEL;
int sys_acl_set_qualifier( SMB_ACL_ENTRY_T entry, void *qual)
int sys_acl_set_permset( SMB_ACL_ENTRY_T entry, SMB_ACL_PERMSET_T permset)
int sys_acl_valid( SMB_ACL_T theacl )
- int sys_acl_set_file( const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
+ int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
int sys_acl_set_fd( int fd, SMB_ACL_T theacl)
- int sys_acl_delete_def_file(const char *path)
This next one is not POSIX complient - but we *have* to have it !
More POSIX braindamage.
@@ -161,7 +160,7 @@ int sys_acl_valid( SMB_ACL_T theacl )
return acl_valid(theacl);
}
-int sys_acl_set_file( const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
+int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
{
return acl_set_file(name, acltype, theacl);
}
@@ -171,11 +170,6 @@ int sys_acl_set_fd( int fd, SMB_ACL_T theacl)
return acl_set_fd(fd, theacl);
}
-int sys_acl_delete_def_file(const char *name)
-{
- return acl_delete_def_file(name);
-}
-
int sys_acl_free_text(char *text)
{
return acl_free(text);
@@ -655,40 +649,17 @@ int sys_acl_set_permset(SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T permset_d)
return 0;
}
-/*
- * sort the ACL and check it for validity
- *
- * if it's a minimal ACL with only 4 entries then we
- * need to recalculate the mask permissions to make
- * sure that they are the same as the GROUP_OBJ
- * permissions as required by the UnixWare acl() system call.
- *
- * (note: since POSIX allows minimal ACLs which only contain
- * 3 entries - ie there is no mask entry - we should, in theory,
- * check for this and add a mask entry if necessary - however
- * we "know" that the caller of this interface always specifies
- * a mask so, in practice "this never happens" (tm) - if it *does*
- * happen aclsort() will fail and return an error and someone will
- * have to fix it ...)
- */
-
-static int acl_sort(SMB_ACL_T acl_d)
+int sys_acl_valid(SMB_ACL_T acl_d)
{
- int fixmask = (acl_d->count <= 4);
-
- if (aclsort(acl_d->count, fixmask, acl_d->acl) != 0) {
+ if (aclsort(acl_d->count, 1, acl_d->acl) != 0) {
errno = EINVAL;
return -1;
}
+
return 0;
}
-
-int sys_acl_valid(SMB_ACL_T acl_d)
-{
- return acl_sort(acl_d);
-}
-int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d)
+int sys_acl_set_file(char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d)
{
struct stat s;
struct acl *acl_p;
@@ -701,7 +672,7 @@ int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d)
return -1;
}
- if (acl_sort(acl_d) != 0) {
+ if (stat(name, &s) != 0) {
return -1;
}
@@ -713,9 +684,6 @@ int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d)
* since the acl() system call will replace both
* the access ACLs and the default ACLs (if any)
*/
- if (stat(name, &s) != 0) {
- return -1;
- }
if (S_ISDIR(s.st_mode)) {
SMB_ACL_T acc_acl;
SMB_ACL_T def_acl;
@@ -724,11 +692,13 @@ int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d)
if (type == SMB_ACL_TYPE_ACCESS) {
acc_acl = acl_d;
- def_acl = tmp_acl = sys_acl_get_file(name, SMB_ACL_TYPE_DEFAULT);
+ def_acl =
+ tmp_acl = sys_acl_get_file(name, SMB_ACL_TYPE_DEFAULT);
} else {
def_acl = acl_d;
- acc_acl = tmp_acl = sys_acl_get_file(name, SMB_ACL_TYPE_ACCESS);
+ acc_acl =
+ tmp_acl = sys_acl_get_file(name, SMB_ACL_TYPE_ACCESS);
}
if (tmp_acl == NULL) {
@@ -738,8 +708,9 @@ int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d)
/*
* allocate a temporary buffer for the complete ACL
*/
- acl_count = acc_acl->count + def_acl->count;
- acl_p = acl_buf = malloc(acl_count * sizeof(acl_buf[0]));
+ acl_count = acc_acl->count + def_acl->count;
+ acl_p =
+ acl_buf = malloc(acl_count * sizeof(acl_buf[0]));
if (acl_buf == NULL) {
sys_acl_free_acl(tmp_acl);
@@ -770,7 +741,12 @@ int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d)
return -1;
}
- ret = acl(name, SETACL, acl_count, acl_p);
+ if (aclsort(acl_count, 1, acl_p) != 0) {
+ errno = EINVAL;
+ ret = -1;
+ } else {
+ ret = acl(name, SETACL, acl_count, acl_p);
+ }
if (acl_buf) {
free(acl_buf);
@@ -781,33 +757,14 @@ int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d)
int sys_acl_set_fd(int fd, SMB_ACL_T acl_d)
{
- if (acl_sort(acl_d) != 0) {
+ if (aclsort(acl_d->count, 1, acl_d->acl) != 0) {
+ errno = EINVAL;
return -1;
}
return facl(fd, SETACL, acl_d->count, &acl_d->acl[0]);
}
-int sys_acl_delete_def_file(const char *path)
-{
- SMB_ACL_T acl_d;
- int ret;
-
- /*
- * fetching the access ACL and rewriting it has
- * the effect of deleting the default ACL
- */
- if ((acl_d = sys_acl_get_file(path, SMB_ACL_TYPE_ACCESS)) == NULL) {
- return -1;
- }
-
- ret = acl(path, SETACL, acl_d->count, acl_d->acl);
-
- sys_acl_free_acl(acl_d);
-
- return ret;
-}
-
int sys_acl_free_text(char *text)
{
free(text);
@@ -1046,7 +1003,7 @@ int sys_acl_valid(SMB_ACL_T acl_d)
return acl_valid(acl_d->aclp);
}
-int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d)
+int sys_acl_set_file(char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d)
{
return acl_set_file(name, type, acl_d->aclp);
}
@@ -1056,11 +1013,6 @@ int sys_acl_set_fd(int fd, SMB_ACL_T acl_d)
return acl_set_fd(fd, acl_d->aclp);
}
-int sys_acl_delete_def_file(const char *name)
-{
- return acl_delete_def_file(name);
-}
-
int sys_acl_free_text(char *text)
{
return acl_free(text);
@@ -1080,6 +1032,225 @@ int sys_acl_free_qualifier(void *qual)
return 0;
}
+#elif defined(HAVE_XFS_ACLS)
+/* For Linux SGI/XFS Filesystems
+ * contributed by J Trostel, Connex
+ * */
+
+/* based on the implementation for Solaris by Toomas Soome.. which is
+ * based on the implementation by Micheal Davidson for Unixware...
+ *
+ * Linux XFS is a 'work-in-progress'
+ * This interface may change...
+ * You've been warned ;-> */
+
+/* First, do the identity mapping */
+
+int sys_acl_get_entry( SMB_ACL_T the_acl, int entry_id, SMB_ACL_ENTRY_T *entry_p)
+{
+ if( acl_get_entry( the_acl, entry_id, entry_p) >= 0) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+}
+
+SMB_ACL_T sys_acl_get_file( const char *path_p, SMB_ACL_TYPE_T type)
+{
+ return acl_get_file( path_p, type);
+}
+
+SMB_ACL_T sys_acl_get_fd(int fd)
+{
+ return acl_get_fd(fd);
+}
+
+char *sys_acl_to_text( SMB_ACL_T the_acl, ssize_t *plen)
+{
+ return acl_to_text( the_acl, plen);
+}
+
+int sys_acl_valid( SMB_ACL_T theacl )
+{
+ return acl_valid(theacl);
+}
+
+int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
+{
+ return acl_set_file(name, acltype, theacl);
+}
+
+int sys_acl_set_fd( int fd, SMB_ACL_T theacl)
+{
+ return acl_set_fd(fd, theacl);
+}
+
+/* Now the functions I need to define for XFS */
+
+int sys_acl_create_entry( SMB_ACL_T *acl_p, SMB_ACL_ENTRY_T *entry_p)
+{
+ acl_t acl, newacl;
+ acl_entry_t ace;
+ int cnt;
+
+ acl = *acl_p;
+ ace = *entry_p;
+
+ if((*acl_p == NULL) || (ace == NULL)){
+ errno = EINVAL;
+ return -1;
+ }
+
+ cnt = acl->acl_cnt;
+ if( (cnt + 1) > ACL_MAX_ENTRIES ){
+ errno = ENOSPC;
+ return -1;
+ }
+
+ newacl = (acl_t)malloc(sizeof(struct acl));
+ if(newacl == NULL){
+ errno = ENOMEM;
+ return -1;
+ }
+
+ *newacl = *acl;
+ newacl->acl_entry[cnt] = *ace;
+ newacl->acl_cnt = cnt + 1;
+
+ acl_free(*acl_p);
+ *acl_p = newacl;
+ *entry_p = &newacl->acl_entry[cnt];
+ return 0;
+}
+
+
+int sys_acl_get_tag_type( SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *tag_type_p)
+{
+ *tag_type_p = entry_d->ae_tag;
+ return 0;
+}
+
+int sys_acl_get_permset( SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p)
+{
+ *permset_p = &entry_d->ae_perm;
+ return 0;
+}
+
+void *sys_acl_get_qualifier( SMB_ACL_ENTRY_T entry_d)
+{
+ if (entry_d->ae_tag != SMB_ACL_USER
+ && entry_d->ae_tag != SMB_ACL_GROUP) {
+ errno = EINVAL;
+ return NULL;
+ }
+ return &entry_d->ae_id;
+}
+
+int sys_acl_clear_perms(SMB_ACL_PERMSET_T permset)
+{
+ *permset = 0;
+ return 0;
+}
+
+int sys_acl_get_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm)
+{
+ return (*permset & perm);
+}
+
+int sys_acl_add_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm)
+{
+
+ /* TO DO: Add in ALL possible permissions here */
+ /* TO DO: Include extended ones!! */
+
+ if (perm != SMB_ACL_READ && perm != SMB_ACL_WRITE && perm != SMB_ACL_EXECUTE) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if(permset == NULL) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ *permset |= perm;
+
+ return 0;
+}
+
+SMB_ACL_T sys_acl_init( int count)
+{
+ SMB_ACL_T a;
+ if((count > ACL_MAX_ENTRIES) || (count < 0)) {
+ errno = EINVAL;
+ return NULL;
+ }
+ else {
+ a = (struct acl *)malloc(sizeof(struct acl)); /* where is this memory freed? */
+ a->acl_cnt = 0;
+ return a;
+ }
+}
+
+int sys_acl_set_tag_type( SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T tag_type)
+{
+
+ switch (tag_type) {
+ case SMB_ACL_USER:
+ case SMB_ACL_USER_OBJ:
+ case SMB_ACL_GROUP:
+ case SMB_ACL_GROUP_OBJ:
+ case SMB_ACL_OTHER:
+ case SMB_ACL_MASK:
+ entry_d->ae_tag = tag_type;
+ break;
+ default:
+ errno = EINVAL;
+ return -1;
+ }
+ return 0;
+}
+
+int sys_acl_set_qualifier( SMB_ACL_ENTRY_T entry_d, void *qual_p)
+{
+ if(entry_d->ae_tag != SMB_ACL_GROUP &&
+ entry_d->ae_tag != SMB_ACL_USER) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ entry_d->ae_id = *((uid_t *)qual_p);
+
+ return 0;
+}
+
+int sys_acl_set_permset( SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T permset_d)
+{
+ /* TO DO: expand to extended permissions eventually! */
+
+ if(*permset_d & ~(SMB_ACL_READ|SMB_ACL_WRITE|SMB_ACL_EXECUTE)) {
+ return EINVAL;
+ }
+
+ return 0;
+}
+
+int sys_acl_free_text(char *text)
+{
+ return acl_free(text);
+}
+
+int sys_acl_free_acl(SMB_ACL_T the_acl)
+{
+ return acl_free(the_acl);
+}
+
+int sys_acl_free_qualifier(void *qual)
+{
+ return 0;
+}
+
#elif defined(HAVE_AIX_ACLS)
/* Donated by Medha Date, mdate@austin.ibm.com, for IBM */
@@ -1743,7 +1914,7 @@ int sys_acl_valid( SMB_ACL_T theacl )
return(0);
}
-int sys_acl_set_file( const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
+int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
{
struct acl_entry_link *acl_entry_link = NULL;
struct acl *file_acl = NULL;
@@ -1927,12 +2098,6 @@ int sys_acl_set_fd( int fd, SMB_ACL_T theacl)
return(rc);
}
-int sys_acl_delete_def_file(const char *name)
-{
- /* AIX has no default ACL */
- return 0;
-}
-
int sys_acl_get_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm)
{
return(*permset & perm);
@@ -2069,7 +2234,7 @@ int sys_acl_valid( SMB_ACL_T theacl )
return -1;
}
-int sys_acl_set_file( const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
+int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl)
{
errno = ENOSYS;
return -1;
@@ -2081,12 +2246,6 @@ int sys_acl_set_fd( int fd, SMB_ACL_T theacl)
return -1;
}
-int sys_acl_delete_def_file(const char *name)
-{
- errno = ENOSYS;
- return -1;
-}
-
int sys_acl_free_acl(SMB_ACL_T the_acl)
{
errno = ENOSYS;
diff --git a/source/lib/system.c b/source/lib/system.c
index a402af77c9b..0c627b2f659 100644
--- a/source/lib/system.c
+++ b/source/lib/system.c
@@ -265,34 +265,6 @@ char *sys_getwd(char *s)
}
/*******************************************************************
-system wrapper for symlink
-********************************************************************/
-
-int sys_symlink(const char *oldpath, const char *newpath)
-{
-#ifndef HAVE_SYMLINK
- errno = ENOSYS;
- return -1;
-#else
- return symlink(oldpath, newpath);
-#endif
-}
-
-/*******************************************************************
-system wrapper for readlink
-********************************************************************/
-
-int sys_readlink(const char *path, char *buf, size_t bufsiz)
-{
-#ifndef HAVE_READLINK
- errno = ENOSYS;
- return -1;
-#else
- return readlink(path, buf, bufsiz);
-#endif
-}
-
-/*******************************************************************
chown isn't used much but OS/2 doesn't have it
********************************************************************/
@@ -611,9 +583,6 @@ int sys_setgroups(int setlen, gid_t *gidset)
struct saved_pw {
fstring pw_name;
fstring pw_passwd;
- fstring pw_gecos;
- pstring pw_dir;
- pstring pw_shell;
struct passwd pass;
};
@@ -625,26 +594,6 @@ static int num_lookups; /* Counter so we don't always use cache. */
#define PW_RET_CACHE_MAX_LOOKUPS 100
#endif
-static void copy_pwent(struct saved_pw *dst, struct passwd *pass)
-{
- memcpy((char *)&dst->pass, pass, sizeof(struct passwd));
-
- fstrcpy(dst->pw_name, pass->pw_name);
- dst->pass.pw_name = dst->pw_name;
-
- fstrcpy(dst->pw_passwd, pass->pw_passwd);
- dst->pass.pw_passwd = dst->pw_passwd;
-
- fstrcpy(dst->pw_gecos, pass->pw_gecos);
- dst->pass.pw_gecos = dst->pw_gecos;
-
- pstrcpy(dst->pw_dir, pass->pw_dir);
- dst->pass.pw_dir = dst->pw_dir;
-
- pstrcpy(dst->pw_shell, pass->pw_shell);
- dst->pass.pw_shell = dst->pw_shell;
-}
-
static struct passwd *setup_pwret(struct passwd *pass)
{
if (pass == NULL) {
@@ -655,13 +604,25 @@ static struct passwd *setup_pwret(struct passwd *pass)
return NULL;
}
- copy_pwent( &pw_mod, pass);
+ /* this gets the uid, gid and null pointers */
+
+ memcpy((char *)&pw_mod.pass, pass, sizeof(struct passwd));
+ fstrcpy(pw_mod.pw_name, pass->pw_name);
+ pw_mod.pass.pw_name = pw_mod.pw_name;
+ fstrcpy(pw_mod.pw_passwd, pass->pw_passwd);
+ pw_mod.pass.pw_passwd = pw_mod.pw_passwd;
+
if (pass != &pw_cache.pass) {
/* If it's a cache miss we must also refill the cache. */
- copy_pwent( &pw_cache, pass);
+ memcpy((char *)&pw_cache.pass, pass, sizeof(struct passwd));
+ fstrcpy(pw_cache.pw_name, pass->pw_name);
+ pw_cache.pass.pw_name = pw_cache.pw_name;
+ fstrcpy(pw_cache.pw_passwd, pass->pw_passwd);
+ pw_cache.pass.pw_passwd = pw_cache.pw_passwd;
+
num_lookups = 1;
} else {
diff --git a/source/lib/talloc.c b/source/lib/talloc.c
index e83369f379e..54a3d8ed769 100644
--- a/source/lib/talloc.c
+++ b/source/lib/talloc.c
@@ -35,7 +35,10 @@
#include "includes.h"
-/* initialise talloc context. */
+#define TALLOC_ALIGN 32
+#define TALLOC_CHUNK_SIZE (0x2000)
+
+/* initialissa talloc context. */
TALLOC_CTX *talloc_init(void)
{
TALLOC_CTX *t;
@@ -53,47 +56,43 @@ TALLOC_CTX *talloc_init(void)
void *talloc(TALLOC_CTX *t, size_t size)
{
void *p;
- struct talloc_chunk *tc;
+ if (size == 0)
+ {
+ /* debugging value used to track down
+ memory problems. BAD_PTR is defined
+ in talloc.h */
+ p = BAD_PTR;
+ return p;
+ }
- if (size == 0) return NULL;
+ /* normal code path */
+ size = (size + (TALLOC_ALIGN-1)) & ~(TALLOC_ALIGN-1);
- p = malloc(size);
- if (!p) return p;
+ if (!t->list || (t->list->total_size - t->list->alloc_size) < size) {
+ struct talloc_chunk *c;
+ size_t asize = (size + (TALLOC_CHUNK_SIZE-1)) & ~(TALLOC_CHUNK_SIZE-1);
- tc = malloc(sizeof(*tc));
- if (!tc) {
- free(p);
- return NULL;
+ c = (struct talloc_chunk *)malloc(sizeof(*c));
+ if (!c) return NULL;
+ c->next = t->list;
+ c->ptr = (void *)malloc(asize);
+ if (!c->ptr) {
+ free(c);
+ return NULL;
+ }
+ c->alloc_size = 0;
+ c->total_size = asize;
+ t->list = c;
+ t->total_alloc_size += asize;
}
- tc->ptr = p;
- tc->size = size;
- tc->next = t->list;
- t->list = tc;
- t->total_alloc_size += size;
+ p = ((char *)t->list->ptr) + t->list->alloc_size;
+ t->list->alloc_size += size;
+
return p;
}
-/* a talloc version of realloc */
-void *talloc_realloc(TALLOC_CTX *t, void *ptr, size_t size)
-{
- struct talloc_chunk *tc;
-
- for (tc=t->list; tc; tc=tc->next) {
- if (tc->ptr == ptr) {
- ptr = realloc(ptr, size);
- if (ptr) {
- t->total_alloc_size += (size - tc->size);
- tc->size = size;
- tc->ptr = ptr;
- }
- return ptr;
- }
- }
- return NULL;
-}
-
/* destroy a whole pool */
void talloc_destroy_pool(TALLOC_CTX *t)
{
@@ -104,7 +103,7 @@ void talloc_destroy_pool(TALLOC_CTX *t)
while (t->list) {
c = t->list->next;
- if (t->list->ptr) free(t->list->ptr);
+ free(t->list->ptr);
free(t->list);
t->list = c;
}
@@ -119,13 +118,14 @@ void talloc_destroy(TALLOC_CTX *t)
if (!t)
return;
talloc_destroy_pool(t);
- memset(t, 0, sizeof(*t));
free(t);
}
/* return the current total size of the pool. */
size_t talloc_pool_size(TALLOC_CTX *t)
{
+ if (!t->list)
+ return 0;
return t->total_alloc_size;
}
@@ -152,9 +152,3 @@ void *talloc_memdup(TALLOC_CTX *t, void *p, size_t size)
return newp;
}
-
-/* strdup with a talloc */
-char *talloc_strdup(TALLOC_CTX *t, char *p)
-{
- return talloc_memdup(t, p, strlen(p) + 1);
-}
diff --git a/source/lib/ufc.c b/source/lib/ufc.c
index 8f4125b09f5..86cb41a10c7 100644
--- a/source/lib/ufc.c
+++ b/source/lib/ufc.c
@@ -282,7 +282,9 @@ static ufc_long longmask[32] = {
* bzero and some don't have memset.
*/
-static void clearmem(char *start, int cnt)
+static void clearmem(start, cnt)
+ char *start;
+ int cnt;
{ while(cnt--)
*start++ = '\0';
}
@@ -298,7 +300,7 @@ static int initialized = 0;
* by fcrypt users.
*/
-static void ufc_init_des(void)
+static void ufc_init_des()
{ int comes_from_bit;
int bit, sg;
ufc_long j;
@@ -467,7 +469,9 @@ static void ufc_init_des(void)
*/
#ifdef _UFC_32_
-static void shuffle_sb(long32 *k, ufc_long saltbits)
+static void shuffle_sb(k, saltbits)
+ long32 *k;
+ ufc_long saltbits;
{ ufc_long j;
long32 x;
for(j=4096; j--;) {
@@ -479,7 +483,9 @@ static void shuffle_sb(long32 *k, ufc_long saltbits)
#endif
#ifdef _UFC_64_
-static void shuffle_sb(long64 *k, ufc_long saltbits)
+static void shuffle_sb(k, saltbits)
+ long64 *k;
+ ufc_long saltbits;
{ ufc_long j;
long64 x;
for(j=4096; j--;) {
@@ -538,7 +544,8 @@ static void setup_salt(char *s1)
current_saltbits = saltbits;
}
-static void ufc_mk_keytab(char *key)
+static void ufc_mk_keytab(key)
+ char *key;
{ ufc_long v1, v2, *k1;
int i;
#ifdef _UFC_32_
@@ -587,7 +594,8 @@ static void ufc_mk_keytab(char *key)
* Undo an extra E selection and do final permutations
*/
-ufc_long *_ufc_dofinalperm(ufc_long l1, ufc_long l2, ufc_long r1, ufc_long r2)
+ufc_long *_ufc_dofinalperm(l1, l2, r1, r2)
+ ufc_long l1,l2,r1,r2;
{ ufc_long v1, v2, x;
static ufc_long ary[2];
@@ -625,7 +633,9 @@ ufc_long *_ufc_dofinalperm(ufc_long l1, ufc_long l2, ufc_long r1, ufc_long r2)
* prefixing with the salt
*/
-static char *output_conversion(ufc_long v1, ufc_long v2, char *salt)
+static char *output_conversion(v1, v2, salt)
+ ufc_long v1, v2;
+ char *salt;
{ static char outbuf[14];
int i, s;
@@ -693,7 +703,8 @@ extern long32 _ufc_sb0[], _ufc_sb1[], _ufc_sb2[], _ufc_sb3[];
#define SBA(sb, v) (*(long32*)((char*)(sb)+(v)))
-static ufc_long *_ufc_doit(ufc_long l1, ufc_long l2, ufc_long r1, ufc_long r2, ufc_long itr)
+static ufc_long *_ufc_doit(l1, l2, r1, r2, itr)
+ ufc_long l1, l2, r1, r2, itr;
{ int i;
long32 s, *k;
@@ -732,7 +743,8 @@ extern long64 _ufc_sb0[], _ufc_sb1[], _ufc_sb2[], _ufc_sb3[];
#define SBA(sb, v) (*(long64*)((char*)(sb)+(v)))
-static ufc_long *_ufc_doit(ufc_long l1, ufc_long l2, ufc_long r1, ufc_long r2, ufc_long itr)
+static ufc_long *_ufc_doit(l1, l2, r1, r2, itr)
+ ufc_long l1, l2, r1, r2, itr;
{ int i;
long64 l, r, s, *k;
diff --git a/source/lib/util.c b/source/lib/util.c
index 453bccdd361..8edb6db1157 100644
--- a/source/lib/util.c
+++ b/source/lib/util.c
@@ -335,31 +335,12 @@ void smb_setlen(char *buf,int len)
********************************************************************/
int set_message(char *buf,int num_words,int num_bytes,BOOL zero)
{
- if (zero)
- memset(buf + smb_size,'\0',num_words*2 + num_bytes);
- CVAL(buf,smb_wct) = num_words;
- SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);
- smb_setlen(buf,smb_size + num_words*2 + num_bytes - 4);
- return (smb_size + num_words*2 + num_bytes);
-}
-
-/*******************************************************************
- setup only the byte count for a smb message
-********************************************************************/
-void set_message_bcc(char *buf,int num_bytes)
-{
- int num_words = CVAL(buf,smb_wct);
- SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);
- smb_setlen(buf,smb_size + num_words*2 + num_bytes - 4);
-}
-
-/*******************************************************************
- setup only the byte count for a smb message, using the end of the
- message as a marker
-********************************************************************/
-void set_message_end(void *outbuf,void *end_ptr)
-{
- set_message_bcc((char *)outbuf,PTR_DIFF(end_ptr,smb_buf((char *)outbuf)));
+ if (zero)
+ memset(buf + smb_size,'\0',num_words*2 + num_bytes);
+ CVAL(buf,smb_wct) = num_words;
+ SSVAL(buf,smb_vwv + num_words*SIZEOFWORD,num_bytes);
+ smb_setlen(buf,smb_size + num_words*2 + num_bytes - 4);
+ return (smb_size + num_words*2 + num_bytes);
}
/*******************************************************************
@@ -803,13 +784,13 @@ uint32 interpret_addr(char *str)
res = inet_addr(str);
} else {
/* otherwise assume it's a network name of some sort and use
- sys_gethostbyname */
- if ((hp = sys_gethostbyname(str)) == 0) {
- DEBUG(3,("sys_gethostbyname: Unknown host. %s\n",str));
+ Get_Hostbyname */
+ if ((hp = Get_Hostbyname(str)) == 0) {
+ DEBUG(3,("Get_Hostbyname: Unknown host. %s\n",str));
return 0;
}
if(hp->h_addr == NULL) {
- DEBUG(3,("sys_gethostbyname: host address is invalid for host %s\n",str));
+ DEBUG(3,("Get_Hostbyname: host address is invalid for host %s\n",str));
return 0;
}
putip((char *)&res,(char *)hp->h_addr);
@@ -996,6 +977,67 @@ BOOL same_net(struct in_addr ip1,struct in_addr ip2,struct in_addr mask)
/****************************************************************************
+a wrapper for gethostbyname() that tries with all lower and all upper case
+if the initial name fails
+****************************************************************************/
+struct hostent *Get_Hostbyname(const char *name)
+{
+ char *name2 = strdup(name);
+ struct hostent *ret;
+
+ if (!name2)
+ {
+ DEBUG(0,("Memory allocation error in Get_Hostbyname! panic\n"));
+ exit(0);
+ }
+
+
+ /*
+ * This next test is redundent and causes some systems (with
+ * broken isalnum() calls) problems.
+ * JRA.
+ */
+
+#if 0
+ if (!isalnum(*name2))
+ {
+ free(name2);
+ return(NULL);
+ }
+#endif /* 0 */
+
+ ret = sys_gethostbyname(name2);
+ if (ret != NULL)
+ {
+ free(name2);
+ return(ret);
+ }
+
+ /* try with all lowercase */
+ strlower(name2);
+ ret = sys_gethostbyname(name2);
+ if (ret != NULL)
+ {
+ free(name2);
+ return(ret);
+ }
+
+ /* try with all uppercase */
+ strupper(name2);
+ ret = sys_gethostbyname(name2);
+ if (ret != NULL)
+ {
+ free(name2);
+ return(ret);
+ }
+
+ /* nothing works :-( */
+ free(name2);
+ return(NULL);
+}
+
+
+/****************************************************************************
check if a process exists. Does this work on all unixes?
****************************************************************************/
@@ -1053,15 +1095,13 @@ uid_t nametouid(char *name)
uid_t u;
u = (uid_t)strtol(name, &p, 0);
- if ((p != name) && (*p == '\0'))
- return u;
+ if (p != name) return u;
if (winbind_nametouid(&u, name))
return u;
pass = sys_getpwnam(name);
- if (pass)
- return(pass->pw_uid);
+ if (pass) return(pass->pw_uid);
return (uid_t)-1;
}
@@ -1077,15 +1117,13 @@ gid_t nametogid(char *name)
gid_t g;
g = (gid_t)strtol(name, &p, 0);
- if ((p != name) && (*p == '\0'))
- return g;
+ if (p != name) return g;
if (winbind_nametogid(&g, name))
return g;
grp = getgrnam(name);
- if (grp)
- return(grp->gr_gid);
+ if (grp) return(grp->gr_gid);
return (gid_t)-1;
}
@@ -1130,9 +1168,7 @@ char *readdirname(DIR *p)
{
static pstring buf;
- int len = NAMLEN(ptr);
- memcpy(buf, dname, len);
- buf[len] = 0;
+ memcpy(buf, dname, NAMLEN(ptr)+1);
dname = buf;
}
@@ -1678,6 +1714,34 @@ BOOL reg_split_key(char *full_keyname, uint32 *reg_type, char *key_name)
/*****************************************************************
+like mktemp() but make sure that no % characters are used
+% characters are bad for us because of the macro subs
+ *****************************************************************/
+char *smbd_mktemp(char *template)
+{
+ char *p = mktemp(template);
+ char *p2;
+ SMB_STRUCT_STAT st;
+
+ if (!p) return NULL;
+
+ while ((p2=strchr(p,'%'))) {
+ p2[0] = 'A';
+ while (sys_stat(p,&st) == 0 && p2[0] < 'Z') {
+ /* damn, it exists */
+ p2[0]++;
+ }
+ if (p2[0] == 'Z') {
+ /* oh well ... better return something */
+ p2[0] = '%';
+ return p;
+ }
+ }
+
+ return p;
+}
+
+/*****************************************************************
possibly replace mkstemp if it is broken
*****************************************************************/
int smb_mkstemp(char *template)
@@ -1686,8 +1750,8 @@ int smb_mkstemp(char *template)
return mkstemp(template);
#else
/* have a reasonable go at emulating it. Hope that
- the system mktemp() isn't completly hopeless */
- char *p = mktemp(template);
+ the system mktemp() isn't completly hopeless */
+ char *p = smbd_mktemp(template);
if (!p) return -1;
return open(p, O_CREAT|O_EXCL|O_RDWR, 0600);
#endif
diff --git a/source/lib/util_getent.c b/source/lib/util_getent.c
deleted file mode 100644
index 5c1652f6bf5..00000000000
--- a/source/lib/util_getent.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 3.0
- Samba utility functions
- Copyright (C) Simo Sorce 2001
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "includes.h"
-
-#if 0
-static void print_grent_list(struct sys_grent *glist)
-{
- DEBUG(100, ("print_grent_list: %x\n", glist ));
- while (glist) {
- DEBUG(100,("glist: %x ", glist));
- if (glist->gr_name)
- DEBUG(100,(": gr_name = (%x) %s ", glist->gr_name, glist->gr_name));
- if (glist->gr_passwd)
- DEBUG(100,(": gr_passwd = (%x) %s ", glist->gr_passwd, glist->gr_passwd));
- if (glist->gr_mem) {
- int i;
- for (i = 0; glist->gr_mem[i]; i++)
- DEBUG(100,(" : gr_mem[%d] = (%x) %s ", i, glist->gr_mem[i], glist->gr_mem[i]));
- }
- DEBUG(100,(": gr_next = %x\n", glist->next ));
- glist = glist->next;
- }
- DEBUG(100,("FINISHED !\n\n"));
-}
-#endif
-
-/****************************************************************
- Returns a single linked list of group entries.
- Use grent_free() to free it after use.
-****************************************************************/
-
-struct sys_grent * getgrent_list(void)
-{
- struct sys_grent *glist;
- struct sys_grent *gent;
- struct group *grp;
-
- gent = (struct sys_grent *) malloc(sizeof(struct sys_grent));
- if (gent == NULL) {
- DEBUG (0, ("Out of memory in getgrent_list!\n"));
- return NULL;
- }
- memset(gent, '\0', sizeof(struct sys_grent));
- glist = gent;
-
- setgrent();
- grp = getgrent();
- if (grp == NULL) {
- endgrent();
- free(glist);
- return NULL;
- }
-
- while (grp != NULL) {
- int i,num;
-
- if (grp->gr_name) {
- if ((gent->gr_name = strdup(grp->gr_name)) == NULL)
- goto err;
- }
- if (grp->gr_passwd) {
- if ((gent->gr_passwd = strdup(grp->gr_passwd)) == NULL)
- goto err;
- }
- gent->gr_gid = grp->gr_gid;
-
- /* number of strings in gr_mem */
- for (num = 0; grp->gr_mem[num]; num++)
- ;
-
- /* alloc space for gr_mem string pointers */
- if ((gent->gr_mem = (char **) malloc((num+1) * sizeof(char *))) == NULL)
- goto err;
-
- memset(gent->gr_mem, '\0', (num+1) * sizeof(char *));
-
- for (i=0; i < num; i++) {
- if ((gent->gr_mem[i] = strdup(grp->gr_mem[i])) == NULL)
- goto err;
- }
- gent->gr_mem[num] = NULL;
-
- grp = getgrent();
- if (grp) {
- gent->next = (struct sys_grent *) malloc(sizeof(struct sys_grent));
- if (gent->next == NULL)
- goto err;
- gent = gent->next;
- memset(gent, '\0', sizeof(struct sys_grent));
- }
- }
-
- endgrent();
- return glist;
-
- err:
-
- endgrent();
- DEBUG(0, ("Out of memory in getgrent_list!\n"));
- grent_free(glist);
- return NULL;
-}
-
-/****************************************************************
- Free the single linked list of group entries made by
- getgrent_list()
-****************************************************************/
-
-void grent_free (struct sys_grent *glist)
-{
- while (glist) {
- struct sys_grent *prev;
-
- if (glist->gr_name)
- free(glist->gr_name);
- if (glist->gr_passwd)
- free(glist->gr_passwd);
- if (glist->gr_mem) {
- int i;
- for (i = 0; glist->gr_mem[i]; i++)
- free(glist->gr_mem[i]);
- free(glist->gr_mem);
- }
- prev = glist;
- glist = glist->next;
- free(prev);
- }
-}
-
-/****************************************************************
- Returns a single linked list of passwd entries.
- Use pwent_free() to free it after use.
-****************************************************************/
-
-struct sys_pwent * getpwent_list(void)
-{
- struct sys_pwent *plist;
- struct sys_pwent *pent;
- struct passwd *pwd;
-
- pent = (struct sys_pwent *) malloc(sizeof(struct sys_pwent));
- if (pent == NULL) {
- DEBUG (0, ("Out of memory in getpwent_list!\n"));
- return NULL;
- }
- plist = pent;
-
- setpwent();
- pwd = getpwent();
- while (pwd != NULL) {
- memset(pent, '\0', sizeof(struct sys_pwent));
- if (pwd->pw_name) {
- if ((pent->pw_name = strdup(pwd->pw_name)) == NULL)
- goto err;
- }
- if (pwd->pw_passwd) {
- if ((pent->pw_passwd = strdup(pwd->pw_passwd)) == NULL)
- goto err;
- }
- pent->pw_uid = pwd->pw_uid;
- pent->pw_gid = pwd->pw_gid;
- if (pwd->pw_gecos) {
- if ((pent->pw_name = strdup(pwd->pw_gecos)) == NULL)
- goto err;
- }
- if (pwd->pw_dir) {
- if ((pent->pw_name = strdup(pwd->pw_dir)) == NULL)
- goto err;
- }
- if (pwd->pw_shell) {
- if ((pent->pw_name = strdup(pwd->pw_shell)) == NULL)
- goto err;
- }
-
- pwd = getpwent();
- if (pwd) {
- pent->next = (struct sys_pwent *) malloc(sizeof(struct sys_pwent));
- if (pent->next == NULL)
- goto err;
- pent = pent->next;
- }
- }
-
- endpwent();
- return plist;
-
- err:
-
- endpwent();
- DEBUG(0, ("Out of memory in getpwent_list!\n"));
- pwent_free(plist);
- return NULL;
-}
-
-/****************************************************************
- Free the single linked list of passwd entries made by
- getpwent_list()
-****************************************************************/
-
-void pwent_free (struct sys_pwent *plist)
-{
- while (plist) {
- struct sys_pwent *prev;
-
- if (plist->pw_name)
- free(plist->pw_name);
- if (plist->pw_passwd)
- free(plist->pw_passwd);
- if (plist->pw_gecos)
- free(plist->pw_gecos);
- if (plist->pw_dir)
- free(plist->pw_dir);
- if (plist->pw_shell)
- free(plist->pw_shell);
-
- prev = plist;
- plist = plist->next;
- free(prev);
- }
-}
diff --git a/source/lib/util_seaccess.c b/source/lib/util_seaccess.c
index 8b75a5f4876..e1b18460e24 100644
--- a/source/lib/util_seaccess.c
+++ b/source/lib/util_seaccess.c
@@ -106,14 +106,14 @@ static uint32 check_ace(SEC_ACE *ace, NT_USER_TOKEN *token, uint32 acc_desired,
include other bits requested.
**********************************************************************************/
-static BOOL get_max_access( SEC_ACL *the_acl, NT_USER_TOKEN *token, uint32 *granted, uint32 desired, uint32 *status)
+static BOOL get_max_access( SEC_ACL *acl, NT_USER_TOKEN *token, uint32 *granted, uint32 desired, uint32 *status)
{
uint32 acc_denied = 0;
uint32 acc_granted = 0;
size_t i;
- for ( i = 0 ; i < the_acl->num_aces; i++) {
- SEC_ACE *ace = &the_acl->ace[i];
+ for ( i = 0 ; i < acl->num_aces; i++) {
+ SEC_ACE *ace = &acl->ace[i];
uint32 mask = ace->info.mask;
if (!token_sid_in_ace( token, ace))
@@ -206,7 +206,7 @@ BOOL se_access_check(SEC_DESC *sd, struct current_user *user,
{
extern NT_USER_TOKEN anonymous_token;
size_t i;
- SEC_ACL *the_acl;
+ SEC_ACL *acl;
fstring sid_str;
NT_USER_TOKEN *token = user->nt_user_token ? user->nt_user_token : &anonymous_token;
uint32 tmp_acc_desired = acc_desired;
@@ -259,15 +259,15 @@ BOOL se_access_check(SEC_DESC *sd, struct current_user *user,
}
}
- the_acl = sd->dacl;
+ acl = sd->dacl;
if (tmp_acc_desired & MAXIMUM_ALLOWED_ACCESS) {
tmp_acc_desired &= ~MAXIMUM_ALLOWED_ACCESS;
- return get_max_access( the_acl, token, acc_granted, tmp_acc_desired, status);
+ return get_max_access( acl, token, acc_granted, tmp_acc_desired, status);
}
- for ( i = 0 ; i < the_acl->num_aces && tmp_acc_desired != 0; i++) {
- SEC_ACE *ace = &the_acl->ace[i];
+ for ( i = 0 ; i < acl->num_aces && tmp_acc_desired != 0; i++) {
+ SEC_ACE *ace = &acl->ace[i];
DEBUG(10,("se_access_check: ACE %u: type %d, flags = 0x%02x, SID = %s mask = %x, current desired = %x\n",
(unsigned int)i, ace->type, ace->flags,
@@ -310,7 +310,7 @@ SEC_DESC_BUF *se_create_child_secdesc(TALLOC_CTX *ctx, SEC_DESC *parent_ctr,
{
SEC_DESC_BUF *sdb;
SEC_DESC *sd;
- SEC_ACL *new_dacl, *the_acl;
+ SEC_ACL *new_dacl, *acl;
SEC_ACE *new_ace_list = NULL;
int new_ace_list_ndx = 0, i;
size_t size;
@@ -319,13 +319,13 @@ SEC_DESC_BUF *se_create_child_secdesc(TALLOC_CTX *ctx, SEC_DESC *parent_ctr,
sacl should also be processed but this is left out as sacls are
not implemented in Samba at the moment.*/
- the_acl = parent_ctr->dacl;
+ acl = parent_ctr->dacl;
- if (!(new_ace_list = talloc(ctx, sizeof(SEC_ACE) * the_acl->num_aces)))
+ if (!(new_ace_list = talloc(ctx, sizeof(SEC_ACE) * acl->num_aces)))
return NULL;
- for (i = 0; the_acl && i < the_acl->num_aces; i++) {
- SEC_ACE *ace = &the_acl->ace[i];
+ for (i = 0; acl && i < acl->num_aces; i++) {
+ SEC_ACE *ace = &acl->ace[i];
SEC_ACE *new_ace = &new_ace_list[new_ace_list_ndx];
uint8 new_flags = 0;
BOOL inherit = False;
diff --git a/source/lib/util_sid.c b/source/lib/util_sid.c
index 70341507cb7..e888c1cbcbf 100644
--- a/source/lib/util_sid.c
+++ b/source/lib/util_sid.c
@@ -86,16 +86,22 @@ static known_sid_users builtin_groups[] = {
{ BUILTIN_ALIAS_RID_BACKUP_OPS, SID_NAME_ALIAS, "Backup Operators" },
{ 0, (enum SID_NAME_USE)0, NULL}};
-#define MAX_SID_NAMES 7
-
static struct sid_name_map_info
{
DOM_SID *sid;
char *name;
known_sid_users *known_users;
-} sid_name_map[MAX_SID_NAMES];
-
-static BOOL sid_name_map_initialized = False;
+}
+sid_name_map[] =
+{
+ { &global_sam_sid, global_myname, NULL},
+ { &global_sam_sid, global_myworkgroup, NULL},
+ { &global_sid_Builtin, "BUILTIN", &builtin_groups[0]},
+ { &global_sid_World_Domain, "", &everyone_users[0] },
+ { &global_sid_Creator_Owner_Domain, "", &creator_owner_users[0] },
+ { &global_sid_NT_Authority, "NT Authority", &nt_authority_users[0] },
+ { NULL, NULL, NULL}
+};
/*
* An NT compatible anonymous token.
@@ -108,65 +114,6 @@ NT_USER_TOKEN anonymous_token = {
anon_sid_array
};
-/**************************************************************************
- quick init function
- *************************************************************************/
-static void init_sid_name_map (void)
-{
- int i = 0;
-
- if (sid_name_map_initialized) return;
-
-
- if ((lp_security() == SEC_USER) && lp_domain_logons()) {
- sid_name_map[i].sid = &global_sam_sid;
- sid_name_map[i].name = global_myworkgroup;
- sid_name_map[i].known_users = NULL;
- i++;
- sid_name_map[i].sid = &global_sam_sid;
- sid_name_map[i].name = global_myname;
- sid_name_map[i].known_users = NULL;
- i++;
- }
- else {
- sid_name_map[i].sid = &global_sam_sid;
- sid_name_map[i].name = global_myname;
- sid_name_map[i].known_users = NULL;
- i++;
- }
-
- sid_name_map[i].sid = &global_sid_Builtin;
- sid_name_map[i].name = "BUILTIN";
- sid_name_map[i].known_users = &builtin_groups[0];
- i++;
-
- sid_name_map[i].sid = &global_sid_World_Domain;
- sid_name_map[i].name = "";
- sid_name_map[i].known_users = &everyone_users[0];
- i++;
-
- sid_name_map[i].sid = &global_sid_Creator_Owner_Domain;
- sid_name_map[i].name = "";
- sid_name_map[i].known_users = &creator_owner_users[0];
- i++;
-
- sid_name_map[i].sid = &global_sid_NT_Authority;
- sid_name_map[i].name = "NT Authority";
- sid_name_map[i].known_users = &nt_authority_users[0];
- i++;
-
-
- /* end of array */
- sid_name_map[i].sid = NULL;
- sid_name_map[i].name = NULL;
- sid_name_map[i].known_users = NULL;
-
- sid_name_map_initialized = True;
-
- return;
-
-}
-
/****************************************************************************
Creates some useful well known sids
****************************************************************************/
@@ -199,12 +146,8 @@ BOOL map_domain_sid_to_name(DOM_SID *sid, char *nt_domain)
{
fstring sid_str;
int i = 0;
-
sid_to_string(sid_str, sid);
- if (!sid_name_map_initialized)
- init_sid_name_map();
-
DEBUG(5,("map_domain_sid_to_name: %s\n", sid_str));
if (nt_domain == NULL)
@@ -213,7 +156,7 @@ BOOL map_domain_sid_to_name(DOM_SID *sid, char *nt_domain)
while (sid_name_map[i].sid != NULL) {
sid_to_string(sid_str, sid_name_map[i].sid);
DEBUG(5,("map_domain_sid_to_name: compare: %s\n", sid_str));
- if (sid_equal(sid_name_map[i].sid, sid)) {
+ if (sid_equal(sid_name_map[i].sid, sid)) {
fstrcpy(nt_domain, sid_name_map[i].name);
DEBUG(5,("map_domain_sid_to_name: found '%s'\n", nt_domain));
return True;
@@ -235,9 +178,6 @@ BOOL lookup_known_rid(DOM_SID *sid, uint32 rid, char *name, enum SID_NAME_USE *p
int i = 0;
struct sid_name_map_info *psnm;
- if (!sid_name_map_initialized)
- init_sid_name_map();
-
for(i = 0; sid_name_map[i].sid != NULL; i++) {
psnm = &sid_name_map[i];
if(sid_equal(psnm->sid, sid)) {
@@ -277,13 +217,10 @@ BOOL map_domain_name_to_sid(DOM_SID *sid, char *nt_domain)
DEBUG(5,("map_domain_name_to_sid: overriding blank name to %s\n", nt_domain));
sid_copy(sid, &global_sam_sid);
return True;
- }
+ }
DEBUG(5,("map_domain_name_to_sid: %s\n", nt_domain));
- if (!sid_name_map_initialized)
- init_sid_name_map();
-
while (sid_name_map[i].name != NULL) {
DEBUG(5,("map_domain_name_to_sid: compare: %s\n", sid_name_map[i].name));
if (strequal(sid_name_map[i].name, nt_domain)) {
@@ -445,19 +382,6 @@ BOOL sid_split_rid(DOM_SID *sid, uint32 *rid)
}
/*****************************************************************
- Return the last rid from the end of a sid
-*****************************************************************/
-
-BOOL sid_peek_rid(DOM_SID *sid, uint32 *rid)
-{
- if (sid->num_auths > 0) {
- *rid = sid->sub_auths[sid->num_auths - 1];
- return True;
- }
- return False;
-}
-
-/*****************************************************************
Copies a sid
*****************************************************************/
diff --git a/source/lib/util_sock.c b/source/lib/util_sock.c
index ccbc86bb0bd..88fe8189b0d 100644
--- a/source/lib/util_sock.c
+++ b/source/lib/util_sock.c
@@ -106,9 +106,9 @@ static void print_socket_options(int s)
for (; p->name != NULL; p++) {
if (getsockopt(s, p->level, p->option, (void *)&value, &vlen) == -1) {
- DEBUG(5,("Could not test socket option %s.\n", p->name));
+ DEBUG(3,("Could not test socket option %s.\n", p->name));
} else {
- DEBUG(5,("socket option %s = %d\n",p->name,value));
+ DEBUG(3,("socket option %s = %d\n",p->name,value));
}
}
}
@@ -174,25 +174,26 @@ void set_socket_options(int fd, char *options)
ssize_t read_udp_socket(int fd,char *buf,size_t len)
{
- ssize_t ret;
- struct sockaddr_in sock;
- socklen_t socklen = sizeof(sock);
-
- memset((char *)&sock,'\0',socklen);
- memset((char *)&lastip,'\0',sizeof(lastip));
- ret = (ssize_t)recvfrom(fd,buf,len,0,(struct sockaddr *)&sock,&socklen);
- if (ret <= 0) {
- DEBUG(2,("read socket failed. ERRNO=%s\n",strerror(errno)));
- return(0);
- }
+ ssize_t ret;
+ struct sockaddr_in sock;
+ int socklen;
+
+ socklen = sizeof(sock);
+ memset((char *)&sock,'\0',socklen);
+ memset((char *)&lastip,'\0',sizeof(lastip));
+ ret = (ssize_t)recvfrom(fd,buf,len,0,(struct sockaddr *)&sock,&socklen);
+ if (ret <= 0) {
+ DEBUG(2,("read socket failed. ERRNO=%s\n",strerror(errno)));
+ return(0);
+ }
- lastip = sock.sin_addr;
- lastport = ntohs(sock.sin_port);
+ lastip = sock.sin_addr;
+ lastport = ntohs(sock.sin_port);
- DEBUG(10,("read_udp_socket: lastip %s lastport %d read: %d\n",
- inet_ntoa(lastip), lastport, ret));
+ DEBUG(10,("read_udp_socket: lastip %s lastport %d read: %d\n",
+ inet_ntoa(lastip), lastport, ret));
- return(ret);
+ return(ret);
}
/****************************************************************************
@@ -641,40 +642,35 @@ ssize_t read_smb_length(int fd,char *inbuf,unsigned int timeout)
BOOL receive_smb(int fd,char *buffer, unsigned int timeout)
{
- ssize_t len,ret;
-
- smb_read_error = 0;
+ ssize_t len,ret;
- memset(buffer,'\0',smb_size + 100);
+ smb_read_error = 0;
- len = read_smb_length_return_keepalive(fd,buffer,timeout);
- if (len < 0) {
- DEBUG(10,("receive_smb: length < 0!\n"));
- return(False);
- }
+ memset(buffer,'\0',smb_size + 100);
- /*
- * A WRITEX with CAP_LARGE_WRITEX can be 64k worth of data plus 65 bytes
- * of header. Don't print the error if this fits.... JRA.
- */
-
- if (len > (BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE)) {
- DEBUG(0,("Invalid packet length! (%d bytes).\n",len));
- if (len > BUFFER_SIZE + (SAFETY_MARGIN/2)) {
- smb_read_error = READ_ERROR;
- return False;
- }
- }
+ len = read_smb_length_return_keepalive(fd,buffer,timeout);
+ if (len < 0)
+ {
+ DEBUG(10,("receive_smb: length < 0!\n"));
+ return(False);
+ }
- if(len > 0) {
- ret = read_socket_data(fd,buffer+4,len);
- if (ret != len) {
- smb_read_error = READ_ERROR;
- return False;
- }
- }
+ if (len > BUFFER_SIZE) {
+ DEBUG(0,("Invalid packet length! (%d bytes).\n",len));
+ if (len > BUFFER_SIZE + (SAFETY_MARGIN/2))
+ {
+ exit(1);
+ }
+ }
- return(True);
+ if(len > 0) {
+ ret = read_socket_data(fd,buffer+4,len);
+ if (ret != len) {
+ smb_read_error = READ_ERROR;
+ return False;
+ }
+ }
+ return(True);
}
/****************************************************************************
@@ -712,27 +708,55 @@ BOOL client_receive_smb(int fd,char *buffer, unsigned int timeout)
}
/****************************************************************************
+ send an null session message to a fd
+****************************************************************************/
+
+BOOL send_null_session_msg(int fd)
+{
+ ssize_t ret;
+ uint32 blank = 0;
+ size_t len = 4;
+ size_t nwritten=0;
+ char *buffer = (char *)&blank;
+
+ while (nwritten < len)
+ {
+ ret = write_socket(fd,buffer+nwritten,len - nwritten);
+ if (ret <= 0)
+ {
+ DEBUG(0,("send_null_session_msg: Error writing %d bytes to client. %d. Exiting\n",(int)len,(int)ret));
+ exit(1);
+ }
+ nwritten += ret;
+ }
+
+ DEBUG(10,("send_null_session_msg: sent 4 null bytes to client.\n"));
+ return True;
+}
+
+/****************************************************************************
send an smb to a fd
****************************************************************************/
BOOL send_smb(int fd,char *buffer)
{
- size_t len;
- size_t nwritten=0;
- ssize_t ret;
- len = smb_len(buffer) + 4;
-
- while (nwritten < len) {
- ret = write_socket(fd,buffer+nwritten,len - nwritten);
- if (ret <= 0) {
- DEBUG(0,("Error writing %d bytes to client. %d. (%s)\n",
- (int)len,(int)ret, strerror(errno) ));
- return False;
- }
- nwritten += ret;
- }
+ size_t len;
+ size_t nwritten=0;
+ ssize_t ret;
+ len = smb_len(buffer) + 4;
- return True;
+ while (nwritten < len)
+ {
+ ret = write_socket(fd,buffer+nwritten,len - nwritten);
+ if (ret <= 0)
+ {
+ DEBUG(0,("Error writing %d bytes to client. %d. Exiting\n",(int)len,(int)ret));
+ exit(1);
+ }
+ nwritten += ret;
+ }
+
+ return True;
}
/****************************************************************************
@@ -790,9 +814,9 @@ int open_socket_in(int type, int port, int dlevel,uint32 socket_addr, BOOL rebin
{ DEBUG(0,("gethostname failed\n")); return -1; }
/* get host info */
- if ((hp = sys_gethostbyname(host_name)) == 0)
+ if ((hp = Get_Hostbyname(host_name)) == 0)
{
- DEBUG(0,( "sys_gethostbyname: Unknown host %s\n",host_name));
+ DEBUG(0,( "Get_Hostbyname: Unknown host %s\n",host_name));
return -1;
}
@@ -915,6 +939,27 @@ connect_again:
return res;
}
+
+/*******************************************************************
+ Reset the 'done' variables so after a client process is created
+ from a fork call these calls will be re-done. This should be
+ expanded if more variables need reseting.
+ ******************************************************************/
+
+
+void reset_globals_after_fork(void)
+{
+ /*
+ * Re-seed the random crypto generator, so all smbd's
+ * started from the same parent won't generate the same
+ * sequence.
+ */
+ {
+ unsigned char dummy;
+ generate_random_buffer( &dummy, 1, True);
+ }
+}
+
/* the following 3 client_*() functions are nasty ways of allowing
some generic functions to get info that really should be hidden in
particular modules */
@@ -944,8 +989,8 @@ static BOOL matchname(char *remotehost,struct in_addr addr)
struct hostent *hp;
int i;
- if ((hp = sys_gethostbyname(remotehost)) == 0) {
- DEBUG(0,("sys_gethostbyname(%s): lookup failure.\n", remotehost));
+ if ((hp = Get_Hostbyname(remotehost)) == 0) {
+ DEBUG(0,("Get_Hostbyname(%s): lookup failure.\n", remotehost));
return False;
}
@@ -1144,92 +1189,3 @@ int create_pipe_socket(char *dir, int dir_perms,
return s;
}
-
-/*******************************************************************
-this is like socketpair but uses tcp. It is used by the Samba
-regression test code
-The function guarantees that nobody else can attach to the socket,
-or if they do that this function fails and the socket gets closed
-returns 0 on success, -1 on failure
-the resulting file descriptors are symmetrical
- ******************************************************************/
-static int socketpair_tcp(int fd[2])
-{
- int listener;
- struct sockaddr sock;
- struct sockaddr_in sock2;
- socklen_t socklen = sizeof(sock);
- int connect_done = 0;
-
- fd[0] = fd[1] = listener = -1;
-
- memset(&sock, 0, sizeof(sock));
-
- if ((listener = socket(PF_INET, SOCK_STREAM, 0)) == -1) goto failed;
-
- memset(&sock2, 0, sizeof(sock2));
-#ifdef HAVE_SOCK_SIN_LEN
- sock2.sin_len = sizeof(sock2);
-#endif
- sock2.sin_family = PF_INET;
-
- bind(listener, (struct sockaddr *)&sock2, sizeof(sock2));
-
- if (listen(listener, 1) != 0) goto failed;
-
- if (getsockname(listener, &sock, &socklen) != 0) goto failed;
-
- if ((fd[1] = socket(PF_INET, SOCK_STREAM, 0)) == -1) goto failed;
-
- set_blocking(fd[1], 0);
-
- if (connect(fd[1],(struct sockaddr *)&sock,sizeof(sock)) == -1) {
- if (errno != EINPROGRESS) goto failed;
- } else {
- connect_done = 1;
- }
-
- if ((fd[0] = accept(listener, &sock, &socklen)) == -1) goto failed;
-
- close(listener);
- if (connect_done == 0) {
- if (connect(fd[1],(struct sockaddr *)&sock,sizeof(sock)) != 0
- && errno != EISCONN) goto failed;
- }
-
- set_blocking(fd[1], 1);
-
- /* all OK! */
- return 0;
-
- failed:
- if (fd[0] != -1) close(fd[0]);
- if (fd[1] != -1) close(fd[1]);
- if (listener != -1) close(listener);
- return -1;
-}
-
-
-/*******************************************************************
-run a program on a local tcp socket, this is used to launch smbd
-when regression testing
-the return value is a socket which is attached to a subprocess
-running "prog". stdin and stdout are attached. stderr is left
-attached to the original stderr
- ******************************************************************/
-int sock_exec(const char *prog)
-{
- int fd[2];
- if (socketpair_tcp(fd) != 0) return -1;
- if (fork() == 0) {
- close(fd[0]);
- close(0);
- close(1);
- dup(fd[1]);
- dup(fd[1]);
- exit(system(prog));
- }
- close(fd[1]);
- return fd[0];
-}
-
diff --git a/source/lib/util_str.c b/source/lib/util_str.c
index 07c91805cc7..8ec319c3b84 100644
--- a/source/lib/util_str.c
+++ b/source/lib/util_str.c
@@ -545,11 +545,9 @@ BOOL trim_string(char *s,const char *front,const char *back)
size_t back_len;
char *sP;
- /* Ignore null or empty strings. */
-
- if ( !s || (s[0] == '\0'))
+ if ( !s ) {
return False;
-
+ }
sP = s;
s_len = strlen( s ) + 1;
front_len = (front) ? strlen( front ) + 1 : 0;
@@ -591,7 +589,7 @@ BOOL trim_string(char *s,const char *front,const char *back)
* Kenichi Okuyama.
*/
- if ( back && back_len > 1 && s_len >= back_len) {
+ if ( back && back_len > 1 ) {
char *bP = sP + s_len - back_len;
long b_len = s_len;
diff --git a/source/lib/util_unistr.c b/source/lib/util_unistr.c
index 9b3e25dd7ea..71d900a3b33 100644
--- a/source/lib/util_unistr.c
+++ b/source/lib/util_unistr.c
@@ -201,10 +201,11 @@ char *dos_unistr2_to_str(UNISTR2 *str)
char *lbuf = lbufs[nexti];
char *p;
uint16 *src = str->buffer;
+ int max_size = MIN(MAXUNI-3, str->uni_str_len);
nexti = (nexti+1)%8;
- for (p = lbuf; (p - lbuf < MAXUNI-3) && (src - str->buffer < str->uni_str_len) && *src; src++) {
+ for (p = lbuf; (p-lbuf < max_size) && *src; src++) {
uint16 ucs2_val = SVAL(src,0);
uint16 cp_val = ucs2_to_doscp[ucs2_val];
@@ -226,41 +227,49 @@ char *dos_unistr2_to_str(UNISTR2 *str)
********************************************************************/
void ascii_to_unistr(uint16 *dest, const char *src, int maxlen)
{
- uint16 *destend = dest + maxlen;
- char c;
+ uint16 *destend = dest + maxlen;
+ register char c;
- while (dest < destend) {
- c = *(src++);
- if (c == 0)
- break;
+ while (dest < destend)
+ {
+ c = *(src++);
+ if (c == 0)
+ {
+ break;
+ }
SSVAL(dest, 0, c);
- dest++;
- }
+ dest++;
+ }
- *dest = 0;
+ *dest = 0;
}
+
/*******************************************************************
Pull an ASCII string out of a UNICODE array (uint16's).
********************************************************************/
void unistr_to_ascii(char *dest, const uint16 *src, int len)
{
- char *destend = dest + len;
- uint16 c;
+ char *destend = dest + len;
+ register uint16 c;
- if (src == NULL) {
+ if (src == NULL)
+ {
*dest = '\0';
return;
}
/* normal code path for a valid 'src' */
- while (dest < destend) {
+ while (dest < destend)
+ {
c = SVAL(src, 0);
src++;
if (c == 0)
+ {
break;
+ }
*(dest++) = (char)c;
}
@@ -330,10 +339,11 @@ char *dos_buffer2_to_str(BUFFER2 *str)
char *lbuf = lbufs[nexti];
char *p;
uint16 *src = str->buffer;
+ int max_size = MIN(sizeof(str->buffer)-3, str->buf_len/2);
nexti = (nexti+1)%8;
- for (p = lbuf; (p - lbuf < sizeof(str->buffer)-3) && (src - str->buffer < str->buf_len/2) && *src; src++) {
+ for (p = lbuf; (p-lbuf < max_size) && *src; src++) {
uint16 ucs2_val = SVAL(src,0);
uint16 cp_val = ucs2_to_doscp[ucs2_val];
@@ -358,10 +368,11 @@ char *dos_buffer2_to_multistr(BUFFER2 *str)
char *lbuf = lbufs[nexti];
char *p;
uint16 *src = str->buffer;
+ int max_size = MIN(sizeof(str->buffer)-3, str->buf_len/2);
nexti = (nexti+1)%8;
- for (p = lbuf; (p - lbuf < sizeof(str->buffer)-3) && (src - str->buffer < str->buf_len/2); src++) {
+ for (p = lbuf; p-lbuf < max_size; src++) {
if (*src == 0) {
*p++ = ' ';
} else {
@@ -470,6 +481,8 @@ int unistrcpy(char *dst, char *src)
return num_wchars;
}
+
+
/*******************************************************************
Free any existing maps.
********************************************************************/
@@ -492,6 +505,7 @@ static void free_maps(smb_ucs2_t **pp_cp_to_ucs2, uint16 **pp_ucs2_to_cp)
}
}
+
/*******************************************************************
Build a default (null) codepage to unicode map.
********************************************************************/
diff --git a/source/libsmb/cli_lsarpc.c b/source/libsmb/cli_lsarpc.c
index 88f0dff225b..7f5431e4b3a 100644
--- a/source/libsmb/cli_lsarpc.c
+++ b/source/libsmb/cli_lsarpc.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 2.2
RPC pipe client
- Copyright (C) Tim Potter 2000-2001,
+ Copyright (C) Tim Potter 2000,
Copyright (C) Andrew Tridgell 1992-1997,2000,
Copyright (C) Luke Kenneth Casson Leighton 1996-1997,2000,
Copyright (C) Paul Ashton 1997,2000,
@@ -84,8 +84,8 @@ void cli_lsa_shutdown(struct cli_state *cli)
/* Open a LSA policy handle */
-uint32 cli_lsa_open_policy(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- BOOL sec_qos, uint32 des_access, POLICY_HND *pol)
+uint32 cli_lsa_open_policy(struct cli_state *cli, BOOL sec_qos,
+ uint32 des_access, POLICY_HND *pol)
{
prs_struct qbuf, rbuf;
LSA_Q_OPEN_POL q;
@@ -98,8 +98,8 @@ uint32 cli_lsa_open_policy(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Initialise input parameters */
@@ -140,8 +140,7 @@ uint32 cli_lsa_open_policy(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Close a LSA policy handle */
-uint32 cli_lsa_close(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol)
+uint32 cli_lsa_close(struct cli_state *cli, POLICY_HND *pol)
{
prs_struct qbuf, rbuf;
LSA_Q_CLOSE q;
@@ -153,8 +152,8 @@ uint32 cli_lsa_close(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -188,9 +187,9 @@ uint32 cli_lsa_close(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Lookup a list of sids */
-uint32 cli_lsa_lookup_sids(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol, int num_sids, DOM_SID *sids,
- char ***names, uint32 **types, int *num_names)
+uint32 cli_lsa_lookup_sids(struct cli_state *cli, POLICY_HND *pol,
+ int num_sids, DOM_SID *sids, char ***names,
+ uint32 **types, int *num_names)
{
prs_struct qbuf, rbuf;
LSA_Q_LOOKUP_SIDS q;
@@ -205,12 +204,12 @@ uint32 cli_lsa_lookup_sids(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
- init_q_lookup_sids(mem_ctx, &q, pol, num_sids, sids, 1);
+ init_q_lookup_sids(cli->mem_ctx, &q, pol, num_sids, sids, 1);
if (!lsa_io_q_lookup_sids("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, LSA_LOOKUPSIDS, &qbuf, &rbuf)) {
@@ -247,14 +246,14 @@ uint32 cli_lsa_lookup_sids(struct cli_state *cli, TALLOC_CTX *mem_ctx,
(*num_names) = r.names->num_entries;
- if (!((*names) = (char **)talloc(mem_ctx, sizeof(char *) *
+ if (!((*names) = (char **)malloc(sizeof(char *) *
r.names->num_entries))) {
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
- if (!((*types) = (uint32 *)talloc(mem_ctx, sizeof(uint32) *
+ if (!((*types) = (uint32 *)malloc(sizeof(uint32) *
r.names->num_entries))) {
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
result = NT_STATUS_UNSUCCESSFUL;
@@ -278,7 +277,7 @@ uint32 cli_lsa_lookup_sids(struct cli_state *cli, TALLOC_CTX *mem_ctx,
"%s%s%s", dom_name, dom_name[0] ?
"\\" : "", name);
- (*names)[i] = talloc_strdup(mem_ctx, full_name);
+ (*names)[i] = strdup(full_name);
(*types)[i] = t_names.name[i].sid_name_use;
} else {
(*names)[i] = NULL;
@@ -295,9 +294,9 @@ uint32 cli_lsa_lookup_sids(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Lookup a list of names */
-uint32 cli_lsa_lookup_names(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol, int num_names, char **names,
- DOM_SID **sids, uint32 **types, int *num_sids)
+uint32 cli_lsa_lookup_names(struct cli_state *cli, POLICY_HND *pol,
+ int num_names, char **names, DOM_SID **sids,
+ uint32 **types, int *num_sids)
{
prs_struct qbuf, rbuf;
LSA_Q_LOOKUP_NAMES q;
@@ -311,12 +310,12 @@ uint32 cli_lsa_lookup_names(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
- init_q_lookup_names(mem_ctx, &q, pol, num_names, names);
+ init_q_lookup_names(cli->mem_ctx, &q, pol, num_names, names);
if (!lsa_io_q_lookup_names("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, LSA_LOOKUPNAMES, &qbuf, &rbuf)) {
@@ -350,14 +349,14 @@ uint32 cli_lsa_lookup_names(struct cli_state *cli, TALLOC_CTX *mem_ctx,
(*num_sids) = r.num_entries;
- if (!((*sids = (DOM_SID *)talloc(mem_ctx, sizeof(DOM_SID) *
+ if (!((*sids = (DOM_SID *)malloc(sizeof(DOM_SID) *
r.num_entries)))) {
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
- if (!((*types = (uint32 *)talloc(mem_ctx, sizeof(uint32) *
+ if (!((*types = (uint32 *)malloc(sizeof(uint32) *
r.num_entries)))) {
DEBUG(0, ("cli_lsa_lookup_sids(): out of memory\n"));
result = NT_STATUS_UNSUCCESSFUL;
@@ -396,9 +395,9 @@ uint32 cli_lsa_lookup_names(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Query info policy */
-uint32 cli_lsa_query_info_policy(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol, uint16 info_class,
- fstring domain_name, DOM_SID *domain_sid)
+uint32 cli_lsa_query_info_policy(struct cli_state *cli, POLICY_HND *pol,
+ uint16 info_class, fstring domain_name,
+ DOM_SID * domain_sid)
{
prs_struct qbuf, rbuf;
LSA_Q_QUERY_INFO q;
@@ -410,8 +409,8 @@ uint32 cli_lsa_query_info_policy(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -436,9 +435,6 @@ uint32 cli_lsa_query_info_policy(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Return output parameters */
- ZERO_STRUCTP(domain_sid);
- domain_name[0] = '\0';
-
switch (info_class) {
case 3:
@@ -483,10 +479,9 @@ uint32 cli_lsa_query_info_policy(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Enumerate list of trusted domains */
-uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol, uint32 *enum_ctx,
- uint32 *num_domains, char ***domain_names,
- DOM_SID **domain_sids)
+uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, POLICY_HND *pol,
+ uint32 *enum_ctx, uint32 *num_domains,
+ char ***domain_names, DOM_SID **domain_sids)
{
prs_struct qbuf, rbuf;
LSA_Q_ENUM_TRUST_DOM q;
@@ -499,8 +494,8 @@ uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -521,12 +516,7 @@ uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, TALLOC_CTX *mem_ctx,
result = r.status;
- /* For some undocumented reason this function sometimes returns
- 0x8000001a (NT_STATUS_UNABLE_TO_FREE_VM) so we ignore it and
- pretend everything is OK. */
-
- if (result != NT_STATUS_NOPROBLEMO &&
- result != NT_STATUS_UNABLE_TO_FREE_VM) {
+ if (result != NT_STATUS_NOPROBLEMO && result != 0x8000001a) {
/* An actual error ocured */
@@ -537,42 +527,33 @@ uint32 cli_lsa_enum_trust_dom(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Return output parameters */
- if (r.num_domains) {
-
- /* Allocate memory for trusted domain names and sids */
-
- *domain_names = (char **)talloc(mem_ctx, sizeof(char *) *
- r.num_domains);
-
- if (!*domain_names) {
- DEBUG(0, ("cli_lsa_enum_trust_dom(): out of memory\n"));
- result = NT_STATUS_UNSUCCESSFUL;
- goto done;
- }
-
- *domain_sids = (DOM_SID *)talloc(mem_ctx, sizeof(DOM_SID) *
- r.num_domains);
- if (!domain_sids) {
- DEBUG(0, ("cli_lsa_enum_trust_dom(): out of memory\n"));
- result = NT_STATUS_UNSUCCESSFUL;
- goto done;
- }
+ if (!((*domain_names) = (char **)malloc(sizeof(char *) *
+ r.num_domains))) {
+ DEBUG(0, ("cli_lsa_enum_trust_dom(): out of memory\n"));
+ result = NT_STATUS_UNSUCCESSFUL;
+ goto done;
+ }
- /* Copy across names and sids */
+ if (!((*domain_sids) = (DOM_SID *)malloc(sizeof(DOM_SID) *
+ r.num_domains))) {
+ DEBUG(0, ("cli_lsa_enum_trust_dom(): out of memory\n"));
+ result = NT_STATUS_UNSUCCESSFUL;
+ goto done;
+ }
- for (i = 0; i < r.num_domains; i++) {
- fstring tmp;
+ for (i = 0; i < r.num_domains; i++) {
+ fstring tmp;
- unistr2_to_ascii(tmp, &r.uni_domain_name[i],
- sizeof(tmp) - 1);
- (*domain_names)[i] = strdup(tmp);
- sid_copy(&(*domain_sids)[i], &r.domain_sid[i].sid);
- }
+ unistr2_to_ascii(tmp, &r.uni_domain_name[i], sizeof(tmp) - 1);
+ (*domain_names)[i] = strdup(tmp);
+ sid_copy(&(*domain_sids)[i], &r.domain_sid[i].sid);
}
*num_domains = r.num_domains;
*enum_ctx = r.enum_context;
+ lsa_free_r_enum_trust_dom(&r);
+
done:
prs_mem_free(&qbuf);
prs_mem_free(&rbuf);
diff --git a/source/libsmb/cli_samr.c b/source/libsmb/cli_samr.c
index 9fb7e078f67..4c53bd05847 100644
--- a/source/libsmb/cli_samr.c
+++ b/source/libsmb/cli_samr.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 2.2
RPC pipe client
- Copyright (C) Tim Potter 2000-2001,
+ Copyright (C) Tim Potter 2000,
Copyright (C) Andrew Tridgell 1992-1997,2000,
Copyright (C) Luke Kenneth Casson Leighton 1996-1997,2000,
Copyright (C) Paul Ashton 1997,2000,
@@ -84,22 +84,21 @@ void cli_samr_shutdown(struct cli_state *cli)
/* Connect to SAMR database */
-uint32 cli_samr_connect(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- char *srv_name, uint32 access_mask,
- POLICY_HND *connect_pol)
+uint32 cli_samr_connect(struct cli_state *cli, char *srv_name,
+ uint32 access_mask, POLICY_HND *connect_pol)
{
prs_struct qbuf, rbuf;
SAMR_Q_CONNECT q;
SAMR_R_CONNECT r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
+ uint32 result;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -107,12 +106,14 @@ uint32 cli_samr_connect(struct cli_state *cli, TALLOC_CTX *mem_ctx,
if (!samr_io_q_connect("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, SAMR_CONNECT, &qbuf, &rbuf)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
/* Unmarshall response */
if (!samr_io_r_connect("", &r, &rbuf, 0)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -131,21 +132,20 @@ uint32 cli_samr_connect(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Close SAMR handle */
-uint32 cli_samr_close(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *connect_pol)
+uint32 cli_samr_close(struct cli_state *cli, POLICY_HND *connect_pol)
{
prs_struct qbuf, rbuf;
SAMR_Q_CLOSE_HND q;
SAMR_R_CLOSE_HND r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
+ uint32 result;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -153,12 +153,14 @@ uint32 cli_samr_close(struct cli_state *cli, TALLOC_CTX *mem_ctx,
if (!samr_io_q_close_hnd("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, SAMR_CLOSE_HND, &qbuf, &rbuf)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
/* Unmarshall response */
if (!samr_io_r_close_hnd("", &r, &rbuf, 0)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -177,22 +179,22 @@ uint32 cli_samr_close(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Open handle on a domain */
-uint32 cli_samr_open_domain(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *connect_pol, uint32 access_mask,
- DOM_SID *domain_sid, POLICY_HND *domain_pol)
+uint32 cli_samr_open_domain(struct cli_state *cli, POLICY_HND *connect_pol,
+ uint32 access_mask, DOM_SID *domain_sid,
+ POLICY_HND *domain_pol)
{
prs_struct qbuf, rbuf;
SAMR_Q_OPEN_DOMAIN q;
SAMR_R_OPEN_DOMAIN r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
+ uint32 result;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -200,12 +202,14 @@ uint32 cli_samr_open_domain(struct cli_state *cli, TALLOC_CTX *mem_ctx,
if (!samr_io_q_open_domain("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, SAMR_OPEN_DOMAIN, &qbuf, &rbuf)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
/* Unmarshall response */
if (!samr_io_r_open_domain("", &r, &rbuf, 0)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -224,22 +228,22 @@ uint32 cli_samr_open_domain(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Open handle on a user */
-uint32 cli_samr_open_user(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *domain_pol, uint32 access_mask,
- uint32 user_rid, POLICY_HND *user_pol)
+uint32 cli_samr_open_user(struct cli_state *cli, POLICY_HND *domain_pol,
+ uint32 access_mask, uint32 user_rid,
+ POLICY_HND *user_pol)
{
prs_struct qbuf, rbuf;
SAMR_Q_OPEN_USER q;
SAMR_R_OPEN_USER r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
+ uint32 result;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -247,12 +251,14 @@ uint32 cli_samr_open_user(struct cli_state *cli, TALLOC_CTX *mem_ctx,
if (!samr_io_q_open_user("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, SAMR_OPEN_USER, &qbuf, &rbuf)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
/* Unmarshall response */
if (!samr_io_r_open_user("", &r, &rbuf, 0)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -271,22 +277,22 @@ uint32 cli_samr_open_user(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Open handle on a group */
-uint32 cli_samr_open_group(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *domain_pol, uint32 access_mask,
- uint32 group_rid, POLICY_HND *group_pol)
+uint32 cli_samr_open_group(struct cli_state *cli, POLICY_HND *domain_pol,
+ uint32 access_mask, uint32 group_rid,
+ POLICY_HND *group_pol)
{
prs_struct qbuf, rbuf;
SAMR_Q_OPEN_GROUP q;
SAMR_R_OPEN_GROUP r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
+ uint32 result;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -294,12 +300,14 @@ uint32 cli_samr_open_group(struct cli_state *cli, TALLOC_CTX *mem_ctx,
if (!samr_io_q_open_group("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, SAMR_OPEN_GROUP, &qbuf, &rbuf)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
/* Unmarshall response */
if (!samr_io_r_open_group("", &r, &rbuf, 0)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -318,22 +326,21 @@ uint32 cli_samr_open_group(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Query user info */
-uint32 cli_samr_query_userinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *user_pol, uint16 switch_value,
- SAM_USERINFO_CTR *ctr)
+uint32 cli_samr_query_userinfo(struct cli_state *cli, POLICY_HND *user_pol,
+ uint16 switch_value, SAM_USERINFO_CTR *ctr)
{
prs_struct qbuf, rbuf;
SAMR_Q_QUERY_USERINFO q;
SAMR_R_QUERY_USERINFO r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
+ uint32 result;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -341,6 +348,7 @@ uint32 cli_samr_query_userinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
if (!samr_io_q_query_userinfo("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, SAMR_QUERY_USERINFO, &qbuf, &rbuf)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -349,6 +357,7 @@ uint32 cli_samr_query_userinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
r.ctr = ctr;
if (!samr_io_r_query_userinfo("", &r, &rbuf, 0)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -365,22 +374,21 @@ uint32 cli_samr_query_userinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Query group info */
-uint32 cli_samr_query_groupinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *group_pol, uint32 info_level,
- GROUP_INFO_CTR *ctr)
+uint32 cli_samr_query_groupinfo(struct cli_state *cli, POLICY_HND *group_pol,
+ uint32 info_level, GROUP_INFO_CTR *ctr)
{
prs_struct qbuf, rbuf;
SAMR_Q_QUERY_GROUPINFO q;
SAMR_R_QUERY_GROUPINFO r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
+ uint32 result;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -388,6 +396,7 @@ uint32 cli_samr_query_groupinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
if (!samr_io_q_query_groupinfo("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, SAMR_QUERY_GROUPINFO, &qbuf, &rbuf)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -396,6 +405,7 @@ uint32 cli_samr_query_groupinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
r.ctr = ctr;
if (!samr_io_r_query_groupinfo("", &r, &rbuf, 0)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -412,22 +422,21 @@ uint32 cli_samr_query_groupinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Query user groups */
-uint32 cli_samr_query_usergroups(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *user_pol, uint32 *num_groups,
- DOM_GID **gid)
+uint32 cli_samr_query_usergroups(struct cli_state *cli, POLICY_HND *user_pol,
+ uint32 *num_groups, DOM_GID **gid)
{
prs_struct qbuf, rbuf;
SAMR_Q_QUERY_USERGROUPS q;
SAMR_R_QUERY_USERGROUPS r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
+ uint32 result;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -435,12 +444,14 @@ uint32 cli_samr_query_usergroups(struct cli_state *cli, TALLOC_CTX *mem_ctx,
if (!samr_io_q_query_usergroups("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, SAMR_QUERY_USERGROUPS, &qbuf, &rbuf)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
/* Unmarshall response */
if (!samr_io_r_query_usergroups("", &r, &rbuf, 0)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -460,22 +471,21 @@ uint32 cli_samr_query_usergroups(struct cli_state *cli, TALLOC_CTX *mem_ctx,
/* Query user groups */
-uint32 cli_samr_query_groupmem(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *group_pol, uint32 *num_mem,
- uint32 **rid, uint32 **attr)
+uint32 cli_samr_query_groupmem(struct cli_state *cli, POLICY_HND *group_pol,
+ uint32 *num_mem, uint32 **rid, uint32 **attr)
{
prs_struct qbuf, rbuf;
SAMR_Q_QUERY_GROUPMEM q;
SAMR_R_QUERY_GROUPMEM r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
+ uint32 result;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Marshall data and send request */
@@ -483,12 +493,14 @@ uint32 cli_samr_query_groupmem(struct cli_state *cli, TALLOC_CTX *mem_ctx,
if (!samr_io_q_query_groupmem("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, SAMR_QUERY_GROUPMEM, &qbuf, &rbuf)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
/* Unmarshall response */
if (!samr_io_r_query_groupmem("", &r, &rbuf, 0)) {
+ result = NT_STATUS_UNSUCCESSFUL;
goto done;
}
@@ -506,288 +518,3 @@ uint32 cli_samr_query_groupmem(struct cli_state *cli, TALLOC_CTX *mem_ctx,
return result;
}
-
-/* Enumerate domain groups */
-
-uint32 cli_samr_enum_dom_groups(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *pol, uint32 *start_idx,
- uint32 size, struct acct_info **dom_groups,
- uint32 *num_dom_groups)
-{
- prs_struct qbuf, rbuf;
- SAMR_Q_ENUM_DOM_GROUPS q;
- SAMR_R_ENUM_DOM_GROUPS r;
- uint32 result = NT_STATUS_UNSUCCESSFUL, name_idx, i;
-
- ZERO_STRUCT(q);
- ZERO_STRUCT(r);
-
- /* Initialise parse structures */
-
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
-
- /* Marshall data and send request */
-
- init_samr_q_enum_dom_groups(&q, pol, *start_idx, size);
-
- if (!samr_io_q_enum_dom_groups("", &q, &qbuf, 0) ||
- !rpc_api_pipe_req(cli, SAMR_ENUM_DOM_GROUPS, &qbuf, &rbuf)) {
- goto done;
- }
-
- /* Unmarshall response */
-
- if (!samr_io_r_enum_dom_groups("", &r, &rbuf, 0)) {
- goto done;
- }
-
- /* Return output parameters */
-
- result = r.status;
-
- if (result != NT_STATUS_NOPROBLEMO &&
- result != STATUS_MORE_ENTRIES) {
- goto done;
- }
-
- *num_dom_groups = r.num_entries2;
-
- if (!((*dom_groups) = (struct acct_info *)
- talloc(mem_ctx, sizeof(struct acct_info) * *num_dom_groups))) {
- result = NT_STATUS_UNSUCCESSFUL;
- goto done;
- }
-
- memset(*dom_groups, 0, sizeof(struct acct_info) * *num_dom_groups);
-
- name_idx = 0;
-
- for (i = 0; i < *num_dom_groups; i++) {
-
- (*dom_groups)[i].rid = r.sam[i].rid;
-
- if (r.sam[i].hdr_name.buffer) {
- unistr2_to_ascii((*dom_groups)[i].acct_name,
- &r.uni_grp_name[name_idx],
- sizeof(fstring) - 1);
- name_idx++;
- }
-
- *start_idx = r.next_idx;
- }
-
- done:
- prs_mem_free(&qbuf);
- prs_mem_free(&rbuf);
-
- return result;
-}
-
-/* Query alias members */
-
-uint32 cli_samr_query_aliasmem(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *alias_pol, uint32 *num_mem,
- DOM_SID **sids)
-{
- prs_struct qbuf, rbuf;
- SAMR_Q_QUERY_ALIASMEM q;
- SAMR_R_QUERY_ALIASMEM r;
- uint32 result = NT_STATUS_UNSUCCESSFUL, i;
-
- ZERO_STRUCT(q);
- ZERO_STRUCT(r);
-
- /* Initialise parse structures */
-
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
-
- /* Marshall data and send request */
-
- init_samr_q_query_aliasmem(&q, alias_pol);
-
- if (!samr_io_q_query_aliasmem("", &q, &qbuf, 0) ||
- !rpc_api_pipe_req(cli, SAMR_QUERY_ALIASMEM, &qbuf, &rbuf)) {
- goto done;
- }
-
- /* Unmarshall response */
-
- if (!samr_io_r_query_aliasmem("", &r, &rbuf, 0)) {
- goto done;
- }
-
- /* Return output parameters */
-
- if ((result = r.status) != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- *num_mem = r.num_sids;
-
- if (!(*sids = talloc(mem_ctx, sizeof(DOM_SID) * *num_mem))) {
- result = NT_STATUS_UNSUCCESSFUL;
- goto done;
- }
-
- for (i = 0; i < *num_mem; i++) {
- (*sids)[i] = r.sid[i].sid;
- }
-
- done:
- prs_mem_free(&qbuf);
- prs_mem_free(&rbuf);
-
- return result;
-}
-
-/* Open handle on an alias */
-
-uint32 cli_samr_open_alias(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *domain_pol, uint32 access_mask,
- uint32 alias_rid, POLICY_HND *alias_pol)
-{
- prs_struct qbuf, rbuf;
- SAMR_Q_OPEN_ALIAS q;
- SAMR_R_OPEN_ALIAS r;
- uint32 result;
-
- ZERO_STRUCT(q);
- ZERO_STRUCT(r);
-
- /* Initialise parse structures */
-
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
-
- /* Marshall data and send request */
-
- init_samr_q_open_alias(&q, domain_pol, access_mask, alias_rid);
-
- if (!samr_io_q_open_alias("", &q, &qbuf, 0) ||
- !rpc_api_pipe_req(cli, SAMR_OPEN_ALIAS, &qbuf, &rbuf)) {
- result = NT_STATUS_UNSUCCESSFUL;
- goto done;
- }
-
- /* Unmarshall response */
-
- if (!samr_io_r_open_alias("", &r, &rbuf, 0)) {
- result = NT_STATUS_UNSUCCESSFUL;
- goto done;
- }
-
- /* Return output parameters */
-
- if ((result = r.status) == NT_STATUS_NOPROBLEMO) {
- *alias_pol = r.pol;
- }
-
- done:
- prs_mem_free(&qbuf);
- prs_mem_free(&rbuf);
-
- return result;
-}
-
-/* Query domain info */
-
-uint32 cli_samr_query_dom_info(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *domain_pol, uint16 switch_value,
- SAM_UNK_CTR *ctr)
-{
- prs_struct qbuf, rbuf;
- SAMR_Q_QUERY_DOMAIN_INFO q;
- SAMR_R_QUERY_DOMAIN_INFO r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
-
- ZERO_STRUCT(q);
- ZERO_STRUCT(r);
-
- /* Initialise parse structures */
-
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
-
- /* Marshall data and send request */
-
- init_samr_q_query_dom_info(&q, domain_pol, switch_value);
-
- if (!samr_io_q_query_dom_info("", &q, &qbuf, 0) ||
- !rpc_api_pipe_req(cli, SAMR_QUERY_DOMAIN_INFO, &qbuf, &rbuf)) {
- goto done;
- }
-
- /* Unmarshall response */
-
- r.ctr = ctr;
-
- if (!samr_io_r_query_dom_info("", &r, &rbuf, 0)) {
- goto done;
- }
-
- /* Return output parameters */
-
- if ((result = r.status) != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- done:
- prs_mem_free(&qbuf);
- prs_mem_free(&rbuf);
-
- return result;
-}
-
-/* Query display info */
-
-uint32 cli_samr_query_dispinfo(struct cli_state *cli, TALLOC_CTX *mem_ctx,
- POLICY_HND *domain_pol, uint32 *start_idx,
- uint16 switch_value, uint32 *num_entries,
- uint32 max_entries, SAM_DISPINFO_CTR *ctr)
-{
- prs_struct qbuf, rbuf;
- SAMR_Q_QUERY_DISPINFO q;
- SAMR_R_QUERY_DISPINFO r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
-
- ZERO_STRUCT(q);
- ZERO_STRUCT(r);
-
- /* Initialise parse structures */
-
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
-
- /* Marshall data and send request */
-
- init_samr_q_query_dispinfo(&q, domain_pol, switch_value,
- *start_idx, max_entries);
-
- if (!samr_io_q_query_dispinfo("", &q, &qbuf, 0) ||
- !rpc_api_pipe_req(cli, SAMR_QUERY_DISPINFO, &qbuf, &rbuf)) {
- goto done;
- }
-
- /* Unmarshall response */
-
- if (!samr_io_r_query_dispinfo("", &r, &rbuf, 0)) {
- goto done;
- }
-
- /* Return output parameters */
-
- if ((result = r.status) != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- *num_entries = r.num_entries;
- *start_idx += r.num_entries; /* No next_idx in this structure! */
-
- done:
- prs_mem_free(&qbuf);
- prs_mem_free(&rbuf);
-
- return result;
-}
diff --git a/source/libsmb/cli_spoolss.c b/source/libsmb/cli_spoolss.c
index 2c962ef27a0..db761e57bfa 100644
--- a/source/libsmb/cli_spoolss.c
+++ b/source/libsmb/cli_spoolss.c
@@ -87,16 +87,10 @@ void cli_spoolss_shutdown(struct cli_state *cli)
/* Open printer ex */
-uint32 cli_spoolss_open_printer_ex(
- struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
- char *printername,
- char *datatype,
- uint32 access_required,
- char *station,
- char *username,
- POLICY_HND *pol
-)
+uint32 cli_spoolss_open_printer_ex(struct cli_state *cli, char *printername,
+ char *datatype, uint32 access_required,
+ char *station, char *username,
+ POLICY_HND *pol)
{
prs_struct qbuf, rbuf;
SPOOL_Q_OPEN_PRINTER_EX q;
@@ -108,8 +102,8 @@ uint32 cli_spoolss_open_printer_ex(
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Initialise input parameters */
@@ -146,11 +140,7 @@ uint32 cli_spoolss_open_printer_ex(
/* Close a printer handle */
-uint32 cli_spoolss_close_printer(
- struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
- POLICY_HND *pol
-)
+uint32 cli_spoolss_close_printer(struct cli_state *cli, POLICY_HND *pol)
{
prs_struct qbuf, rbuf;
SPOOL_Q_CLOSEPRINTER q;
@@ -162,8 +152,8 @@ uint32 cli_spoolss_close_printer(
/* Initialise parse structures */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* Initialise input parameters */
@@ -211,12 +201,8 @@ static void init_buffer(NEW_BUFFER *buffer, uint32 size, TALLOC_CTX *ctx)
/* Decode various printer info levels - perhaps this should live in
parse_spoolss.c? */
-static void decode_printer_info_0(
- TALLOC_CTX *mem_ctx,
- NEW_BUFFER *buffer,
- uint32 returned,
- PRINTER_INFO_0 **info
-)
+static void decode_printer_info_0(NEW_BUFFER *buffer, uint32 returned,
+ PRINTER_INFO_0 **info)
{
uint32 i;
PRINTER_INFO_0 *inf;
@@ -232,17 +218,13 @@ static void decode_printer_info_0(
*info=inf;
}
-static void decode_printer_info_1(
- TALLOC_CTX *mem_ctx,
- NEW_BUFFER *buffer,
- uint32 returned,
- PRINTER_INFO_1 **info
-)
+static void decode_printer_info_1(NEW_BUFFER *buffer, uint32 returned,
+ PRINTER_INFO_1 **info)
{
uint32 i;
PRINTER_INFO_1 *inf;
- inf=(PRINTER_INFO_1 *)talloc(mem_ctx, returned*sizeof(PRINTER_INFO_1));
+ inf=(PRINTER_INFO_1 *)malloc(returned*sizeof(PRINTER_INFO_1));
buffer->prs.data_offset=0;
@@ -253,17 +235,13 @@ static void decode_printer_info_1(
*info=inf;
}
-static void decode_printer_info_2(
- TALLOC_CTX *mem_ctx,
- NEW_BUFFER *buffer,
- uint32 returned,
- PRINTER_INFO_2 **info
-)
+static void decode_printer_info_2(NEW_BUFFER *buffer, uint32 returned,
+ PRINTER_INFO_2 **info)
{
uint32 i;
PRINTER_INFO_2 *inf;
- inf=(PRINTER_INFO_2 *)talloc(mem_ctx, returned*sizeof(PRINTER_INFO_2));
+ inf=(PRINTER_INFO_2 *)malloc(returned*sizeof(PRINTER_INFO_2));
buffer->prs.data_offset=0;
@@ -276,17 +254,13 @@ static void decode_printer_info_2(
*info=inf;
}
-static void decode_printer_info_3(
- TALLOC_CTX *mem_ctx,
- NEW_BUFFER *buffer,
- uint32 returned,
- PRINTER_INFO_3 **info
-)
+static void decode_printer_info_3(NEW_BUFFER *buffer, uint32 returned,
+ PRINTER_INFO_3 **info)
{
uint32 i;
PRINTER_INFO_3 *inf;
- inf=(PRINTER_INFO_3 *)talloc(mem_ctx, returned*sizeof(PRINTER_INFO_3));
+ inf=(PRINTER_INFO_3 *)malloc(returned*sizeof(PRINTER_INFO_3));
buffer->prs.data_offset=0;
@@ -301,17 +275,13 @@ static void decode_printer_info_3(
/**********************************************************************
Decode a PORT_INFO_1 struct from a NEW_BUFFER
**********************************************************************/
-static void decode_port_info_1(
- TALLOC_CTX *mem_ctx,
- NEW_BUFFER *buffer,
- uint32 returned,
- PORT_INFO_1 **info
-)
+static void decode_port_info_1(NEW_BUFFER *buffer, uint32 returned,
+ PORT_INFO_1 **info)
{
uint32 i;
PORT_INFO_1 *inf;
- inf=(PORT_INFO_1*)talloc(mem_ctx, returned*sizeof(PORT_INFO_1));
+ inf=(PORT_INFO_1*)malloc(returned*sizeof(PORT_INFO_1));
prs_set_offset(&buffer->prs, 0);
@@ -325,16 +295,13 @@ static void decode_port_info_1(
/**********************************************************************
Decode a PORT_INFO_2 struct from a NEW_BUFFER
**********************************************************************/
-static void decode_port_info_2(
- TALLOC_CTX *mem_ctx,
- NEW_BUFFER *buffer,
- uint32 returned,
- PORT_INFO_2 **info)
+static void decode_port_info_2(NEW_BUFFER *buffer, uint32 returned,
+ PORT_INFO_2 **info)
{
uint32 i;
PORT_INFO_2 *inf;
- inf=(PORT_INFO_2*)talloc(mem_ctx, returned*sizeof(PORT_INFO_2));
+ inf=(PORT_INFO_2*)malloc(returned*sizeof(PORT_INFO_2));
prs_set_offset(&buffer->prs, 0);
@@ -345,17 +312,13 @@ static void decode_port_info_2(
*info=inf;
}
-static void decode_printer_driver_1(
- TALLOC_CTX *mem_ctx,
- NEW_BUFFER *buffer,
- uint32 returned,
- DRIVER_INFO_1 **info
-)
+static void decode_printer_driver_1(NEW_BUFFER *buffer, uint32 returned,
+ DRIVER_INFO_1 **info)
{
uint32 i;
DRIVER_INFO_1 *inf;
- inf=(DRIVER_INFO_1 *)talloc(mem_ctx, returned*sizeof(DRIVER_INFO_1));
+ inf=(DRIVER_INFO_1 *)malloc(returned*sizeof(DRIVER_INFO_1));
buffer->prs.data_offset=0;
@@ -366,17 +329,13 @@ static void decode_printer_driver_1(
*info=inf;
}
-static void decode_printer_driver_2(
- TALLOC_CTX *mem_ctx,
- NEW_BUFFER *buffer,
- uint32 returned,
- DRIVER_INFO_2 **info
-)
+static void decode_printer_driver_2(NEW_BUFFER *buffer, uint32 returned,
+ DRIVER_INFO_2 **info)
{
uint32 i;
DRIVER_INFO_2 *inf;
- inf=(DRIVER_INFO_2 *)talloc(mem_ctx, returned*sizeof(DRIVER_INFO_2));
+ inf=(DRIVER_INFO_2 *)malloc(returned*sizeof(DRIVER_INFO_2));
buffer->prs.data_offset=0;
@@ -388,7 +347,6 @@ static void decode_printer_driver_2(
}
static void decode_printer_driver_3(
- TALLOC_CTX *mem_ctx,
NEW_BUFFER *buffer,
uint32 returned,
DRIVER_INFO_3 **info
@@ -397,7 +355,7 @@ static void decode_printer_driver_3(
uint32 i;
DRIVER_INFO_3 *inf;
- inf=(DRIVER_INFO_3 *)talloc(mem_ctx, returned*sizeof(DRIVER_INFO_3));
+ inf=(DRIVER_INFO_3 *)malloc(returned*sizeof(DRIVER_INFO_3));
buffer->prs.data_offset=0;
@@ -409,7 +367,6 @@ static void decode_printer_driver_3(
}
static void decode_printerdriverdir_1 (
- TALLOC_CTX *mem_ctx,
NEW_BUFFER *buffer,
uint32 returned,
DRIVER_DIRECTORY_1 **info
@@ -417,7 +374,7 @@ static void decode_printerdriverdir_1 (
{
DRIVER_DIRECTORY_1 *inf;
- inf=(DRIVER_DIRECTORY_1 *)talloc(mem_ctx, sizeof(DRIVER_DIRECTORY_1));
+ inf=(DRIVER_DIRECTORY_1 *)malloc(sizeof(DRIVER_DIRECTORY_1));
prs_set_offset(&buffer->prs, 0);
@@ -429,14 +386,9 @@ static void decode_printerdriverdir_1 (
/* Enumerate printers */
-uint32 cli_spoolss_enum_printers(
- struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
- uint32 flags,
- uint32 level,
- int *returned,
- PRINTER_INFO_CTR *ctr
-)
+uint32 cli_spoolss_enum_printers(struct cli_state *cli, uint32 flags,
+ uint32 level, int *returned,
+ PRINTER_INFO_CTR *ctr)
{
prs_struct qbuf, rbuf;
SPOOL_Q_ENUMPRINTERS q;
@@ -455,10 +407,10 @@ uint32 cli_spoolss_enum_printers(
do {
/* Initialise input parameters */
- init_buffer(&buffer, needed, mem_ctx);
+ init_buffer(&buffer, needed, cli->mem_ctx);
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
make_spoolss_q_enumprinters(&q, flags, server, level, &buffer,
needed);
@@ -478,20 +430,21 @@ uint32 cli_spoolss_enum_printers(
/* Return output parameters */
- if (((result=r.status) == NT_STATUS_NOPROBLEMO) && (*returned = r.returned))
- {
+ if ((result = r.status) == NT_STATUS_NOPROBLEMO && r.returned > 0) {
+
+ *returned = r.returned;
switch (level) {
case 1:
- decode_printer_info_1(mem_ctx, r.buffer, r.returned,
+ decode_printer_info_1(r.buffer, r.returned,
&ctr->printers_1);
break;
case 2:
- decode_printer_info_2(mem_ctx, r.buffer, r.returned,
+ decode_printer_info_2(r.buffer, r.returned,
&ctr->printers_2);
break;
case 3:
- decode_printer_info_3(mem_ctx, r.buffer, r.returned,
+ decode_printer_info_3(r.buffer, r.returned,
&ctr->printers_3);
break;
}
@@ -507,13 +460,8 @@ uint32 cli_spoolss_enum_printers(
}
/* Enumerate printer ports */
-uint32 cli_spoolss_enum_ports(
- struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
- uint32 level,
- int *returned,
- PORT_INFO_CTR *ctr
-)
+uint32 cli_spoolss_enum_ports(struct cli_state *cli, uint32 level,
+ int *returned, PORT_INFO_CTR *ctr)
{
prs_struct qbuf, rbuf;
SPOOL_Q_ENUMPORTS q;
@@ -532,10 +480,10 @@ uint32 cli_spoolss_enum_ports(
do {
/* Initialise input parameters */
- init_buffer(&buffer, needed, mem_ctx);
+ init_buffer(&buffer, needed, cli->mem_ctx);
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
make_spoolss_q_enumports(&q, server, level, &buffer, needed);
@@ -561,11 +509,11 @@ uint32 cli_spoolss_enum_ports(
switch (level) {
case 1:
- decode_port_info_1(mem_ctx, r.buffer, r.returned,
+ decode_port_info_1(r.buffer, r.returned,
&ctr->port.info_1);
break;
case 2:
- decode_port_info_2(mem_ctx, r.buffer, r.returned,
+ decode_port_info_2(r.buffer, r.returned,
&ctr->port.info_2);
break;
}
@@ -583,7 +531,6 @@ uint32 cli_spoolss_enum_ports(
/* Get printer info */
uint32 cli_spoolss_getprinter(
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
POLICY_HND *pol,
uint32 level,
PRINTER_INFO_CTR *ctr
@@ -602,12 +549,12 @@ uint32 cli_spoolss_getprinter(
do {
/* Initialise input parameters */
- init_buffer(&buffer, needed, mem_ctx);
+ init_buffer(&buffer, needed, cli->mem_ctx);
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
- make_spoolss_q_getprinter(mem_ctx, &q, pol, level, &buffer, needed);
+ make_spoolss_q_getprinter(&q, pol, level, &buffer, needed);
/* Marshall data and send request */
if (!spoolss_io_q_getprinter("", &q, &qbuf, 0) ||
@@ -627,16 +574,16 @@ uint32 cli_spoolss_getprinter(
switch (level) {
case 0:
- decode_printer_info_0(mem_ctx, r.buffer, 1, &ctr->printers_0);
+ decode_printer_info_0(r.buffer, 1, &ctr->printers_0);
break;
case 1:
- decode_printer_info_1(mem_ctx, r.buffer, 1, &ctr->printers_1);
+ decode_printer_info_1(r.buffer, 1, &ctr->printers_1);
break;
case 2:
- decode_printer_info_2(mem_ctx, r.buffer, 1, &ctr->printers_2);
+ decode_printer_info_2(r.buffer, 1, &ctr->printers_2);
break;
case 3:
- decode_printer_info_3(mem_ctx, r.buffer, 1, &ctr->printers_3);
+ decode_printer_info_3(r.buffer, 1, &ctr->printers_3);
break;
}
}
@@ -655,7 +602,6 @@ uint32 cli_spoolss_getprinter(
*/
uint32 cli_spoolss_setprinter(
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
POLICY_HND *pol,
uint32 level,
PRINTER_INFO_CTR *ctr,
@@ -671,12 +617,13 @@ uint32 cli_spoolss_setprinter(
ZERO_STRUCT(r);
/* Initialise input parameters */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
- make_spoolss_q_setprinter(mem_ctx, &q, pol, level, ctr, command);
+ make_spoolss_q_setprinter(&q, pol, level, ctr, command);
/* Marshall data and send request */
+ result = NT_STATUS_UNSUCCESSFUL;
if (!spoolss_io_q_setprinter("", &q, &qbuf, 0) ||
!rpc_api_pipe_req(cli, SPOOLSS_SETPRINTER, &qbuf, &rbuf))
{
@@ -685,6 +632,7 @@ uint32 cli_spoolss_setprinter(
}
/* Unmarshall response */
+ result = NT_STATUS_UNSUCCESSFUL;
if (!spoolss_io_r_setprinter("", &r, &rbuf, 0))
{
goto done;
@@ -705,7 +653,6 @@ done:
*/
uint32 cli_spoolss_getprinterdriver (
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
POLICY_HND *pol,
uint32 level,
char* env,
@@ -730,10 +677,10 @@ uint32 cli_spoolss_getprinterdriver (
{
/* Initialise input parameters */
- init_buffer(&buffer, needed, mem_ctx);
+ init_buffer(&buffer, needed, cli->mem_ctx);
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* write the request */
@@ -760,13 +707,13 @@ uint32 cli_spoolss_getprinterdriver (
switch (level)
{
case 1:
- decode_printer_driver_1(mem_ctx, r.buffer, 1, &ctr->info1);
+ decode_printer_driver_1(r.buffer, 1, &ctr->info1);
break;
case 2:
- decode_printer_driver_2(mem_ctx, r.buffer, 1, &ctr->info2);
+ decode_printer_driver_2(r.buffer, 1, &ctr->info2);
break;
case 3:
- decode_printer_driver_3(mem_ctx, r.buffer, 1, &ctr->info3);
+ decode_printer_driver_3(r.buffer, 1, &ctr->info3);
break;
}
}
@@ -785,7 +732,6 @@ uint32 cli_spoolss_getprinterdriver (
*/
uint32 cli_spoolss_enumprinterdrivers (
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
uint32 level,
char* env,
uint32 *returned,
@@ -809,10 +755,10 @@ uint32 cli_spoolss_enumprinterdrivers (
do
{
/* Initialise input parameters */
- init_buffer(&buffer, needed, mem_ctx);
+ init_buffer(&buffer, needed, cli->mem_ctx);
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* write the request */
@@ -841,13 +787,13 @@ uint32 cli_spoolss_enumprinterdrivers (
switch (level)
{
case 1:
- decode_printer_driver_1(mem_ctx, r.buffer, r.returned, &ctr->info1);
+ decode_printer_driver_1(r.buffer, r.returned, &ctr->info1);
break;
case 2:
- decode_printer_driver_2(mem_ctx, r.buffer, r.returned, &ctr->info2);
+ decode_printer_driver_2(r.buffer, r.returned, &ctr->info2);
break;
case 3:
- decode_printer_driver_3(mem_ctx, r.buffer, r.returned, &ctr->info3);
+ decode_printer_driver_3(r.buffer, r.returned, &ctr->info3);
break;
}
}
@@ -867,7 +813,6 @@ uint32 cli_spoolss_enumprinterdrivers (
*/
uint32 cli_spoolss_getprinterdriverdir (
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
uint32 level,
char* env,
DRIVER_DIRECTORY_CTR *ctr
@@ -890,10 +835,10 @@ uint32 cli_spoolss_getprinterdriverdir (
do
{
/* Initialise input parameters */
- init_buffer(&buffer, needed, mem_ctx);
+ init_buffer(&buffer, needed, cli->mem_ctx);
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* write the request */
@@ -919,7 +864,7 @@ uint32 cli_spoolss_getprinterdriverdir (
switch (level)
{
case 1:
- decode_printerdriverdir_1(mem_ctx, r.buffer, 1, &ctr->info1);
+ decode_printerdriverdir_1(r.buffer, 1, &ctr->info1);
break;
}
}
@@ -938,7 +883,6 @@ uint32 cli_spoolss_getprinterdriverdir (
*/
uint32 cli_spoolss_addprinterdriver (
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
uint32 level,
PRINTER_DRIVER_CTR *ctr
)
@@ -946,22 +890,22 @@ uint32 cli_spoolss_addprinterdriver (
prs_struct qbuf, rbuf;
SPOOL_Q_ADDPRINTERDRIVER q;
SPOOL_R_ADDPRINTERDRIVER r;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
+ uint32 result;
fstring server;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
-
+
slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
strupper (server);
/* Initialise input parameters */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* write the request */
- make_spoolss_q_addprinterdriver (mem_ctx, &q, server, level, ctr);
+ make_spoolss_q_addprinterdriver (&q, server, level, ctr);
/* Marshall data and send request */
result = NT_STATUS_UNSUCCESSFUL;
@@ -985,7 +929,7 @@ uint32 cli_spoolss_addprinterdriver (
done:
prs_mem_free(&qbuf);
prs_mem_free(&rbuf);
-
+
return result;
}
@@ -994,7 +938,6 @@ done:
*/
uint32 cli_spoolss_addprinterex (
struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
uint32 level,
PRINTER_INFO_CTR *ctr
)
@@ -1018,12 +961,12 @@ uint32 cli_spoolss_addprinterex (
/* Initialise input parameters */
- prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
- prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, cli->mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, cli->mem_ctx, UNMARSHALL);
/* write the request */
- make_spoolss_q_addprinterex (mem_ctx, &q, server, client, user, level, ctr);
+ make_spoolss_q_addprinterex (&q, server, client, user, level, ctr);
/* Marshall data and send request */
result = NT_STATUS_UNSUCCESSFUL;
@@ -1051,61 +994,4 @@ done:
return result;
}
-/**********************************************************************
- * Delete a Printer Driver from the server (does not remove
- * the driver files
- */
-uint32 cli_spoolss_deleteprinterdriver (
- struct cli_state *cli,
- TALLOC_CTX *mem_ctx,
- char *arch,
- char *driver
-)
-{
- prs_struct qbuf, rbuf;
- SPOOL_Q_DELETEPRINTERDRIVER q;
- SPOOL_R_DELETEPRINTERDRIVER r;
- uint32 result;
- 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 (server);
-
- /* write the request */
- make_spoolss_q_deleteprinterdriver (mem_ctx, &q, server, arch, driver);
-
- /* Marshall data and send request */
- result = NT_STATUS_UNSUCCESSFUL;
- if (!spoolss_io_q_deleteprinterdriver ("", &q, &qbuf, 0) ||
- !rpc_api_pipe_req (cli,SPOOLSS_DELETEPRINTERDRIVER , &qbuf, &rbuf))
- {
- goto done;
- }
-
-
- /* Unmarshall response */
- result = NT_STATUS_UNSUCCESSFUL;
- if (!spoolss_io_r_deleteprinterdriver ("", &r, &rbuf, 0))
- {
- goto done;
- }
-
- /* Return output parameters */
- result = r.status;
-
-done:
- prs_mem_free(&qbuf);
- prs_mem_free(&rbuf);
-
- return result;
-}
-
diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c
index 67eef52583f..8a56a08b1d4 100644
--- a/source/libsmb/cliconnect.c
+++ b/source/libsmb/cliconnect.c
@@ -104,7 +104,8 @@ BOOL cli_session_setup(struct cli_state *cli,
/*
* Plaintext mode needed, assume plaintext supplied.
*/
- passlen = clistr_push(cli, pword, pass, -1, STR_CONVERT|STR_TERMINATE);
+ fstrcpy(pword, pass);
+ unix_to_dos(pword,True);
fstrcpy(ntpword, "");
ntpasslen = 0;
}
@@ -123,7 +124,7 @@ BOOL cli_session_setup(struct cli_state *cli,
if (cli->protocol < PROTOCOL_NT1)
{
- set_message(cli->outbuf,10, 0, True);
+ set_message(cli->outbuf,10,1 + strlen(user) + passlen,True);
CVAL(cli->outbuf,smb_com) = SMBsesssetupX;
cli_setup_packet(cli);
@@ -136,20 +137,12 @@ BOOL cli_session_setup(struct cli_state *cli,
p = smb_buf(cli->outbuf);
memcpy(p,pword,passlen);
p += passlen;
- p += clistr_push(cli, p, user, -1, STR_CONVERT|STR_UPPER|STR_TERMINATE);
- cli_setup_bcc(cli, p);
+ pstrcpy(p,user);
+ unix_to_dos(p,True);
+ strupper(p);
}
else
{
- uint32 capabilities;
-
- capabilities = CAP_NT_SMBS;
- if (cli->use_level_II_oplocks) {
- capabilities |= CAP_LEVEL_II_OPLOCKS;
- }
- if (cli->capabilities & CAP_UNICODE) {
- capabilities |= CAP_UNICODE;
- }
set_message(cli->outbuf,13,0,True);
CVAL(cli->outbuf,smb_com) = SMBsesssetupX;
cli_setup_packet(cli);
@@ -161,17 +154,23 @@ BOOL cli_session_setup(struct cli_state *cli,
SIVAL(cli->outbuf,smb_vwv5,cli->sesskey);
SSVAL(cli->outbuf,smb_vwv7,passlen);
SSVAL(cli->outbuf,smb_vwv8,ntpasslen);
- SIVAL(cli->outbuf,smb_vwv11,capabilities);
+ SSVAL(cli->outbuf,smb_vwv11,CAP_NT_SMBS|(cli->use_level_II_oplocks ? CAP_LEVEL_II_OPLOCKS : 0));
p = smb_buf(cli->outbuf);
memcpy(p,pword,passlen);
p += SVAL(cli->outbuf,smb_vwv7);
memcpy(p,ntpword,ntpasslen);
p += SVAL(cli->outbuf,smb_vwv8);
- p += clistr_push(cli, p, user, -1, STR_CONVERT|STR_TERMINATE|STR_UPPER);
- p += clistr_push(cli, p, workgroup, -1, STR_CONVERT|STR_TERMINATE|STR_UPPER);
- p += clistr_push(cli, p, "Unix", -1, STR_CONVERT|STR_TERMINATE);
- p += clistr_push(cli, p, "Samba", -1, STR_CONVERT|STR_TERMINATE);
- cli_setup_bcc(cli, p);
+ pstrcpy(p,user);
+ unix_to_dos(p,True);
+ strupper(p);
+ p = skip_string(p,1);
+ pstrcpy(p,workgroup);
+ unix_to_dos(p,True);
+ strupper(p);
+ p = skip_string(p,1);
+ pstrcpy(p,"Unix");p = skip_string(p,1);
+ pstrcpy(p,"Samba");p = skip_string(p,1);
+ set_message(cli->outbuf,13,PTR_DIFF(p,smb_buf(cli->outbuf)),False);
}
cli_send_smb(cli);
@@ -188,17 +187,24 @@ BOOL cli_session_setup(struct cli_state *cli,
cli->vuid = SVAL(cli->inbuf,smb_uid);
if (cli->protocol >= PROTOCOL_NT1) {
- /*
- * Save off some of the connected server
- * info.
- */
- char *q = smb_buf(cli->inbuf);
- q += clistr_pull(cli, cli->server_os, q, sizeof(fstring), -1, STR_TERMINATE|STR_CONVERT);
- q += clistr_pull(cli, cli->server_type, q, sizeof(fstring), -1, STR_TERMINATE|STR_CONVERT);
- q += clistr_pull(cli, cli->server_domain, q, sizeof(fstring), -1, STR_TERMINATE|STR_CONVERT);
+ /*
+ * Save off some of the connected server
+ * info.
+ */
+ char *server_domain,*server_os,*server_type;
+ server_os = smb_buf(cli->inbuf);
+ server_type = skip_string(server_os,1);
+ server_domain = skip_string(server_type,1);
+ fstrcpy(cli->server_os, server_os);
+ dos_to_unix(cli->server_os, True);
+ fstrcpy(cli->server_type, server_type);
+ dos_to_unix(cli->server_type, True);
+ fstrcpy(cli->server_domain, server_domain);
+ dos_to_unix(cli->server_domain, True);
}
fstrcpy(cli->user_name, user);
+ dos_to_unix(cli->user_name, True);
return True;
}
@@ -251,11 +257,12 @@ BOOL cli_send_tconX(struct cli_state *cli,
unix_to_dos(dos_pword,True);
SMBencrypt((uchar *)dos_pword,(uchar *)cli->cryptkey,(uchar *)pword);
} else {
- if((cli->sec_mode & 3) == 0) {
+ if(!(cli->sec_mode & 2)) {
/*
* Non-encrypted passwords - convert to DOS codepage before using.
*/
- passlen = clistr_push(cli, pword, pass, -1, STR_CONVERT|STR_TERMINATE);
+ fstrcpy(pword,pass);
+ unix_to_dos(pword,True);
} else {
memcpy(pword, pass, passlen);
}
@@ -266,7 +273,8 @@ BOOL cli_send_tconX(struct cli_state *cli,
unix_to_dos(fullshare, True);
strupper(fullshare);
- set_message(cli->outbuf,4, 0, True);
+ set_message(cli->outbuf,4,
+ 2 + strlen(fullshare) + passlen + strlen(dev),True);
CVAL(cli->outbuf,smb_com) = SMBtconX;
cli_setup_packet(cli);
@@ -276,10 +284,10 @@ BOOL cli_send_tconX(struct cli_state *cli,
p = smb_buf(cli->outbuf);
memcpy(p,pword,passlen);
p += passlen;
- p += clistr_push(cli, p, fullshare, -1, STR_CONVERT | STR_TERMINATE);
- fstrcpy(p, dev); p += strlen(dev)+1;
-
- cli_setup_bcc(cli, p);
+ fstrcpy(p,fullshare);
+ p = skip_string(p,1);
+ pstrcpy(p,dev);
+ unix_to_dos(p,True);
SCVAL(cli->inbuf,smb_rcls, 1);
@@ -294,7 +302,7 @@ BOOL cli_send_tconX(struct cli_state *cli,
fstrcpy(cli->dev, "A:");
if (cli->protocol >= PROTOCOL_NT1) {
- clistr_pull(cli, cli->dev, smb_buf(cli->inbuf), sizeof(fstring), -1, STR_TERMINATE | STR_CONVERT);
+ fstrcpy(cli->dev, smb_buf(cli->inbuf));
}
if (strcasecmp(share,"IPC$")==0) {
@@ -339,11 +347,17 @@ void cli_negprot_send(struct cli_state *cli)
{
char *p;
int numprots;
+ int plength;
memset(cli->outbuf,'\0',smb_size);
/* setup the protocol strings */
- set_message(cli->outbuf,0,0,True);
+ for (plength=0,numprots=0;
+ prots[numprots].name && prots[numprots].prot<=cli->protocol;
+ numprots++)
+ plength += strlen(prots[numprots].name)+2;
+
+ set_message(cli->outbuf,0,plength,True);
p = smb_buf(cli->outbuf);
for (numprots=0;
@@ -356,7 +370,6 @@ void cli_negprot_send(struct cli_state *cli)
}
CVAL(cli->outbuf,smb_com) = SMBnegprot;
- cli_setup_bcc(cli, p);
cli_setup_packet(cli);
CVAL(smb_buf(cli->outbuf),0) = 2;
@@ -429,12 +442,6 @@ BOOL cli_negprot(struct cli_state *cli)
cli->readbraw_supported = True;
cli->writebraw_supported = True;
}
- /* work out if they sent us a workgroup */
- if (smb_buflen(cli->inbuf) > 8) {
- clistr_pull(cli, cli->server_domain,
- smb_buf(cli->inbuf)+8, sizeof(cli->server_domain),
- smb_buflen(cli->inbuf)-8, STR_CONVERT|STR_UNICODE|STR_NOALIGN);
- }
} else if (cli->protocol >= PROTOCOL_LANMAN1) {
cli->sec_mode = SVAL(cli->inbuf,smb_vwv1);
cli->max_xmit = SVAL(cli->inbuf,smb_vwv2);
@@ -454,11 +461,6 @@ BOOL cli_negprot(struct cli_state *cli)
cli->max_xmit = MIN(cli->max_xmit, CLI_BUFFER_SIZE);
- /* a way to force ascii SMB */
- if (getenv("CLI_FORCE_ASCII")) {
- cli->capabilities &= ~CAP_UNICODE;
- }
-
return True;
}
@@ -558,6 +560,7 @@ retry:
return(True);
}
+
/****************************************************************************
open the client sockets
****************************************************************************/
@@ -579,12 +582,8 @@ BOOL cli_connect(struct cli_state *cli, const char *host, struct in_addr *ip)
if (cli->port == 0) cli->port = 139; /* Set to default */
- if (getenv("LIBSMB_PROG")) {
- cli->fd = sock_exec(getenv("LIBSMB_PROG"));
- } else {
- cli->fd = open_socket_out(SOCK_STREAM, &cli->dest_ip,
- cli->port, cli->timeout);
- }
+ cli->fd = open_socket_out(SOCK_STREAM, &cli->dest_ip,
+ cli->port, cli->timeout);
if (cli->fd == -1)
return False;
@@ -678,7 +677,7 @@ BOOL cli_establish_connection(struct cli_state *cli,
{
DEBUG(1,("failed session request\n"));
if (do_shutdown)
- cli_shutdown(cli);
+ cli_shutdown(cli);
return False;
}
diff --git a/source/libsmb/clidgram.c b/source/libsmb/clidgram.c
deleted file mode 100644
index fc1453dce14..00000000000
--- a/source/libsmb/clidgram.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 3.0
- client dgram calls
- Copyright (C) Andrew Tridgell 1994-1998
- Copyright (C) Richard Sharpe 2001
- Copyright (C) John Terpstra 2001
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#define NO_SYSLOG
-
-#include "includes.h"
-
-/*
- * cli_send_mailslot, send a mailslot for client code ...
- */
-
-int cli_send_mailslot(int dgram_sock, BOOL unique, char *mailslot,
- char *buf, int len,
- const char *srcname, int src_type,
- const char *dstname, int dest_type,
- struct in_addr dest_ip, struct in_addr src_ip,
- int dest_port, int src_port)
-{
- struct packet_struct p;
- struct dgram_packet *dgram = &p.packet.dgram;
- char *ptr, *p2;
- char tmp[4];
-
- bzero((char *)&p, sizeof(p));
-
- /*
- * Next, build the DGRAM ...
- */
-
- /* DIRECT GROUP or UNIQUE datagram. */
- dgram->header.msg_type = unique ? 0x10 : 0x11;
- dgram->header.flags.node_type = M_NODE;
- dgram->header.flags.first = True;
- dgram->header.flags.more = False;
- dgram->header.dgm_id = ((unsigned)time(NULL)%(unsigned)0x7FFF) + ((unsigned)sys_getpid()%(unsigned)100);
- dgram->header.source_ip.s_addr = src_ip.s_addr;
- /*fprintf(stderr, "Source IP = %0X\n", dgram->header.source_ip); */
- dgram->header.source_port = ntohs(src_port);
- fprintf(stderr, "Source Port = %0X\n", dgram->header.source_port);
- dgram->header.dgm_length = 0; /* Let build_dgram() handle this. */
- dgram->header.packet_offset = 0;
-
- make_nmb_name(&dgram->source_name,srcname,src_type);
- make_nmb_name(&dgram->dest_name,dstname,dest_type);
-
- ptr = &dgram->data[0];
-
- /* Setup the smb part. */
- ptr -= 4; /* XXX Ugliness because of handling of tcp SMB length. */
- memcpy(tmp,ptr,4);
- set_message(ptr,17,17 + len,True);
- memcpy(ptr,tmp,4);
-
- CVAL(ptr,smb_com) = SMBtrans;
- SSVAL(ptr,smb_vwv1,len);
- SSVAL(ptr,smb_vwv11,len);
- SSVAL(ptr,smb_vwv12,70 + strlen(mailslot));
- SSVAL(ptr,smb_vwv13,3);
- SSVAL(ptr,smb_vwv14,1);
- SSVAL(ptr,smb_vwv15,1);
- SSVAL(ptr,smb_vwv16,2);
- p2 = smb_buf(ptr);
- pstrcpy(p2,mailslot);
- p2 = skip_string(p2,1);
-
- memcpy(p2,buf,len);
- p2 += len;
-
- dgram->datasize = PTR_DIFF(p2,ptr+4); /* +4 for tcp length. */
-
- p.ip = dest_ip;
- p.port = dest_port;
- p.fd = dgram_sock;
- p.timestamp = time(NULL);
- p.packet_type = DGRAM_PACKET;
-
- DEBUG(4,("send_mailslot: Sending to mailslot %s from %s IP %s ", mailslot,
- nmb_namestr(&dgram->source_name), inet_ntoa(src_ip)));
- DEBUG(4,("to %s IP %s\n", nmb_namestr(&dgram->dest_name), inet_ntoa(dest_ip)));
-
- return send_packet(&p);
-
-}
-
-/*
- * cli_get_response: Get a response ...
- */
-int cli_get_response(int dgram_sock, BOOL unique, char *mailslot, char *buf, int bufsiz)
-{
- struct packet_struct *packet;
-
- packet = receive_dgram_packet(dgram_sock, 5, mailslot);
-
- if (packet) { /* We got one, pull what we want out of the SMB data ... */
-
- struct dgram_packet *dgram = &packet->packet.dgram;
-
- /*
- * We should probably parse the SMB, but for now, we will pull what
- * from fixed, known locations ...
- */
-
- /* Copy the data to buffer, respecting sizes ... */
-
- bcopy(&dgram->data[92], buf, MIN(bufsiz, (dgram->datasize - 92)));
-
- }
- else
- return -1;
-
- return 0;
-
-}
-
-/*
- * cli_get_backup_list: Send a get backup list request ...
- */
-
-static char cli_backup_list[1024];
-
-int cli_get_backup_list(const char *myname, const char *send_to_name)
-{
- char outbuf[15];
- char *p;
- struct in_addr sendto_ip, my_ip;
- int dgram_sock;
- struct sockaddr_in sock_out;
- socklen_t name_size;
-
- if (!resolve_name(send_to_name, &sendto_ip, 0x1d)) {
-
- DEBUG(0, ("Could not resolve name: %s<1D>\n", send_to_name));
- return False;
-
- }
-
- my_ip.s_addr = inet_addr("0.0.0.0");
-
- if (!resolve_name(myname, &my_ip, 0x00)) { /* FIXME: Call others here */
-
- DEBUG(0, ("Could not resolve name: %s<00>\n", myname));
-
- }
-
- if ((dgram_sock = open_socket_out(SOCK_DGRAM, &sendto_ip, 138, LONG_CONNECT_TIMEOUT)) < 0) {
-
- DEBUG(4, ("open_sock_out failed ..."));
- return False;
-
- }
-
- /* Make it a broadcast socket ... */
-
- set_socket_options(dgram_sock, "SO_BROADCAST");
-
- /* Make it non-blocking??? */
-
- if (fcntl(dgram_sock, F_SETFL, O_NONBLOCK) < 0) {
-
- DEBUG(0, ("Unable to set non blocking on dgram sock\n"));
-
- }
-
- /* Now, bind a local addr to it ... Try port 138 first ... */
-
- bzero((char *)&sock_out, sizeof(sock_out));
- sock_out.sin_addr.s_addr = INADDR_ANY;
- sock_out.sin_port = htons(138);
- sock_out.sin_family = AF_INET;
-
- if (bind(dgram_sock, (struct sockaddr *)&sock_out, sizeof(sock_out)) < 0) {
-
- /* Try again on any port ... */
-
- sock_out.sin_port = INADDR_ANY;
-
- if (bind(dgram_sock, (struct sockaddr *)&sock_out, sizeof(sock_out)) < 0) {
-
- DEBUG(4, ("failed to bind socket to address ...\n"));
- return False;
-
- }
-
- }
-
- /* Now, figure out what socket name we were bound to. We want the port */
-
- name_size = sizeof(sock_out);
-
- getsockname(dgram_sock, (struct sockaddr *)&sock_out, &name_size);
-
- DEBUG(5, ("Socket bound to IP:%s, port: %d\n", inet_ntoa(sock_out.sin_addr), ntohs(sock_out.sin_port)));
-
- /* Now, build the request */
-
- bzero(cli_backup_list, sizeof(cli_backup_list));
- bzero(outbuf, sizeof(outbuf));
-
- p = outbuf;
-
- SCVAL(p, 0, ANN_GetBackupListReq);
- p++;
-
- SCVAL(p, 0, 1); /* Count pointer ... */
- p++;
-
- SIVAL(p, 0, 1); /* The sender's token ... */
- p += 4;
-
- cli_send_mailslot(dgram_sock, True, "\\MAILSLOT\\BROWSE", outbuf,
- PTR_DIFF(p, outbuf), myname, 0, send_to_name,
- 0x1d, sendto_ip, my_ip, 138, sock_out.sin_port);
-
- /* We should check the error and return if we got one */
-
- /* Now, get the response ... */
-
- cli_get_response(dgram_sock, True, "\\MAILSLOT\\BROWSE", cli_backup_list, sizeof(cli_backup_list));
-
- /* Should check the response here ... FIXME */
-
- close(dgram_sock);
-
- return True;
-
-}
-
-/*
- * cli_get_backup_server: Get the backup list and retrieve a server from it
- */
-
-int cli_get_backup_server(char *my_name, char *target, char *servername, int namesize)
-{
-
- /* Get the backup list first. We could pull this from the cache later */
-
- cli_get_backup_list(my_name, target); /* FIXME: Check the response */
-
- if (!cli_backup_list[0]) { /* Empty list ... try again */
-
- cli_get_backup_list(my_name, target);
-
- }
-
- strncpy(servername, cli_backup_list, MIN(16, namesize));
-
- return True;
-
-}
-
-
-
diff --git a/source/libsmb/clientgen.c b/source/libsmb/clientgen.c
index 8d4a025fcc0..19380498063 100644
--- a/source/libsmb/clientgen.c
+++ b/source/libsmb/clientgen.c
@@ -106,23 +106,11 @@ void cli_setup_packet(struct cli_state *cli)
SSVAL(cli->outbuf,smb_uid,cli->vuid);
SSVAL(cli->outbuf,smb_mid,cli->mid);
if (cli->protocol > PROTOCOL_CORE) {
- uint16 flags2;
SCVAL(cli->outbuf,smb_flg,0x8);
- flags2 = FLAGS2_LONG_PATH_COMPONENTS;
- if (cli->capabilities & CAP_UNICODE) {
- flags2 |= FLAGS2_UNICODE_STRINGS;
- }
- SSVAL(cli->outbuf,smb_flg2, flags2);
+ SSVAL(cli->outbuf,smb_flg2,0x1);
}
}
-/****************************************************************************
-setup the bcc length of the packet from a pointer to the end of the data
-****************************************************************************/
-void cli_setup_bcc(struct cli_state *cli, void *p)
-{
- set_message_bcc(cli->outbuf, PTR_DIFF(p, smb_buf(cli->outbuf)));
-}
/****************************************************************************
diff --git a/source/libsmb/clierror.c b/source/libsmb/clierror.c
index 6d499867905..eb2ca624e85 100644
--- a/source/libsmb/clierror.c
+++ b/source/libsmb/clierror.c
@@ -198,12 +198,11 @@ int cli_error(struct cli_state *cli, uint8 *eclass, uint32 *num, uint32 *nt_rpc_
case ERRbadshare: return EBUSY;
case ERRlock: return EBUSY;
case ERROR_INVALID_NAME: return ENOENT;
- case ERRnosuchshare: return ENODEV;
}
}
if (rcls == ERRSRV) {
switch (code) {
- case ERRbadpw: return EPERM;
+ case ERRbadpw: return EACCES;
case ERRaccess: return EACCES;
case ERRnoresource: return ENOMEM;
case ERRinvdevice: return ENODEV;
diff --git a/source/libsmb/clifile.c b/source/libsmb/clifile.c
index 7c5a913c241..63706f7669e 100644
--- a/source/libsmb/clifile.c
+++ b/source/libsmb/clifile.c
@@ -33,7 +33,7 @@ BOOL cli_rename(struct cli_state *cli, char *fname_src, char *fname_dst)
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,1, 0, True);
+ set_message(cli->outbuf,1, 4 + strlen(fname_src) + strlen(fname_dst), True);
CVAL(cli->outbuf,smb_com) = SMBmv;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -43,13 +43,12 @@ BOOL cli_rename(struct cli_state *cli, char *fname_src, char *fname_dst)
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, fname_src, -1,
- STR_TERMINATE | STR_CONVERT);
+ pstrcpy(p,fname_src);
+ unix_to_dos(p,True);
+ p = skip_string(p,1);
*p++ = 4;
- p += clistr_push(cli, p, fname_dst, -1,
- STR_TERMINATE | STR_CONVERT);
-
- cli_setup_bcc(cli, p);
+ pstrcpy(p,fname_dst);
+ unix_to_dos(p,True);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
@@ -73,7 +72,7 @@ BOOL cli_unlink(struct cli_state *cli, char *fname)
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,1, 0,True);
+ set_message(cli->outbuf,1, 2 + strlen(fname),True);
CVAL(cli->outbuf,smb_com) = SMBunlink;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -83,9 +82,9 @@ BOOL cli_unlink(struct cli_state *cli, char *fname)
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, fname, -1, STR_TERMINATE | STR_CONVERT);
+ pstrcpy(p,fname);
+ unix_to_dos(p,True);
- cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
return False;
@@ -108,7 +107,7 @@ BOOL cli_mkdir(struct cli_state *cli, char *dname)
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,0, 0,True);
+ set_message(cli->outbuf,0, 2 + strlen(dname),True);
CVAL(cli->outbuf,smb_com) = SMBmkdir;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -116,9 +115,8 @@ BOOL cli_mkdir(struct cli_state *cli, char *dname)
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, dname, -1, STR_CONVERT|STR_TERMINATE);
-
- cli_setup_bcc(cli, p);
+ pstrcpy(p,dname);
+ unix_to_dos(p,True);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
@@ -142,7 +140,7 @@ BOOL cli_rmdir(struct cli_state *cli, char *dname)
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,0, 0, True);
+ set_message(cli->outbuf,0, 2 + strlen(dname),True);
CVAL(cli->outbuf,smb_com) = SMBrmdir;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -150,9 +148,8 @@ BOOL cli_rmdir(struct cli_state *cli, char *dname)
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, dname, -1, STR_TERMINATE|STR_CONVERT);
-
- cli_setup_bcc(cli, p);
+ pstrcpy(p,dname);
+ unix_to_dos(p,True);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
@@ -186,11 +183,11 @@ int cli_nt_delete_on_close(struct cli_state *cli, int fnum, BOOL flag)
data = flag ? 1 : 0;
if (!cli_send_trans(cli, SMBtrans2,
- NULL, /* name */
- -1, 0, /* fid, flags */
- &setup, 1, 0, /* setup, length, max */
- param, param_len, 2, /* param, length, max */
- &data, data_len, cli->max_xmit /* data, length, max */
+ NULL, 0, /* name, length */
+ -1, 0, /* fid, flags */
+ &setup, 1, 0, /* setup, length, max */
+ param, param_len, 2, /* param, length, max */
+ &data, data_len, cli->max_xmit /* data, length, max */
)) {
return False;
}
@@ -212,17 +209,15 @@ int cli_nt_delete_on_close(struct cli_state *cli, int fnum, BOOL flag)
Used in smbtorture.
****************************************************************************/
-int cli_nt_create_full(struct cli_state *cli, char *fname, uint32 DesiredAccess,
- uint32 FileAttributes, uint32 ShareAccess,
- uint32 CreateDisposition, uint32 CreateOptions)
+int cli_nt_create_full(struct cli_state *cli, char *fname, uint32 DesiredAccess, uint32 FileAttributes,
+ uint32 ShareAccess, uint32 CreateDisposition, uint32 CreateOptions)
{
char *p;
- int len;
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,24,0,True);
+ set_message(cli->outbuf,24,1 + strlen(fname),True);
CVAL(cli->outbuf,smb_com) = SMBntcreateX;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -240,17 +235,12 @@ int cli_nt_create_full(struct cli_state *cli, char *fname, uint32 DesiredAccess,
SIVAL(cli->outbuf,smb_ntcreate_CreateDisposition, CreateDisposition);
SIVAL(cli->outbuf,smb_ntcreate_CreateOptions, CreateOptions);
SIVAL(cli->outbuf,smb_ntcreate_ImpersonationLevel, 0x02);
+ SSVAL(cli->outbuf,smb_ntcreate_NameLength, strlen(fname));
p = smb_buf(cli->outbuf);
- /* this alignment and termination is critical for netapp filers. Don't change */
- p += clistr_align(cli, p, STR_CONVERT);
- len = clistr_push(cli, p, fname, -1, STR_CONVERT);
- p += len;
- SSVAL(cli->outbuf,smb_ntcreate_NameLength, len);
- /* sigh. this copes with broken netapp filer behaviour */
- p += clistr_push(cli, p, "", -1, STR_TERMINATE);
-
- cli_setup_bcc(cli, p);
+ pstrcpy(p,fname);
+ unix_to_dos(p,True);
+ p = skip_string(p,1);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
@@ -267,7 +257,6 @@ int cli_nt_create_full(struct cli_state *cli, char *fname, uint32 DesiredAccess,
/****************************************************************************
open a file
****************************************************************************/
-
int cli_nt_create(struct cli_state *cli, char *fname, uint32 DesiredAccess)
{
return cli_nt_create_full(cli, fname, DesiredAccess, 0,
@@ -276,6 +265,56 @@ int cli_nt_create(struct cli_state *cli, char *fname, uint32 DesiredAccess)
/****************************************************************************
open a file
+****************************************************************************/
+int cli_nt_create_uni(struct cli_state *cli, char *fname, uint32 DesiredAccess)
+{
+ pstring uni;
+ char *p;
+
+ memset(cli->outbuf,'\0',smb_size);
+ memset(cli->inbuf,'\0',smb_size);
+
+ set_message(cli->outbuf,24,(strlen(fname) + 1) * 2 + 1,True);
+
+ CVAL(cli->outbuf,smb_com) = SMBntcreateX;
+ SSVAL(cli->outbuf,smb_tid,cli->cnum);
+ cli_setup_packet(cli);
+
+ SSVAL(cli->outbuf,smb_vwv0,0xFF);
+ if (cli->use_oplocks)
+ SIVAL(cli->outbuf,smb_ntcreate_Flags, REQUEST_OPLOCK|REQUEST_BATCH_OPLOCK);
+ else
+ SIVAL(cli->outbuf,smb_ntcreate_Flags, 0);
+ SIVAL(cli->outbuf,smb_ntcreate_RootDirectoryFid, 0x0);
+ SIVAL(cli->outbuf,smb_ntcreate_DesiredAccess, DesiredAccess);
+ SIVAL(cli->outbuf,smb_ntcreate_FileAttributes, 0x0);
+ SIVAL(cli->outbuf,smb_ntcreate_ShareAccess, 0x03);
+ SIVAL(cli->outbuf,smb_ntcreate_CreateDisposition, 0x01);
+ SIVAL(cli->outbuf,smb_ntcreate_CreateOptions, 0x0);
+ SIVAL(cli->outbuf,smb_ntcreate_ImpersonationLevel, 0x02);
+ SSVAL(cli->outbuf,smb_ntcreate_NameLength, strlen(fname) * 2);
+
+ p = smb_buf(cli->outbuf);
+ p++; /* Alignment */
+ pstrcpy(uni, fname);
+ unix_to_dos(uni, True);
+ dos_struni2(p, uni, (strlen(fname) + 1) * 2);
+
+ cli_send_smb(cli);
+ if (!cli_receive_smb(cli)) {
+ return -1;
+ }
+
+ if (CVAL(cli->inbuf,smb_rcls) != 0) {
+ return -1;
+ }
+
+ return SVAL(cli->inbuf,smb_vwv2 + 1);
+}
+
+
+/****************************************************************************
+open a file
WARNING: if you open with O_WRONLY then getattrE won't work!
****************************************************************************/
int cli_open(struct cli_state *cli, char *fname, int flags, int share_mode)
@@ -314,7 +353,7 @@ int cli_open(struct cli_state *cli, char *fname, int flags, int share_mode)
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,15,0,True);
+ set_message(cli->outbuf,15,1 + strlen(fname),True);
CVAL(cli->outbuf,smb_com) = SMBopenX;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -336,9 +375,9 @@ int cli_open(struct cli_state *cli, char *fname, int flags, int share_mode)
}
p = smb_buf(cli->outbuf);
- p += clistr_push(cli, p, fname, -1, STR_TERMINATE | STR_CONVERT);
-
- cli_setup_bcc(cli, p);
+ pstrcpy(p,fname);
+ unix_to_dos(p,True);
+ p = skip_string(p,1);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
@@ -397,7 +436,7 @@ BOOL cli_lock(struct cli_state *cli, int fnum,
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0', smb_size);
- set_message(cli->outbuf,8,0,True);
+ set_message(cli->outbuf,8,10,True);
CVAL(cli->outbuf,smb_com) = SMBlockingX;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -414,11 +453,6 @@ BOOL cli_lock(struct cli_state *cli, int fnum,
SSVAL(p, 0, cli->pid);
SIVAL(p, 2, offset);
SIVAL(p, 6, len);
-
- p += 10;
-
- cli_setup_bcc(cli, p);
-
cli_send_smb(cli);
cli->timeout = (timeout == -1) ? 0x7FFFFFFF : (timeout + 2*1000);
@@ -447,7 +481,7 @@ BOOL cli_unlock(struct cli_state *cli, int fnum, uint32 offset, uint32 len)
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,8,0,True);
+ set_message(cli->outbuf,8,10,True);
CVAL(cli->outbuf,smb_com) = SMBlockingX;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -464,8 +498,7 @@ BOOL cli_unlock(struct cli_state *cli, int fnum, uint32 offset, uint32 len)
SSVAL(p, 0, cli->pid);
SIVAL(p, 2, offset);
SIVAL(p, 6, len);
- p += 10;
- cli_setup_bcc(cli, p);
+
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
return False;
@@ -495,7 +528,7 @@ BOOL cli_lock64(struct cli_state *cli, int fnum,
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0', smb_size);
- set_message(cli->outbuf,8,0,True);
+ set_message(cli->outbuf,8,20,True);
CVAL(cli->outbuf,smb_com) = SMBlockingX;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -510,11 +543,8 @@ BOOL cli_lock64(struct cli_state *cli, int fnum,
p = smb_buf(cli->outbuf);
SIVAL(p, 0, cli->pid);
- SOFF_T_R(p, 4, offset);
+ SOFF_T_R(p, 0, offset);
SOFF_T_R(p, 12, len);
- p += 20;
-
- cli_setup_bcc(cli, p);
cli_send_smb(cli);
cli->timeout = (timeout == -1) ? 0x7FFFFFFF : (timeout + 2*1000);
@@ -543,7 +573,7 @@ BOOL cli_unlock64(struct cli_state *cli, int fnum, SMB_BIG_UINT offset, SMB_BIG_
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,8,0,True);
+ set_message(cli->outbuf,8,20,True);
CVAL(cli->outbuf,smb_com) = SMBlockingX;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -560,8 +590,7 @@ BOOL cli_unlock64(struct cli_state *cli, int fnum, SMB_BIG_UINT offset, SMB_BIG_
SIVAL(p, 0, cli->pid);
SOFF_T_R(p, 4, offset);
SOFF_T_R(p, 12, len);
- p += 20;
- cli_setup_bcc(cli, p);
+
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
return False;
@@ -640,17 +669,16 @@ BOOL cli_getatr(struct cli_state *cli, char *fname,
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,0,0,True);
+ set_message(cli->outbuf,0,strlen(fname)+2,True);
CVAL(cli->outbuf,smb_com) = SMBgetatr;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
cli_setup_packet(cli);
p = smb_buf(cli->outbuf);
- *p++ = 4;
- p += clistr_push(cli, p, fname, -1, STR_TERMINATE | STR_CONVERT);
-
- cli_setup_bcc(cli, p);
+ *p = 4;
+ pstrcpy(p+1, fname);
+ unix_to_dos(p+1,True);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
@@ -688,7 +716,7 @@ BOOL cli_setatr(struct cli_state *cli, char *fname, uint16 attr, time_t t)
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,8,0,True);
+ set_message(cli->outbuf,8,strlen(fname)+4,True);
CVAL(cli->outbuf,smb_com) = SMBsetatr;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -698,11 +726,11 @@ BOOL cli_setatr(struct cli_state *cli, char *fname, uint16 attr, time_t t)
put_dos_date3(cli->outbuf,smb_vwv1, t);
p = smb_buf(cli->outbuf);
- *p++ = 4;
- p += clistr_push(cli, p, fname, -1, STR_TERMINATE | STR_CONVERT);
- *p++ = 4;
-
- cli_setup_bcc(cli, p);
+ *p = 4;
+ pstrcpy(p+1, fname);
+ unix_to_dos(p+1,True);
+ p = skip_string(p,1);
+ *p = 4;
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
@@ -730,15 +758,14 @@ BOOL cli_chkpath(struct cli_state *cli, char *path)
if (!*path2) *path2 = '\\';
memset(cli->outbuf,'\0',smb_size);
- set_message(cli->outbuf,0,0,True);
+ set_message(cli->outbuf,0,4 + strlen(path2),True);
SCVAL(cli->outbuf,smb_com,SMBchkpth);
SSVAL(cli->outbuf,smb_tid,cli->cnum);
cli_setup_packet(cli);
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, path2, -1, STR_TERMINATE | STR_CONVERT);
-
- cli_setup_bcc(cli, p);
+ safe_strcpy(p,path2,strlen(path2));
+ unix_to_dos(p,True);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
@@ -775,44 +802,3 @@ BOOL cli_dskattr(struct cli_state *cli, int *bsize, int *total, int *avail)
return True;
}
-
-/****************************************************************************
-create and open a temporary file
-****************************************************************************/
-int cli_ctemp(struct cli_state *cli, char *path, char **tmp_path)
-{
- char *p;
-
- memset(cli->outbuf,'\0',smb_size);
- memset(cli->inbuf,'\0',smb_size);
-
- set_message(cli->outbuf,1,strlen(path)+2,True);
-
- CVAL(cli->outbuf,smb_com) = SMBctemp;
- SSVAL(cli->outbuf,smb_tid,cli->cnum);
- cli_setup_packet(cli);
-
- SSVAL(cli->outbuf,smb_vwv0,0);
-
- p = smb_buf(cli->outbuf);
- *p++ = 4;
- p += clistr_push(cli, p, path, -1, STR_TERMINATE | STR_CONVERT);
-
- cli_send_smb(cli);
- if (!cli_receive_smb(cli)) {
- return -1;
- }
-
- if (CVAL(cli->inbuf,smb_rcls) != 0) {
- return -1;
- }
-
- if (tmp_path) {
- pstring path2;
- clistr_pull(cli, path2, smb_buf(cli->inbuf)+1,
- sizeof(path2), -1, STR_TERMINATE | STR_CONVERT);
- *tmp_path = strdup(path2);
- }
-
- return SVAL(cli->inbuf,smb_vwv0);
-}
diff --git a/source/libsmb/clilist.c b/source/libsmb/clilist.c
index a04c691fa49..2e904e06b7d 100644
--- a/source/libsmb/clilist.c
+++ b/source/libsmb/clilist.c
@@ -30,8 +30,7 @@ The length of the structure is returned
The structure of a long filename depends on the info level. 260 is used
by NT and 2 is used by OS/2
****************************************************************************/
-static int interpret_long_filename(struct cli_state *cli,
- int level,char *p,file_info *finfo)
+static int interpret_long_filename(int level,char *p,file_info *finfo)
{
extern file_info def_finfo;
@@ -48,10 +47,8 @@ static int interpret_long_filename(struct cli_state *cli,
finfo->mtime = make_unix_date2(p+12);
finfo->size = IVAL(p,16);
finfo->mode = CVAL(p,24);
- clistr_pull(cli, finfo->name, p+27,
- sizeof(finfo->name),
- -1,
- STR_TERMINATE | STR_CONVERT);
+ pstrcpy(finfo->name,p+27);
+ dos_to_unix(finfo->name,True);
}
return(28 + CVAL(p,26));
@@ -63,10 +60,8 @@ static int interpret_long_filename(struct cli_state *cli,
finfo->mtime = make_unix_date2(p+12);
finfo->size = IVAL(p,16);
finfo->mode = CVAL(p,24);
- clistr_pull(cli, finfo->name, p+31,
- sizeof(finfo->name),
- -1,
- STR_TERMINATE | STR_CONVERT);
+ pstrcpy(finfo->name,p+31);
+ dos_to_unix(finfo->name,True);
}
return(32 + CVAL(p,30));
@@ -79,10 +74,8 @@ static int interpret_long_filename(struct cli_state *cli,
finfo->mtime = make_unix_date2(p+16);
finfo->size = IVAL(p,20);
finfo->mode = CVAL(p,28);
- clistr_pull(cli, finfo->name, p+33,
- sizeof(finfo->name),
- -1,
- STR_TERMINATE | STR_CONVERT);
+ pstrcpy(finfo->name,p+33);
+ dos_to_unix(finfo->name,True);
}
return(SVAL(p,4)+4);
@@ -94,17 +87,15 @@ static int interpret_long_filename(struct cli_state *cli,
finfo->mtime = make_unix_date2(p+16);
finfo->size = IVAL(p,20);
finfo->mode = CVAL(p,28);
- clistr_pull(cli, finfo->name, p+37,
- sizeof(finfo->name),
- -1,
- STR_TERMINATE | STR_CONVERT);
+ pstrcpy(finfo->name,p+37);
+ dos_to_unix(finfo->name,True);
}
return(SVAL(p,4)+4);
case 260: /* NT uses this, but also accepts 2 */
if (finfo) {
int ret = SVAL(p,0);
- int namelen;
+ int namelen, slen;
p += 4; /* next entry offset */
p += 4; /* fileindex */
@@ -131,21 +122,18 @@ static int interpret_long_filename(struct cli_state *cli,
finfo->mode = CVAL(p,0); p += 4;
namelen = IVAL(p,0); p += 4;
p += 4; /* EA size */
- /* slen = SVAL(p, 0); */
+ slen = SVAL(p, 0);
p += 2;
- {
- /* stupid NT bugs. grr */
- int flags = STR_CONVERT;
- if (p[1] == 0 && namelen > 1) flags |= STR_UNICODE;
- clistr_pull(cli, finfo->short_name, p,
- sizeof(finfo->short_name),
- 24, flags);
+ if (p[1] == 0 && slen > 1) {
+ /* NT has stuffed up again */
+ unistr_to_dos(finfo->short_name, p, slen/2);
+ } else {
+ strncpy(finfo->short_name, p, 12);
+ finfo->short_name[12] = 0;
}
p += 24; /* short name? */
- clistr_pull(cli, finfo->name, p,
- sizeof(finfo->name),
- namelen,
- STR_CONVERT);
+ StrnCpy(finfo->name,p,MIN(sizeof(finfo->name)-1,namelen));
+ dos_to_unix(finfo->name,True);
return(ret);
}
return(SVAL(p,0));
@@ -159,11 +147,12 @@ static int interpret_long_filename(struct cli_state *cli,
/****************************************************************************
do a directory listing, calling fn on each file found
****************************************************************************/
-int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
- void (*fn)(file_info *, const char *, void *), void *state)
+int cli_list(struct cli_state *cli,const char *Mask,uint16 attribute,
+ void (*fn)(file_info *, const char *))
{
int max_matches = 512;
- int info_level;
+ /* NT uses 260, OS/2 uses 2. Both accept 1. */
+ int info_level = cli->protocol<PROTOCOL_NT1?1:260;
char *p, *p2;
pstring mask;
file_info finfo;
@@ -181,11 +170,9 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
int param_len, data_len;
uint16 setup;
pstring param;
-
- /* NT uses 260, OS/2 uses 2. Both accept 1. */
- info_level = (cli->capabilities&CAP_NT_SMBS)?260:1;
-
+
pstrcpy(mask,Mask);
+ unix_to_dos(mask,True);
while (ff_eos == 0) {
loop_count++;
@@ -194,6 +181,8 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
break;
}
+ param_len = 12+strlen(mask)+1;
+
if (First) {
setup = TRANSACT2_FINDFIRST;
SSVAL(param,0,attribute); /* attribute */
@@ -201,9 +190,7 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
SSVAL(param,4,4+2); /* resume required + close on end */
SSVAL(param,6,info_level);
SIVAL(param,8,0);
- p = param+12;
- p += clistr_push(cli, param+12, mask, -1,
- STR_TERMINATE | STR_CONVERT);
+ pstrcpy(param+12,mask);
} else {
setup = TRANSACT2_FINDNEXT;
SSVAL(param,0,ff_dir_handle);
@@ -211,15 +198,14 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
SSVAL(param,4,info_level);
SIVAL(param,6,0); /* ff_resume_key */
SSVAL(param,10,8+4+2); /* continue + resume required + close on end */
- p = param+12;
- p += clistr_push(cli, param+12, mask, -1,
- STR_TERMINATE | STR_CONVERT);
- }
+ pstrcpy(param+12,mask);
- param_len = PTR_DIFF(p, param);
+ DEBUG(5,("hand=0x%X ff_lastname=%d mask=%s\n",
+ ff_dir_handle,ff_lastname,mask));
+ }
if (!cli_send_trans(cli, SMBtrans2,
- NULL, /* Name */
+ NULL, 0, /* Name, length */
-1, 0, /* fid, flags */
&setup, 1, 0, /* setup, length, max */
param, param_len, 10, /* param, length, max */
@@ -268,24 +254,19 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
switch(info_level)
{
case 260:
- clistr_pull(cli, mask, p+ff_lastname,
- sizeof(mask),
- data_len-ff_lastname,
- STR_TERMINATE |
- STR_CONVERT);
+ StrnCpy(mask,p+ff_lastname,
+ MIN(sizeof(mask)-1,data_len-ff_lastname));
break;
case 1:
- clistr_pull(cli, mask, p+ff_lastname+1,
- sizeof(mask),
- -1,
- STR_TERMINATE |
- STR_CONVERT);
+ pstrcpy(mask,p + ff_lastname + 1);
break;
}
} else {
pstrcpy(mask,"");
}
+ dos_to_unix(mask, True);
+
/* and add them to the dirlist pool */
dirlist = Realloc(dirlist,dirlist_len + data_len);
@@ -297,7 +278,7 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
/* put in a length for the last entry, to ensure we can chain entries
into the next packet */
for (p2=p,i=0;i<(ff_searchcount-1);i++)
- p2 += interpret_long_filename(cli,info_level,p2,NULL);
+ p2 += interpret_long_filename(info_level,p2,NULL);
SSVAL(p2,0,data_len - PTR_DIFF(p2,p));
/* grab the data for later use */
@@ -318,8 +299,8 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
}
for (p=dirlist,i=0;i<total_received;i++) {
- p += interpret_long_filename(cli,info_level,p,&finfo);
- fn(&finfo, Mask, state);
+ p += interpret_long_filename(info_level,p,&finfo);
+ fn(&finfo, Mask);
}
/* free up the dirlist buffer */
@@ -333,7 +314,7 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
interpret a short filename structure
The length of the structure is returned
****************************************************************************/
-static int interpret_short_filename(struct cli_state *cli, char *p,file_info *finfo)
+static int interpret_short_filename(char *p,file_info *finfo)
{
extern file_info def_finfo;
@@ -345,7 +326,7 @@ static int interpret_short_filename(struct cli_state *cli, char *p,file_info *fi
finfo->ctime = make_unix_date(p+22);
finfo->mtime = finfo->atime = finfo->ctime;
finfo->size = IVAL(p,26);
- clistr_pull(cli, finfo->name, p+30, sizeof(finfo->name), 12, STR_CONVERT|STR_ASCII);
+ pstrcpy(finfo->name,p+30);
if (strcmp(finfo->name, "..") && strcmp(finfo->name, "."))
fstrcpy(finfo->short_name,finfo->name);
@@ -359,7 +340,7 @@ static int interpret_short_filename(struct cli_state *cli, char *p,file_info *fi
but should otherwise not be used
****************************************************************************/
int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
- void (*fn)(file_info *, const char *, void *), void *state)
+ void (*fn)(file_info *, const char *))
{
char *p;
int received = 0;
@@ -379,9 +360,12 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,2,0,True);
+ if (first)
+ set_message(cli->outbuf,2,5 + strlen(mask),True);
+ else
+ set_message(cli->outbuf,2,5 + 21,True);
- CVAL(cli->outbuf,smb_com) = SMBsearch;
+ CVAL(cli->outbuf,smb_com) = SMBffirst;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
cli_setup_packet(cli);
@@ -392,19 +376,21 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, first?mask:"", -1, STR_TERMINATE|STR_CONVERT);
+ if (first)
+ pstrcpy(p,mask);
+ else
+ pstrcpy(p,"");
+ p += strlen(p) + 1;
+
*p++ = 5;
if (first) {
SSVAL(p,0,0);
- p += 2;
} else {
SSVAL(p,0,21);
p += 2;
memcpy(p,status,21);
- p += 21;
}
- cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) break;
@@ -434,7 +420,7 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,2,0,True);
+ set_message(cli->outbuf,2,5 + 21,True);
CVAL(cli->outbuf,smb_com) = SMBfclose;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
cli_setup_packet(cli);
@@ -450,9 +436,7 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
SSVAL(p, 0, 21);
p += 2;
memcpy(p,status,21);
- p += 21;
- cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
DEBUG(0,("Error closing search: %s\n",smb_errstr(cli->inbuf)));
@@ -461,24 +445,10 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
for (p=dirlist,i=0;i<num_received;i++) {
file_info finfo;
- p += interpret_short_filename(cli, p,&finfo);
- fn(&finfo, Mask, state);
+ p += interpret_short_filename(p,&finfo);
+ fn(&finfo, Mask);
}
if (dirlist) free(dirlist);
return(num_received);
}
-
-
-/****************************************************************************
- do a directory listing, calling fn on each file found
- this auto-switches between old and new style
- ****************************************************************************/
-int cli_list(struct cli_state *cli,const char *Mask,uint16 attribute,
- void (*fn)(file_info *, const char *, void *), void *state)
-{
- if (cli->protocol <= PROTOCOL_LANMAN1) {
- return cli_list_old(cli, Mask, attribute, fn, state);
- }
- return cli_list_new(cli, Mask, attribute, fn, state);
-}
diff --git a/source/libsmb/climessage.c b/source/libsmb/climessage.c
index 87f81754599..c15fdbce8c5 100644
--- a/source/libsmb/climessage.c
+++ b/source/libsmb/climessage.c
@@ -41,13 +41,15 @@ BOOL cli_message_start(struct cli_state *cli, char *host, char *username,
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, username, -1,
- STR_TERMINATE|STR_CONVERT);
+ pstrcpy(p,username);
+ unix_to_dos(p,True);
+ p = skip_string(p,1);
*p++ = 4;
- p += clistr_push(cli, p, host, -1,
- STR_TERMINATE|STR_CONVERT);
+ pstrcpy(p,host);
+ unix_to_dos(p,True);
+ p = skip_string(p,1);
- cli_setup_bcc(cli, p);
+ set_message(cli->outbuf,0,PTR_DIFF(p,smb_buf(cli->outbuf)),False);
cli_send_smb(cli);
diff --git a/source/libsmb/clirap.c b/source/libsmb/clirap.c
index 5050caf0732..085b1c35bb9 100644
--- a/source/libsmb/clirap.c
+++ b/source/libsmb/clirap.c
@@ -27,15 +27,18 @@
/****************************************************************************
Call a remote api on an arbitrary pipe. takes param, data and setup buffers.
****************************************************************************/
-BOOL cli_api_pipe(struct cli_state *cli, char *pipe_name,
+BOOL cli_api_pipe(struct cli_state *cli, char *pipe_name, int pipe_name_len,
uint16 *setup, uint32 setup_count, uint32 max_setup_count,
char *params, uint32 param_count, uint32 max_param_count,
char *data, uint32 data_count, uint32 max_data_count,
char **rparam, uint32 *rparam_count,
char **rdata, uint32 *rdata_count)
{
+ if (pipe_name_len == 0)
+ pipe_name_len = strlen(pipe_name);
+
cli_send_trans(cli, SMBtrans,
- pipe_name,
+ pipe_name, pipe_name_len,
0,0, /* fid, flags */
setup, setup_count, max_setup_count,
params, param_count, max_param_count,
@@ -56,8 +59,8 @@ BOOL cli_api(struct cli_state *cli,
char **rdata, int *rdrcnt)
{
cli_send_trans(cli,SMBtrans,
- PIPE_LANMAN, /* Name */
- 0,0, /* fid, flags */
+ PIPE_LANMAN,strlen(PIPE_LANMAN), /* Name, length */
+ 0,0, /* fid, flags */
NULL,0,0, /* Setup, length, max */
param, prcnt, mprcnt, /* Params, length, max */
data, drcnt, mdrcnt /* Data, length, max */
@@ -134,7 +137,7 @@ BOOL cli_NetWkstaUserLogon(struct cli_state *cli,char *user, char *workstation)
/****************************************************************************
call a NetShareEnum - try and browse available connections on a host
****************************************************************************/
-int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32, const char *, void *), void *state)
+int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32, const char *))
{
char *rparam = NULL;
char *rdata = NULL;
@@ -179,12 +182,9 @@ int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32, co
int type = SVAL(p,14);
int comment_offset = IVAL(p,16) & 0xFFFF;
char *cmnt = comment_offset?(rdata+comment_offset-converter):"";
- pstring s1, s2;
-
- pstrcpy(s1, dos_to_unix(sname, False));
- pstrcpy(s2, dos_to_unix(cmnt, False));
-
- fn(s1, type, s2, state);
+ dos_to_unix(sname,True);
+ dos_to_unix(cmnt,True);
+ fn(sname, type, cmnt);
}
} else {
DEBUG(4,("NetShareEnum res=%d\n", res));
@@ -210,8 +210,7 @@ The callback function takes 3 arguments: the machine name, the server type and
the comment.
****************************************************************************/
BOOL cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
- void (*fn)(const char *, uint32, const char *, void *),
- void *state)
+ void (*fn)(const char *, uint32, const char *))
{
char *rparam = NULL;
char *rdata = NULL;
@@ -220,7 +219,7 @@ BOOL cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
pstring param;
int uLevel = 1;
int count = -1;
-
+
/* send a SMBtrans command with api NetServerEnum */
p = param;
SSVAL(p,0,0x68); /* api number */
@@ -229,16 +228,17 @@ BOOL cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
p = skip_string(p,1);
pstrcpy(p,"B16BBDz");
-
+
p = skip_string(p,1);
SSVAL(p,0,uLevel);
SSVAL(p,2,CLI_BUFFER_SIZE);
p += 4;
SIVAL(p,0,stype);
p += 4;
-
- p += clistr_push(cli, p, workgroup, -1,
- STR_TERMINATE | STR_CONVERT | STR_ASCII);
+
+ pstrcpy(p, workgroup);
+ unix_to_dos(p, True);
+ p = skip_string(p,1);
if (cli_api(cli,
param, PTR_DIFF(p,param), 8, /* params, length, max */
@@ -259,15 +259,13 @@ BOOL cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype,
char *sname = p;
int comment_offset = (IVAL(p,22) & 0xFFFF)-converter;
char *cmnt = comment_offset?(rdata+comment_offset):"";
- pstring s1, s2;
-
if (comment_offset < 0 || comment_offset > rdrcnt) continue;
stype = IVAL(p,18) & ~SV_TYPE_LOCAL_LIST_ONLY;
- pstrcpy(s1, dos_to_unix(sname, False));
- pstrcpy(s2, dos_to_unix(cmnt, False));
- fn(s1, stype, s2, state);
+ dos_to_unix(sname, True);
+ dos_to_unix(cmnt, True);
+ fn(sname, stype, cmnt);
}
}
}
@@ -351,7 +349,7 @@ BOOL cli_oem_change_password(struct cli_state *cli, const char *user, const char
data_len = 532;
if (cli_send_trans(cli,SMBtrans,
- PIPE_LANMAN, /* name */
+ PIPE_LANMAN,strlen(PIPE_LANMAN), /* name, length */
0,0, /* fid, flags */
NULL,0,0, /* setup, length, max */
param,param_len,2, /* param, length, max */
@@ -393,19 +391,17 @@ BOOL cli_qpathinfo(struct cli_state *cli, const char *fname,
int count=8;
BOOL ret;
time_t (*date_fn)(void *);
- char *p;
- p = param;
- memset(p, 0, 6);
- SSVAL(p, 0, SMB_INFO_STANDARD);
- p += 6;
- p += clistr_push(cli, p, fname, sizeof(pstring)-6, STR_TERMINATE | STR_CONVERT);
+ param_len = strlen(fname) + 7;
- param_len = PTR_DIFF(p, param);
+ memset(param, 0, param_len);
+ SSVAL(param, 0, SMB_INFO_STANDARD);
+ pstrcpy(&param[6], fname);
+ unix_to_dos(&param[6],True);
do {
ret = (cli_send_trans(cli, SMBtrans2,
- NULL, /* Name */
+ NULL, 0, /* Name, length */
-1, 0, /* fid, flags */
&setup, 1, 0, /* setup, length, max */
param, param_len, 10, /* param, length, max */
@@ -469,18 +465,16 @@ BOOL cli_qpathinfo2(struct cli_state *cli, const char *fname,
uint16 setup = TRANSACT2_QPATHINFO;
pstring param;
char *rparam=NULL, *rdata=NULL;
- char *p;
- p = param;
- memset(p, 0, 6);
- SSVAL(p, 0, SMB_QUERY_FILE_ALL_INFO);
- p += 6;
- p += clistr_push(cli, p, fname, sizeof(pstring)-6, STR_TERMINATE | STR_CONVERT);
+ param_len = strlen(fname) + 7;
- param_len = PTR_DIFF(p, param);
+ memset(param, 0, param_len);
+ SSVAL(param, 0, SMB_QUERY_FILE_ALL_INFO);
+ pstrcpy(&param[6], fname);
+ unix_to_dos(&param[6],True);
if (!cli_send_trans(cli, SMBtrans2,
- NULL, /* name */
+ NULL, 0, /* name, length */
-1, 0, /* fid, flags */
&setup, 1, 0, /* setup, length, max */
param, param_len, 10, /* param, length, max */
@@ -552,7 +546,7 @@ BOOL cli_qfileinfo(struct cli_state *cli, int fnum,
SSVAL(param, 2, SMB_QUERY_FILE_ALL_INFO);
if (!cli_send_trans(cli, SMBtrans2,
- NULL, /* name */
+ NULL, 0, /* name, length */
-1, 0, /* fid, flags */
&setup, 1, 0, /* setup, length, max */
param, param_len, 2, /* param, length, max */
@@ -598,46 +592,3 @@ BOOL cli_qfileinfo(struct cli_state *cli, int fnum,
return True;
}
-/****************************************************************************
-send a qfileinfo call
-****************************************************************************/
-BOOL cli_qfileinfo_test(struct cli_state *cli, int fnum, int level, char *outdata)
-{
- int data_len = 0;
- int param_len = 0;
- uint16 setup = TRANSACT2_QFILEINFO;
- pstring param;
- char *rparam=NULL, *rdata=NULL;
-
- /* if its a win95 server then fail this - win95 totally screws it
- up */
- if (cli->win95) return False;
-
- param_len = 4;
-
- memset(param, 0, param_len);
- SSVAL(param, 0, fnum);
- SSVAL(param, 2, level);
-
- if (!cli_send_trans(cli, SMBtrans2,
- NULL, /* name */
- -1, 0, /* fid, flags */
- &setup, 1, 0, /* setup, length, max */
- param, param_len, 2, /* param, length, max */
- NULL, data_len, cli->max_xmit /* data, length, max */
- )) {
- return False;
- }
-
- if (!cli_receive_trans(cli, SMBtrans2,
- &rparam, &param_len,
- &rdata, &data_len)) {
- return False;
- }
-
- memcpy(outdata, rdata, data_len);
-
- if (rdata) free(rdata);
- if (rparam) free(rparam);
- return True;
-}
diff --git a/source/libsmb/clireadwrite.c b/source/libsmb/clireadwrite.c
index 54d3fd18e3c..86a51da8352 100644
--- a/source/libsmb/clireadwrite.c
+++ b/source/libsmb/clireadwrite.c
@@ -26,8 +26,7 @@
/****************************************************************************
issue a single SMBread and don't wait for a reply
****************************************************************************/
-
-static BOOL cli_issue_read(struct cli_state *cli, int fnum, off_t offset,
+static void cli_issue_read(struct cli_state *cli, int fnum, off_t offset,
size_t size, int i)
{
memset(cli->outbuf,'\0',smb_size);
@@ -46,89 +45,92 @@ static BOOL cli_issue_read(struct cli_state *cli, int fnum, off_t offset,
SSVAL(cli->outbuf,smb_vwv6,size);
SSVAL(cli->outbuf,smb_mid,cli->mid + i);
- return cli_send_smb(cli);
+ cli_send_smb(cli);
}
/****************************************************************************
- Read size bytes at offset offset using SMBreadX.
+ read from a file
****************************************************************************/
-
-ssize_t cli_read(struct cli_state *cli, int fnum, char *buf, off_t offset, size_t size)
+size_t cli_read(struct cli_state *cli, int fnum, char *buf, off_t offset, size_t size)
{
- uint32 ecode;
- uint8 eclass;
char *p;
- int size2;
- int readsize;
- ssize_t total = 0;
-
- if (size == 0)
- return 0;
-
- /*
- * Set readsize to the maximum size we can handle in one readX,
- * rounded down to a multiple of 1024.
- */
-
- readsize = (cli->max_xmit - (smb_size+32)) & ~1023;
- if (readsize > size )
- readsize = size;
+ int total = -1;
+ int issued=0;
+ int received=0;
+/*
+ * There is a problem in this code when mpx is more than one.
+ * for some reason files can get corrupted when being read.
+ * Until we understand this fully I am serializing reads (one
+ * read/one reply) for now. JRA.
+ */
+#if 0
+ int mpx = MAX(cli->max_mux-1, 1);
+#else
+ int mpx = 1;
+#endif
+ int block = (cli->max_xmit - (smb_size+32)) & ~1023;
+ int mid;
+ int blocks = (size + (block-1)) / block;
- while (total < size) {
+ if (size == 0) return 0;
- /* Issue a read and receive a reply */
+ while (received < blocks) {
+ int size2;
- if (!cli_issue_read(cli, fnum, offset, readsize, 0))
- return -1;
+ while (issued - received < mpx && issued < blocks) {
+ int size1 = MIN(block, size-issued*block);
+ cli_issue_read(cli, fnum, offset+issued*block, size1, issued);
+ issued++;
+ }
- if (!cli_receive_smb(cli))
- return -1;
+ if (!cli_receive_smb(cli)) {
+ return total;
+ }
- /*
- * Check for error. Because the client library doesn't support
- * STATUS32, we need to check for and ignore the more data error
- * for pipe support.
- */
+ received++;
+ mid = SVAL(cli->inbuf, smb_mid) - cli->mid;
+ size2 = SVAL(cli->inbuf, smb_vwv5);
- if (cli_error(cli, &eclass, &ecode, NULL) &&
- (eclass != ERRDOS && ecode != ERRmoredata)) {
- return -1;
+ if (CVAL(cli->inbuf,smb_rcls) != 0) {
+ blocks = MIN(blocks, mid-1);
+ continue;
}
- size2 = SVAL(cli->inbuf, smb_vwv5);
+ if (size2 <= 0) {
+ blocks = MIN(blocks, mid-1);
+ /* this distinguishes EOF from an error */
+ total = MAX(total, 0);
+ continue;
+ }
- if (size2 > readsize) {
- DEBUG(5,("server returned more than we wanted!\n"));
+ if (size2 > block) {
+ DEBUG(0,("server returned more than we wanted!\n"));
return -1;
- } else if (size2 < 0) {
- DEBUG(5,("read return < 0!\n"));
+ }
+ if (mid >= issued) {
+ DEBUG(0,("invalid mid from server!\n"));
return -1;
}
-
- /* Copy data into buffer */
-
p = smb_base(cli->inbuf) + SVAL(cli->inbuf,smb_vwv6);
- memcpy(buf + total, p, size2);
- total += size2;
- offset += size2;
+ memcpy(buf+mid*block, p, size2);
- /*
- * If the server returned less than we asked for we're at EOF.
- */
-
- if (size2 < readsize)
- break;
+ total = MAX(total, mid*block + size2);
}
+ while (received < issued) {
+ cli_receive_smb(cli);
+ received++;
+ }
+
return total;
}
+
/****************************************************************************
issue a single SMBwrite and don't wait for a reply
****************************************************************************/
-
-static BOOL cli_issue_write(struct cli_state *cli, int fnum, off_t offset, uint16 mode, char *buf,
+static void cli_issue_write(struct cli_state *cli, int fnum, off_t offset, uint16 mode, char *buf,
size_t size, int i)
{
char *p;
@@ -136,10 +138,7 @@ static BOOL cli_issue_write(struct cli_state *cli, int fnum, off_t offset, uint1
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- if (size > 0xFFFF)
- set_message(cli->outbuf,14,0,True);
- else
- set_message(cli->outbuf,12,0,True);
+ set_message(cli->outbuf,12,size,True);
CVAL(cli->outbuf,smb_com) = SMBwriteX;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -153,19 +152,17 @@ static BOOL cli_issue_write(struct cli_state *cli, int fnum, off_t offset, uint1
SSVAL(cli->outbuf,smb_vwv7,mode);
SSVAL(cli->outbuf,smb_vwv8,(mode & 0x0008) ? size : 0);
- SSVAL(cli->outbuf,smb_vwv9,((size>>16)&1));
SSVAL(cli->outbuf,smb_vwv10,size);
SSVAL(cli->outbuf,smb_vwv11,
smb_buf(cli->outbuf) - smb_base(cli->outbuf));
p = smb_base(cli->outbuf) + SVAL(cli->outbuf,smb_vwv11);
memcpy(p, buf, size);
- cli_setup_bcc(cli, p+size);
SSVAL(cli->outbuf,smb_mid,cli->mid + i);
show_msg(cli->outbuf);
- return cli_send_smb(cli);
+ cli_send_smb(cli);
}
/****************************************************************************
@@ -175,7 +172,6 @@ static BOOL cli_issue_write(struct cli_state *cli, int fnum, off_t offset, uint1
0x0004 use raw named pipe protocol
0x0008 start of message mode named pipe protocol
****************************************************************************/
-
ssize_t cli_write(struct cli_state *cli,
int fnum, uint16 write_mode,
char *buf, off_t offset, size_t size)
@@ -189,39 +185,45 @@ ssize_t cli_write(struct cli_state *cli,
while (received < blocks) {
- while ((issued - received < mpx) && (issued < blocks)) {
+ while ((issued - received < mpx) && (issued < blocks))
+ {
int bsent = issued * block;
int size1 = MIN(block, size - bsent);
- if (!cli_issue_write(cli, fnum, offset + bsent,
+ cli_issue_write(cli, fnum, offset + bsent,
write_mode,
buf + bsent,
- size1, issued))
- return -1;
+ size1, issued);
issued++;
}
if (!cli_receive_smb(cli))
+ {
return bwritten;
+ }
received++;
if (CVAL(cli->inbuf,smb_rcls) != 0)
+ {
break;
+ }
bwritten += SVAL(cli->inbuf, smb_vwv2);
}
while (received < issued && cli_receive_smb(cli))
+ {
received++;
+ }
return bwritten;
}
+
/****************************************************************************
write to a file using a SMBwrite and not bypassing 0 byte writes
****************************************************************************/
-
ssize_t cli_smbwrite(struct cli_state *cli,
int fnum, char *buf, off_t offset, size_t size1)
{
@@ -234,7 +236,7 @@ ssize_t cli_smbwrite(struct cli_state *cli,
memset(cli->outbuf,'\0',smb_size);
memset(cli->inbuf,'\0',smb_size);
- set_message(cli->outbuf,5, 0,True);
+ set_message(cli->outbuf,5, 3 + size,True);
CVAL(cli->outbuf,smb_com) = SMBwrite;
SSVAL(cli->outbuf,smb_tid,cli->cnum);
@@ -247,23 +249,20 @@ ssize_t cli_smbwrite(struct cli_state *cli,
p = smb_buf(cli->outbuf);
*p++ = 1;
- SSVAL(p, 0, size); p += 2;
- memcpy(p, buf, size); p += size;
-
- cli_setup_bcc(cli, p);
+ SSVAL(p, 0, size);
+ memcpy(p+2, buf, size);
- if (!cli_send_smb(cli))
- return -1;
-
- if (!cli_receive_smb(cli))
+ cli_send_smb(cli);
+ if (!cli_receive_smb(cli)) {
return -1;
+ }
- if (CVAL(cli->inbuf,smb_rcls) != 0)
+ if (CVAL(cli->inbuf,smb_rcls) != 0) {
return -1;
+ }
size = SVAL(cli->inbuf,smb_vwv0);
- if (size == 0)
- break;
+ if (size == 0) break;
size1 -= size;
total += size;
@@ -271,3 +270,4 @@ ssize_t cli_smbwrite(struct cli_state *cli,
return total;
}
+
diff --git a/source/libsmb/clisecdesc.c b/source/libsmb/clisecdesc.c
index 69c7d5f73fd..0b52d625131 100644
--- a/source/libsmb/clisecdesc.c
+++ b/source/libsmb/clisecdesc.c
@@ -28,11 +28,12 @@
/****************************************************************************
query the security descriptor for a open file
****************************************************************************/
-SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd, TALLOC_CTX *mem_ctx)
+SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd)
{
char param[8];
char *rparam=NULL, *rdata=NULL;
int rparam_count=0, rdata_count=0;
+ TALLOC_CTX *mem_ctx;
prs_struct pd;
SEC_DESC *psd = NULL;
@@ -57,6 +58,11 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd, TALLOC_CTX *mem_ctx)
goto cleanup;
}
+ if ((mem_ctx = talloc_init()) == NULL) {
+ DEBUG(0,("talloc_init failed.\n"));
+ goto cleanup;
+ }
+
prs_init(&pd, rdata_count, mem_ctx, UNMARSHALL);
prs_append_data(&pd, rdata, rdata_count);
pd.data_offset = 0;
@@ -68,6 +74,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd, TALLOC_CTX *mem_ctx)
cleanup:
+ talloc_destroy(mem_ctx);
safe_free(rparam);
safe_free(rdata);
@@ -75,6 +82,9 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd, TALLOC_CTX *mem_ctx)
return psd;
}
+
+
+
/****************************************************************************
set the security descriptor for a open file
****************************************************************************/
@@ -133,3 +143,4 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd)
prs_mem_free(&pd);
return ret;
}
+
diff --git a/source/libsmb/clistr.c b/source/libsmb/clistr.c
deleted file mode 100644
index 762a24c22ca..00000000000
--- a/source/libsmb/clistr.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 3.0
- client string routines
- Copyright (C) Andrew Tridgell 2001
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#define NO_SYSLOG
-
-#include "includes.h"
-
-#define UNICODE_FLAG(cli, flags) (!(flags & STR_ASCII) && \
- ((flags & STR_UNICODE || \
- (SVAL(cli->outbuf, smb_flg2) & FLAGS2_UNICODE_STRINGS))))
-
-/****************************************************************************
-copy a string from a char* src to a unicode or ascii
-dos code page destination choosing unicode or ascii based on the
-cli->capabilities flag
-return the number of bytes occupied by the string in the destination
-flags can have:
- STR_TERMINATE means include the null termination
- STR_CONVERT means convert from unix to dos codepage
- STR_UPPER means uppercase in the destination
- STR_ASCII use ascii even with unicode servers
- STR_NOALIGN means don't do alignment
-dest_len is the maximum length allowed in the destination. If dest_len
-is -1 then no maxiumum is used
-****************************************************************************/
-int clistr_push(struct cli_state *cli, void *dest, const char *src, int dest_len, int flags)
-{
- int len=0;
-
- /* treat a pstring as "unlimited" length */
- if (dest_len == -1) {
- dest_len = sizeof(pstring);
- }
-
- if (clistr_align(cli, dest, flags)) {
- *(char *)dest = 0;
- dest = (void *)((char *)dest + 1);
- dest_len--;
- len++;
- }
-
- if (!UNICODE_FLAG(cli, flags)) {
- /* the server doesn't want unicode */
- safe_strcpy(dest, src, dest_len);
- len = strlen(dest);
- if (flags & STR_TERMINATE) len++;
- if (flags & STR_CONVERT) unix_to_dos(dest,True);
- if (flags & STR_UPPER) strupper(dest);
- return len;
- }
-
- /* the server likes unicode. give it the works */
- if (flags & STR_CONVERT) {
- dos_PutUniCode(dest, src, dest_len, flags & STR_TERMINATE);
- } else {
- ascii_to_unistr(dest, src, dest_len);
- }
- if (flags & STR_UPPER) {
- strupper_w(dest);
- }
- len += strlen(src)*2;
- if (flags & STR_TERMINATE) len += 2;
- return len;
-}
-
-/****************************************************************************
-copy a string from a unicode or ascii source (depending on
-cli->capabilities) to a char* destination
-flags can have:
- STR_CONVERT means convert from dos to unix codepage
- STR_TERMINATE means the string in src is null terminated
- STR_UNICODE means to force as unicode
- STR_NOALIGN means don't do alignment
-if STR_TERMINATE is set then src_len is ignored
-src_len is the length of the source area in bytes
-return the number of bytes occupied by the string in src
-****************************************************************************/
-int clistr_pull(struct cli_state *cli, char *dest, const void *src, int dest_len, int src_len, int flags)
-{
- int len;
-
- if (dest_len == -1) {
- dest_len = sizeof(pstring);
- }
-
- if (clistr_align(cli, src, flags)) {
- src = (const void *)((const char *)src + 1);
- if (src_len > 0) src_len--;
- }
-
- if (!UNICODE_FLAG(cli, flags)) {
- /* the server doesn't want unicode */
- if (flags & STR_TERMINATE) {
- safe_strcpy(dest, src, dest_len);
- len = strlen(src)+1;
- } else {
- if (src_len > dest_len) src_len = dest_len;
- len = src_len;
- memcpy(dest, src, len);
- dest[len] = 0;
- }
- if (flags & STR_CONVERT)
- safe_strcpy(dest,dos_to_unix(dest,False),dest_len);
- return len;
- }
-
- if (flags & STR_TERMINATE) {
- unistr_to_ascii(dest, src, dest_len);
- len = strlen(dest)*2 + 2;
- } else {
- int i, c;
- if (dest_len*2 < src_len) src_len = 2*dest_len;
- for (i=0; i < src_len; i += 2) {
- c = SVAL(src, i);
- *dest++ = c;
- }
- *dest++ = 0;
- len = src_len;
- }
- if (flags & STR_CONVERT)
- safe_strcpy(dest,dos_to_unix(dest,False),dest_len);
- return len;
-}
-
-
-/****************************************************************************
-return an alignment of either 0 or 1
-if unicode is not negotiated then return 0
-otherwise return 1 if offset is off
-****************************************************************************/
-int clistr_align(struct cli_state *cli, const void *p, int flags)
-{
- if ((flags & STR_NOALIGN) || !UNICODE_FLAG(cli, flags)) return 0;
- return PTR_DIFF(p, cli->outbuf) & 1;
-}
diff --git a/source/libsmb/clitrans.c b/source/libsmb/clitrans.c
index d21d179126a..5cd6ae30ce0 100644
--- a/source/libsmb/clitrans.c
+++ b/source/libsmb/clitrans.c
@@ -28,7 +28,7 @@
send a SMB trans or trans2 request
****************************************************************************/
BOOL cli_send_trans(struct cli_state *cli, int trans,
- char *pipe_name,
+ char *name, int pipe_name_len,
int fid, int flags,
uint16 *setup, int lsetup, int msetup,
char *param, int lparam, int mparam,
@@ -39,7 +39,6 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
int tot_data=0,tot_param=0;
char *outdata,*outparam;
char *p;
- int pipe_name_len=0;
this_lparam = MIN(lparam,cli->max_xmit - (500+lsetup*2)); /* hack */
this_ldata = MIN(ldata,cli->max_xmit - (500+lsetup*2+this_lparam));
@@ -50,11 +49,7 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
SSVAL(cli->outbuf,smb_tid, cli->cnum);
cli_setup_packet(cli);
- if (pipe_name) {
- pipe_name_len = clistr_push(cli, smb_buf(cli->outbuf), pipe_name, -1, STR_TERMINATE);
- }
-
- outparam = smb_buf(cli->outbuf)+(trans==SMBtrans ? pipe_name_len : 3);
+ outparam = smb_buf(cli->outbuf)+(trans==SMBtrans ? pipe_name_len+1 : 3);
outdata = outparam+this_lparam;
/* primary request */
@@ -73,7 +68,9 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
for (i=0;i<lsetup;i++) /* setup[] */
SSVAL(cli->outbuf,smb_setup+i*2,setup[i]);
p = smb_buf(cli->outbuf);
- if (trans != SMBtrans) {
+ if (trans==SMBtrans) {
+ memcpy(p,name, pipe_name_len + 1); /* name[] */
+ } else {
*p++ = 0; /* put in a null smb_name */
*p++ = 'D'; *p++ = ' '; /* observed in OS/2 */
}
@@ -81,7 +78,8 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
memcpy(outparam,param,this_lparam);
if (this_ldata) /* data[] */
memcpy(outdata,data,this_ldata);
- cli_setup_bcc(cli, outdata+this_ldata);
+ set_message(cli->outbuf,14+lsetup, /* wcnt, bcc */
+ PTR_DIFF(outdata+this_ldata,smb_buf(cli->outbuf)),False);
show_msg(cli->outbuf);
cli_send_smb(cli);
@@ -121,7 +119,8 @@ BOOL cli_send_trans(struct cli_state *cli, int trans,
memcpy(outparam,param+tot_param,this_lparam);
if (this_ldata) /* data[] */
memcpy(outdata,data+tot_data,this_ldata);
- cli_setup_bcc(cli, outdata+this_ldata);
+ set_message(cli->outbuf,trans==SMBtrans?8:9, /* wcnt, bcc */
+ PTR_DIFF(outdata+this_ldata,smb_buf(cli->outbuf)),False);
show_msg(cli->outbuf);
cli_send_smb(cli);
@@ -289,7 +288,8 @@ BOOL cli_send_nt_trans(struct cli_state *cli,
if (this_ldata) /* data[] */
memcpy(outdata,data,this_ldata);
- cli_setup_bcc(cli, outdata+this_ldata);
+ set_message(cli->outbuf,19+lsetup, /* wcnt, bcc */
+ PTR_DIFF(outdata+this_ldata,smb_buf(cli->outbuf)),False);
show_msg(cli->outbuf);
cli_send_smb(cli);
@@ -328,7 +328,8 @@ BOOL cli_send_nt_trans(struct cli_state *cli,
memcpy(outparam,param+tot_param,this_lparam);
if (this_ldata) /* data[] */
memcpy(outdata,data+tot_data,this_ldata);
- cli_setup_bcc(cli, outdata+this_ldata);
+ set_message(cli->outbuf,18,
+ PTR_DIFF(outdata+this_ldata,smb_buf(cli->outbuf)),False);
show_msg(cli->outbuf);
cli_send_smb(cli);
diff --git a/source/libsmb/libsmbclient.c b/source/libsmb/libsmbclient.c
deleted file mode 100644
index 40625f5bbcd..00000000000
--- a/source/libsmb/libsmbclient.c
+++ /dev/null
@@ -1,2520 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 2.0
- SMB client library implementation
- Copyright (C) Andrew Tridgell 1998
- Copyright (C) Richard Sharpe 2000
- Copyright (C) John Terpstra 2000
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "includes.h"
-#include "libsmbclient.h"
-
-/* Structure for servers ... Held here so we don't need an include ...
- * May be better to put in an include file
- */
-
-struct smbc_server {
- struct smbc_server *next, *prev;
- struct cli_state cli;
- dev_t dev;
- char *server_name;
- char *share_name;
- char *workgroup;
- char *username;
- BOOL no_pathinfo2;
-};
-
-/* Keep directory entries in a list */
-struct smbc_dir_list {
- struct smbc_dir_list *next;
- struct smbc_dirent *dirent;
-};
-
-struct smbc_file {
- int cli_fd;
- int smbc_fd;
- char *fname;
- off_t offset;
- struct smbc_server *srv;
- BOOL file;
- struct smbc_dir_list *dir_list, *dir_end, *dir_next;
- int dir_type, dir_error;
-};
-
-int smbc_fstatdir(int fd, struct stat *st); /* Forward decl */
-BOOL smbc_getatr(struct smbc_server *srv, char *path,
- uint16 *mode, size_t *size,
- time_t *c_time, time_t *a_time, time_t *m_time,
- SMB_INO_T *ino);
-
-extern BOOL in_client;
-static int smbc_initialized = 0;
-static smbc_get_auth_data_fn smbc_auth_fn = NULL;
-/*static int smbc_debug;*/
-static int smbc_start_fd;
-static int smbc_max_fd = 10000;
-static struct smbc_file **smbc_file_table;
-static struct smbc_server *smbc_srvs;
-static pstring my_netbios_name;
-static pstring smbc_user;
-
-/*
- * Function to parse a path and turn it into components
- *
- * We accept smb://[[[domain;]user[:password@]]server[/share[/path[/file]]]]
- *
- * smb:// means show all the workgroups
- * smb://name/ means, if name<1D> exists, list servers in workgroup,
- * else, if name<20> exists, list all shares for server ...
- */
-
-static const char *smbc_prefix = "smb:";
-
-static int
-smbc_parse_path(const char *fname, char *server, char *share, char *path,
- char *user, char *password) /* FIXME, lengths of strings */
-{
- static pstring s;
- pstring userinfo;
- char *p;
- int len;
-
- server[0] = share[0] = path[0] = user[0] = password[0] = (char)0;
- pstrcpy(s, fname);
-
- /* clean_fname(s); causing problems ... */
-
- /* see if it has the right prefix */
- len = strlen(smbc_prefix);
- if (strncmp(s,smbc_prefix,len) ||
- (s[len] != '/' && s[len] != 0)) return -1; /* What about no smb: ? */
-
- p = s + len;
-
- /* Watch the test below, we are testing to see if we should exit */
-
- if (strncmp(p, "//", 2) && strncmp(p, "\\\\", 2)) {
-
- return -1;
-
- }
-
- p += 2; /* Skip the // or \\ */
-
- if (*p == (char)0)
- return 0;
-
- if (*p == '/') {
-
- strncpy(server, lp_workgroup(), 16); /* FIXME: Danger here */
- return 0;
-
- }
-
- /*
- * ok, its for us. Now parse out the server, share etc.
- *
- * However, we want to parse out [[domain;]user[:password]@] if it
- * exists ...
- */
-
- if (strchr(p, '@')) {
- pstring username, passwd, domain;
- char *u = userinfo;
-
- next_token(&p, userinfo, "@", sizeof(fstring));
-
- username[0] = passwd[0] = domain[0] = 0;
-
- if (strchr(u, ';')) {
-
- next_token(&u, domain, ";", sizeof(fstring));
-
- }
-
- if (strchr(u, ':')) {
-
- next_token(&u, username, ":", sizeof(fstring));
-
- pstrcpy(passwd, u);
-
- }
- else {
-
- pstrcpy(username, u);
-
- }
-
- if (username[0])
- strncpy(user, username, sizeof(fstring)); /* FIXME, size and domain */
-
- if (passwd[0])
- strncpy(password, passwd, sizeof(fstring)); /* FIXME, size */
-
- }
-
- if (!next_token(&p, server, "/", sizeof(fstring))) {
-
- return -1;
-
- }
-
- if (*p == (char)0) return 0; /* That's it ... */
-
- if (!next_token(&p, share, "/", sizeof(fstring))) {
-
- return -1;
-
- }
-
- pstrcpy(path, p);
-
- all_string_sub(path, "/", "\\", 0);
-
- return 0;
-}
-
-/*
- * Convert an SMB error into a UNIX error ...
- */
-
-int smbc_errno(struct cli_state *c)
-{
- uint8 eclass;
- uint32 ecode;
- int ret;
-
- ret = cli_error(c, &eclass, &ecode, NULL);
-
- if (ret) {
- DEBUG(3,("smbc_error %d %d (0x%x) -> %d\n",
- (int)eclass, (int)ecode, (int)ecode, ret));
- }
- return ret;
-}
-
-/*
- * Connect to a server, possibly on an existing connection
- *
- * Here, what we want to do is: If the server and username
- * match an existing connection, reuse that, otherwise, establish a
- * new connection.
- *
- * If we have to create a new connection, call the auth_fn to get the
- * info we need, unless the username and password were passed in.
- */
-
-struct smbc_server *smbc_server(char *server, char *share,
- char *workgroup, char *username,
- char *password)
-{
- struct smbc_server *srv=NULL;
- struct cli_state c;
- struct nmb_name called, calling;
- char *p, *server_n = server;
- fstring group;
- pstring ipenv;
- struct in_addr ip;
- extern struct in_addr ipzero;
-
- ip = ipzero;
- ZERO_STRUCT(c);
-
- /* try to use an existing connection */
- for (srv=smbc_srvs;srv;srv=srv->next) {
- if (strcmp(server,srv->server_name)==0 &&
- strcmp(share,srv->share_name)==0 &&
- strcmp(workgroup,srv->workgroup)==0 &&
- strcmp(username, srv->username) == 0)
- return srv;
- }
-
- if (server[0] == 0) {
- errno = EPERM;
- return NULL;
- }
-
- /*
- * Pick up the auth info here, once we know we need to connect
- * But only if we do not have a username and password ...
- */
-
- if (!username[0] || !password[0])
- smbc_auth_fn(server, share, workgroup, sizeof(fstring),
- username, sizeof(fstring), password, sizeof(fstring));
-
- /*
- * However, smbc_auth_fn may have picked up info relating to an
- * existing connection, so try for an existing connection again ...
- */
-
- for (srv=smbc_srvs;srv;srv=srv->next) {
- if (strcmp(server,srv->server_name)==0 &&
- strcmp(share,srv->share_name)==0 &&
- strcmp(workgroup,srv->workgroup)==0 &&
- strcmp(username, srv->username) == 0)
- return srv;
- }
-
- make_nmb_name(&calling, my_netbios_name, 0x0);
- make_nmb_name(&called , server, 0x20);
-
- DEBUG(4,("smbc_server: server_n=[%s] server=[%s]\n", server_n, server));
-
- if ((p=strchr(server_n,'#')) &&
- (strcmp(p+1,"1D")==0 || strcmp(p+1,"01")==0)) {
-
- fstrcpy(group, server_n);
- p = strchr(group,'#');
- *p = 0;
-
- }
-
- DEBUG(4,(" -> server_n=[%s] server=[%s]\n", server_n, server));
-
- again:
- slprintf(ipenv,sizeof(ipenv)-1,"HOST_%s", server_n);
-
- ip = ipzero;
-
- /* have to open a new connection */
- if (!cli_initialise(&c) || !cli_connect(&c, server_n, &ip)) {
- errno = ENOENT;
- return NULL;
- }
-
- if (!cli_session_request(&c, &calling, &called)) {
- cli_shutdown(&c);
- if (strcmp(called.name, "*SMBSERVER")) {
- make_nmb_name(&called , "*SMBSERVER", 0x20);
- goto again;
- }
- errno = ENOENT;
- return NULL;
- }
-
- DEBUG(4,(" session request ok\n"));
-
- if (!cli_negprot(&c)) {
- cli_shutdown(&c);
- errno = ENOENT;
- return NULL;
- }
-
- if (!cli_session_setup(&c, username,
- password, strlen(password),
- password, strlen(password),
- workgroup) &&
- /* try an anonymous login if it failed */
- !cli_session_setup(&c, "", "", 1,"", 0, workgroup)) {
- cli_shutdown(&c);
- errno = EPERM;
- return NULL;
- }
-
- DEBUG(4,(" session setup ok\n"));
-
- if (!cli_send_tconX(&c, share, "?????",
- password, strlen(password)+1)) {
- errno = smbc_errno(&c);
- cli_shutdown(&c);
- return NULL;
- }
-
- DEBUG(4,(" tconx ok\n"));
-
- srv = (struct smbc_server *)malloc(sizeof(*srv));
- if (!srv) {
- errno = ENOMEM;
- goto failed;
- }
-
- ZERO_STRUCTP(srv);
-
- srv->cli = c;
-
- srv->dev = (dev_t)(str_checksum(server) ^ str_checksum(share));
-
- srv->server_name = strdup(server);
- if (!srv->server_name) {
- errno = ENOMEM;
- goto failed;
- }
-
- srv->share_name = strdup(share);
- if (!srv->share_name) {
- errno = ENOMEM;
- goto failed;
- }
-
- srv->workgroup = strdup(workgroup);
- if (!srv->workgroup) {
- errno = ENOMEM;
- goto failed;
- }
-
- srv->username = strdup(username);
- if (!srv->username) {
- errno = ENOMEM;
- goto failed;
- }
-
- DLIST_ADD(smbc_srvs, srv);
-
- return srv;
-
- failed:
- cli_shutdown(&c);
- if (!srv) return NULL;
-
- if (srv->server_name) free(srv->server_name);
- if (srv->share_name) free(srv->share_name);
- free(srv);
- return NULL;
-}
-
-/*
- *Initialise the library etc
- *
- * We accept valiv values for debug from 0 to 100,
- * and insist that fn must be non-null.
- */
-
-int smbc_init(smbc_get_auth_data_fn fn, int debug)
-{
- pstring conf;
- int p, pid;
- char *user = NULL, *home = NULL, *pname="libsmbclient";
-
- /*
- * Next lot ifdef'd out until test suite fixed ...
- */
-
- if (!fn || debug < 0 || debug > 100) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (smbc_initialized) { /* Already done, so don't do it again */
-
- return 0;
-
- }
-
-
- smbc_initialized = 1;
- smbc_auth_fn = fn;
- /* smbc_debug = debug; */
-
- DEBUGLEVEL = -1;
-
- setup_logging(pname, False);
-
- /*
- * We try to construct our netbios name from our hostname etc
- */
-
- user = getenv("USER");
- if (!user) user = ""; /* FIXME: What to do about this? */
-
- /*
- * FIXME: Is this the best way to get the user info? */
-
- pstrcpy(smbc_user, user); /* Save for use elsewhere */
-
- pid = getpid();
-
- /*
- * Hmmm, I want to get hostname as well, but I am too lazy for the moment
- */
-
- slprintf(my_netbios_name, 16, "smbc%s%d", user, pid);
-
- charset_initialise();
-
- /* Here we would open the smb.conf file if needed ... */
-
- home = getenv("HOME");
-
- slprintf(conf, sizeof(conf), "%s/.smb/smb.conf", home);
-
- load_interfaces(); /* Load the list of interfaces ... */
-
- in_client = True; /* FIXME, make a param */
-
- if (!lp_load(conf, True, False, False)) {
-
- /*
- * Hmmm, what the hell do we do here ... we could not parse the
- * config file ... We must return an error ... and keep info around
- * about why we failed
- */
-
- errno = ENOENT; /* FIXME: Figure out the correct error response */
- return -1;
-
- }
-
- codepage_initialise(lp_client_code_page()); /* Get a codepage */
-
- reopen_logs(); /* Get logging working ... */
-
- name_register_wins(my_netbios_name, 0);
-
- /*
- * Now initialize the file descriptor array and figure out what the
- * max open files is, so we can return FD's that are above the max
- * open file, and separated by a guard band
- */
-
-#if (defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE))
- do {
- struct rlimit rlp;
-
- if (getrlimit(RLIMIT_NOFILE, &rlp)) {
-
- DEBUG(0, ("smbc_init: getrlimit(1) for RLIMIT_NOFILE failed with error %s\n", strerror(errno)));
-
- smbc_start_fd = 1000000;
- smbc_max_fd = 10000; /* FIXME, should be a define ... */
-
- }
- else {
-
- smbc_start_fd = rlp.rlim_max + 10000; /* Leave a guard space of 10,000 */
- smbc_max_fd = 10000;
-
- }
- } while ( 0 );
-#else /* !defined(HAVE_GETRLIMIT) || !defined(RLIMIT_NOFILE) */
-
- smbc_start_fd = 1000000;
- smbc_max_fd = 10000; /* FIXME, should be a define ... */
-
-#endif
-
- smbc_file_table = malloc(smbc_max_fd * sizeof(struct smbc_file *));
-
- for (p = 0; p < smbc_max_fd; p++)
- smbc_file_table[p] = NULL;
-
- if (!smbc_file_table)
- return ENOMEM;
-
- return 0; /* Success */
-
-}
-
-/*
- * Routine to open() a file ...
- */
-
-int smbc_open(const char *fname, int flags, mode_t mode)
-{
- fstring server, share, user, password;
- pstring path;
- struct smbc_server *srv = NULL;
- int fd;
-
- if (!smbc_initialized) {
-
- errno = EINVAL; /* Best I can think of ... */
- return -1;
-
- }
-
- if (!fname) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- smbc_parse_path(fname, server, share, path, user, password); /* FIXME, check errors */
-
- if (user[0] == (char)0) pstrcpy(user, smbc_user);
-
- srv = smbc_server(server, share, lp_workgroup(), user, password);
-
- if (!srv) {
-
- if (errno == EPERM) errno = EACCES;
- return -1; /* smbc_server sets errno */
-
- }
-
- /* Hmmm, the test for a directory is suspect here ... FIXME */
-
- if (strlen(path) > 0 && path[strlen(path) - 1] == '\\') {
-
- fd = -1;
-
- }
- else {
-
- int slot = 0;
-
- /* Find a free slot first */
-
- while (smbc_file_table[slot])
- slot++;
-
- if (slot > smbc_max_fd) {
-
- errno = ENOMEM; /* FIXME, is this best? */
- return -1;
-
- }
-
- smbc_file_table[slot] = malloc(sizeof(struct smbc_file));
-
- if (!smbc_file_table[slot]) {
-
- errno = ENOMEM;
- return -1;
-
- }
-
- if ((fd = cli_open(&srv->cli, path, flags, DENY_NONE)) < 0) {
-
- /* Handle the error ... */
-
- free(smbc_file_table[slot]);
- smbc_file_table[slot] = NULL;
- errno = smbc_errno(&srv->cli);
- return -1;
-
- }
-
- /* Fill in file struct */
-
- smbc_file_table[slot]->cli_fd = fd;
- smbc_file_table[slot]->smbc_fd = slot + smbc_start_fd;
- smbc_file_table[slot]->fname = strdup(fname);
- smbc_file_table[slot]->srv = srv;
- smbc_file_table[slot]->offset = 0;
- smbc_file_table[slot]->file = True;
-
- return smbc_file_table[slot]->smbc_fd;
-
- }
-
- /* Check if opendir needed ... */
-
- if (fd == -1) {
- int eno = 0;
-
- eno = smbc_errno(&srv->cli);
- fd = smbc_opendir(fname);
- if (fd < 0) errno = eno;
- return fd;
-
- }
-
- return 1; /* Success, with fd ... */
-
-}
-
-/*
- * Routine to create a file
- */
-
-static int creat_bits = O_WRONLY | O_CREAT | O_TRUNC; /* FIXME: Do we need this */
-
-int smbc_creat(const char *path, mode_t mode)
-{
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- return smbc_open(path, creat_bits, mode);
-}
-
-/*
- * Routine to read() a file ...
- */
-
-ssize_t smbc_read(int fd, void *buf, size_t count)
-{
- struct smbc_file *fe;
- int ret;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- DEBUG(4, ("smbc_read(%d, %d)\n", fd, (int)count));
-
- if (fd < smbc_start_fd || fd >= (smbc_start_fd + smbc_max_fd)) {
-
- errno = EBADF;
- return -1;
-
- }
-
- /* Check that the buffer exists ... */
-
- if (buf == NULL) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- fe = smbc_file_table[fd - smbc_start_fd];
-
- if (!fe || !fe->file) {
-
- errno = EBADF;
- return -1;
-
- }
-
- ret = cli_read(&fe->srv->cli, fe->cli_fd, buf, fe->offset, count);
-
- if (ret < 0) {
-
- errno = smbc_errno(&fe->srv->cli);
- return -1;
-
- }
-
- fe->offset += ret;
-
- DEBUG(4, (" --> %d\n", ret));
-
- return ret; /* Success, ret bytes of data ... */
-
-}
-
-/*
- * Routine to write() a file ...
- */
-
-ssize_t smbc_write(int fd, void *buf, size_t count)
-{
- int ret;
- struct smbc_file *fe;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (fd < smbc_start_fd || fd >= (smbc_start_fd + smbc_max_fd)) {
-
- errno = EBADF;
- return -1;
-
- }
-
- /* Check that the buffer exists ... */
-
- if (buf == NULL) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- fe = smbc_file_table[fd - smbc_start_fd];
-
- if (!fe || !fe->file) {
-
- errno = EBADF;
- return -1;
-
- }
-
- ret = cli_write(&fe->srv->cli, fe->cli_fd, 0, buf, fe->offset, count);
-
- if (ret <= 0) {
-
- errno = smbc_errno(&fe->srv->cli);
- return -1;
-
- }
-
- fe->offset += ret;
-
- return ret; /* Success, 0 bytes of data ... */
-}
-
-/*
- * Routine to close() a file ...
- */
-
-int smbc_close(int fd)
-{
- struct smbc_file *fe;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (fd < smbc_start_fd || fd >= (smbc_start_fd + smbc_max_fd)) {
-
- errno = EBADF;
- return -1;
-
- }
-
- fe = smbc_file_table[fd - smbc_start_fd];
-
- if (!fe) {
-
- errno = EBADF;
- return -1;
-
- }
-
- if (!fe->file) {
-
- return smbc_closedir(fd);
-
- }
-
- if (!cli_close(&fe->srv->cli, fe->cli_fd)) {
-
- errno = smbc_errno(&fe->srv->cli); /* FIXME, should we deallocate slot? */
- return -1;
-
- }
-
- if (fe->fname) free(fe->fname);
- free(fe);
- smbc_file_table[fd - smbc_start_fd] = NULL;
-
- return 0;
-}
-
-/*
- * Routine to unlink() a file
- */
-
-int smbc_unlink(const char *fname)
-{
- fstring server, share, user, password;
- pstring path;
- struct smbc_server *srv = NULL;
-
- if (!smbc_initialized) {
-
- errno = EINVAL; /* Best I can think of ... */
- return -1;
-
- }
-
- if (!fname) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- smbc_parse_path(fname, server, share, path, user, password); /* FIXME, check errors */
-
- if (user[0] == (char)0) pstrcpy(user, smbc_user);
-
- srv = smbc_server(server, share, lp_workgroup(), user, password);
-
- if (!srv) {
-
- return -1; /* smbc_server sets errno */
-
- }
-
- /* if (strncmp(srv->cli.dev, "LPT", 3) == 0) {
-
- int job = smbc_stat_printjob(srv, path, NULL, NULL);
- if (job == -1) {
-
- return -1;
-
- }
- if ((err = cli_printjob_del(&srv->cli, job)) != 0) {
-
-
- return -1;
-
- }
- } else */
-
- if (!cli_unlink(&srv->cli, path)) {
-
- errno = smbc_errno(&srv->cli);
-
- if (errno == EACCES) { /* Check if the file is a directory */
-
- int saverr = errno;
- size_t size = 0;
- uint16 mode = 0;
- time_t m_time = 0, a_time = 0, c_time = 0;
- SMB_INO_T ino = 0;
-
- if (!smbc_getatr(srv, path, &mode, &size,
- &c_time, &a_time, &m_time, &ino)) {
-
- /* Hmmm, bad error ... What? */
-
- errno = smbc_errno(&srv->cli);
- return -1;
-
- }
- else {
-
- if (IS_DOS_DIR(mode))
- errno = EISDIR;
- else
- errno = saverr; /* Restore this */
-
- }
- }
-
- return -1;
-
- }
-
- return 0; /* Success ... */
-
-}
-
-/*
- * Routine to rename() a file
- */
-
-int smbc_rename(const char *oname, const char *nname)
-{
- fstring server1, share1, server2, share2, user1, user2, password1, password2;
- pstring path1, path2;
- struct smbc_server *srv = NULL;
-
- if (!smbc_initialized) {
-
- errno = EINVAL; /* Best I can think of ... */
- return -1;
-
- }
-
- if (!oname || !nname) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- DEBUG(4, ("smbc_rename(%s,%s)\n", oname, nname));
-
- smbc_parse_path(oname, server1, share1, path1, user1, password1);
-
- if (user1[0] == (char)0) pstrcpy(user1, smbc_user);
-
- smbc_parse_path(nname, server2, share2, path2, user2, password2);
-
- if (user2[0] == (char)0) pstrcpy(user2, smbc_user);
-
- if (strcmp(server1, server2) || strcmp(share1, share2) ||
- strcmp(user1, user2)) {
-
- /* Can't rename across file systems, or users?? */
-
- errno = EXDEV;
- return -1;
-
- }
-
- srv = smbc_server(server1, share1, lp_workgroup(), user1, password1);
- if (!srv) {
-
- return -1;
-
- }
-
- if (!cli_rename(&srv->cli, path1, path2)) {
- int eno = smbc_errno(&srv->cli);
-
- if (eno != EEXIST ||
- !cli_unlink(&srv->cli, path2) ||
- !cli_rename(&srv->cli, path1, path2)) {
-
- errno = eno;
- return -1;
-
- }
- }
-
- return 0; /* Success */
-
-}
-
-/*
- * A routine to lseek() a file
- */
-
-off_t smbc_lseek(int fd, off_t offset, int whence)
-{
- struct smbc_file *fe;
- size_t size;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (fd < smbc_start_fd || fd >= (smbc_start_fd + smbc_max_fd)) {
-
- errno = EBADF;
- return -1;
-
- }
-
- fe = smbc_file_table[fd - smbc_start_fd];
-
- if (!fe) {
-
- errno = EBADF;
- return -1;
-
- }
-
- if (!fe->file) {
-
- errno = EINVAL;
- return -1; /* Can't lseek a dir ... */
-
- }
-
- switch (whence) {
- case SEEK_SET:
- fe->offset = offset;
- break;
-
- case SEEK_CUR:
- fe->offset += offset;
- break;
-
- case SEEK_END:
- if (!cli_qfileinfo(&fe->srv->cli, fe->cli_fd, NULL, &size, NULL, NULL,
- NULL, NULL, NULL) &&
- !cli_getattrE(&fe->srv->cli, fe->cli_fd, NULL, &size, NULL, NULL,
- NULL)) {
-
- errno = EINVAL;
- return -1;
- }
- fe->offset = size + offset;
- break;
-
- default:
- errno = EINVAL;
- break;
-
- }
-
- return fe->offset;
-
-}
-
-/*
- * Generate an inode number from file name for those things that need it
- */
-
-static
-ino_t smbc_inode(const char *name)
-{
-
- if (!*name) return 2; /* FIXME, why 2 ??? */
- return (ino_t)str_checksum(name);
-
-}
-
-/*
- * Routine to put basic stat info into a stat structure ... Used by stat and
- * fstat below.
- */
-
-static
-int smbc_setup_stat(struct stat *st, char *fname, size_t size, int mode)
-{
-
- st->st_mode = 0;
-
- if (IS_DOS_DIR(mode)) {
- st->st_mode = SMBC_DIR_MODE;
- } else {
- st->st_mode = SMBC_FILE_MODE;
- }
-
- if (IS_DOS_ARCHIVE(mode)) st->st_mode |= S_IXUSR;
- if (IS_DOS_SYSTEM(mode)) st->st_mode |= S_IXGRP;
- if (IS_DOS_HIDDEN(mode)) st->st_mode |= S_IXOTH;
- if (!IS_DOS_READONLY(mode)) st->st_mode |= S_IWUSR;
-
- st->st_size = size;
- st->st_blksize = 512;
- st->st_blocks = (size+511)/512;
- st->st_uid = getuid();
- st->st_gid = getgid();
-
- if (IS_DOS_DIR(mode)) {
- st->st_nlink = 2;
- } else {
- st->st_nlink = 1;
- }
-
- if (st->st_ino == 0) {
- st->st_ino = smbc_inode(fname);
- }
-
- return True; /* FIXME: Is this needed ? */
-
-}
-
-/*
- * Get info from an SMB server on a file. Use a qpathinfo call first
- * and if that fails, use getatr, as Win95 sometimes refuses qpathinfo
- */
-
-BOOL smbc_getatr(struct smbc_server *srv, char *path,
- uint16 *mode, size_t *size,
- time_t *c_time, time_t *a_time, time_t *m_time,
- SMB_INO_T *ino)
-{
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- DEBUG(4,("smbc_getatr: sending qpathinfo\n"));
-
- if (!srv->no_pathinfo2 &&
- cli_qpathinfo2(&srv->cli, path, c_time, a_time, m_time, NULL,
- size, mode, ino)) return True;
-
- /* if this is NT then don't bother with the getatr */
- if (srv->cli.capabilities & CAP_NT_SMBS) return False;
-
- if (cli_getatr(&srv->cli, path, mode, size, m_time)) {
- a_time = c_time = m_time;
- srv->no_pathinfo2 = True;
- return True;
- }
- return False;
-}
-
-/*
- * Routine to stat a file given a name
- */
-
-int smbc_stat(const char *fname, struct stat *st)
-{
- struct smbc_server *srv;
- fstring server, share, user, password;
- pstring path;
- time_t m_time = 0, a_time = 0, c_time = 0;
- size_t size = 0;
- uint16 mode = 0;
- SMB_INO_T ino = 0;
-
- if (!smbc_initialized) {
-
- errno = EINVAL; /* Best I can think of ... */
- return -1;
-
- }
-
- if (!fname) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- DEBUG(4, ("smbc_stat(%s)\n", fname));
-
- smbc_parse_path(fname, server, share, path, user, password); /*FIXME, errors*/
-
- if (user[0] == (char)0) pstrcpy(user, smbc_user);
-
- srv = smbc_server(server, share, lp_workgroup(), user, password);
-
- if (!srv) {
-
- return -1; /* errno set by smbc_server */
-
- }
-
- /* if (strncmp(srv->cli.dev, "IPC", 3) == 0) {
-
- mode = aDIR | aRONLY;
-
- }
- else if (strncmp(srv->cli.dev, "LPT", 3) == 0) {
-
- if (strcmp(path, "\\") == 0) {
-
- mode = aDIR | aRONLY;
-
- }
- else {
-
- mode = aRONLY;
- smbc_stat_printjob(srv, path, &size, &m_time);
- c_time = a_time = m_time;
-
- }
- else { */
-
- if (!smbc_getatr(srv, path, &mode, &size,
- &c_time, &a_time, &m_time, &ino)) {
-
- errno = smbc_errno(&srv->cli);
- return -1;
-
- }
-
- /* } */
-
- st->st_ino = ino;
-
- smbc_setup_stat(st, path, size, mode);
-
- st->st_atime = a_time;
- st->st_ctime = c_time;
- st->st_mtime = m_time;
- st->st_dev = srv->dev;
-
- return 0;
-
-}
-
-/*
- * Routine to stat a file given an fd
- */
-
-int smbc_fstat(int fd, struct stat *st)
-{
- struct smbc_file *fe;
- time_t c_time, a_time, m_time;
- size_t size;
- uint16 mode;
- SMB_INO_T ino = 0;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (fd < smbc_start_fd || fd >= (smbc_start_fd + smbc_max_fd)) {
-
- errno = EBADF;
- return -1;
-
- }
-
- fe = smbc_file_table[fd - smbc_start_fd];
-
- if (!fe) {
-
- errno = EBADF;
- return -1;
-
- }
-
- if (!fe->file) {
-
- return smbc_fstatdir(fd, st);
-
- }
-
- if (!cli_qfileinfo(&fe->srv->cli, fe->cli_fd,
- &mode, &size, &c_time, &a_time, &m_time, NULL, &ino) &&
- !cli_getattrE(&fe->srv->cli, fe->cli_fd,
- &mode, &size, &c_time, &a_time, &m_time)) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- st->st_ino = ino;
-
- smbc_setup_stat(st, fe->fname, size, mode);
-
- st->st_atime = a_time;
- st->st_ctime = c_time;
- st->st_mtime = m_time;
- st->st_dev = fe->srv->dev;
-
- return 0;
-
-}
-
-/*
- * Routine to open a directory
- *
- * We want to allow:
- *
- * smb: which should list all the workgroups available
- * smb:workgroup
- * smb:workgroup//server
- * smb://server
- * smb://server/share
- */
-
-static void smbc_remove_dir(struct smbc_file *dir)
-{
- struct smbc_dir_list *d,*f;
-
- d = dir->dir_list;
- while (d) {
-
- f = d; d = d->next;
-
- if (f->dirent) free(f->dirent);
- free(f);
-
- }
-
- dir->dir_list = dir->dir_end = dir->dir_next = NULL;
-
-}
-
-static int add_dirent(struct smbc_file *dir, const char *name, const char *comment, uint32 type)
-{
- struct smbc_dirent *dirent;
- int size;
-
- /*
- * Allocate space for the dirent, which must be increased by the
- * size of the name and the comment and 1 for the null on the comment.
- * The null on the name is already accounted for.
- */
-
- size = sizeof(struct smbc_dirent) + (name?strlen(name):0) +
- (comment?strlen(comment):0) + 1;
-
- dirent = malloc(size);
-
- if (!dirent) {
-
- dir->dir_error = ENOMEM;
- return -1;
-
- }
-
- if (dir->dir_list == NULL) {
-
- dir->dir_list = malloc(sizeof(struct smbc_dir_list));
- if (!dir->dir_list) {
-
- free(dirent);
- dir->dir_error = ENOMEM;
- return -1;
-
- }
-
- dir->dir_end = dir->dir_next = dir->dir_list;
-
- }
- else {
-
- dir->dir_end->next = malloc(sizeof(struct smbc_dir_list));
-
- if (!dir->dir_end) {
-
- free(dirent);
- dir->dir_error = ENOMEM;
- return -1;
-
- }
-
- dir->dir_end = dir->dir_end->next;
-
- }
-
- dir->dir_end->next = NULL;
- dir->dir_end->dirent = dirent;
-
- dirent->smbc_type = type;
- dirent->namelen = (name?strlen(name):0);
- dirent->commentlen = (comment?strlen(comment):0);
- dirent->dirlen = size;
-
- strncpy(dirent->name, (name?name:""), dirent->namelen + 1);
-
- dirent->comment = (char *)(&dirent->name + dirent->namelen + 1);
- strncpy(dirent->comment, (comment?comment:""), dirent->commentlen + 1);
-
- return 0;
-
-}
-
-static void
-list_fn(const char *name, uint32 type, const char *comment, void *state)
-{
- struct smbc_file *dir = (struct smbc_file *)state;
- int dirent_type;
-
- /* We need to process the type a little ... */
-
- if (dir->dir_type == SMBC_FILE_SHARE) {
-
- switch (type) {
- case 0: /* Directory tree */
- dirent_type = SMBC_FILE_SHARE;
- break;
-
- case 1:
- dirent_type = SMBC_PRINTER_SHARE;
- break;
-
- case 2:
- dirent_type = SMBC_COMMS_SHARE;
- break;
-
- case 3:
- dirent_type = SMBC_IPC_SHARE;
- break;
-
- default:
- dirent_type = SMBC_FILE_SHARE; /* FIXME, error? */
- break;
- }
-
- }
- else dirent_type = dir->dir_type;
-
- if (add_dirent(dir, name, comment, dirent_type) < 0) {
-
- /* An error occurred, what do we do? */
-
- }
-
-}
-
-static void
-dir_list_fn(file_info *finfo, const char *mask, void *state)
-{
-
- /* fprintf(stderr, "Finfo->name=%s, mask=%s, mode=%0X\n", finfo->name, mask, finfo->mode);*/
- if (add_dirent((struct smbc_file *)state, finfo->name, "",
- (finfo->mode&aDIR?SMBC_DIR:SMBC_FILE)) < 0) {
-
- /* Handle an error ... */
-
- }
-
-}
-
-int smbc_opendir(const char *fname)
-{
- fstring server, share, user, password;
- pstring path;
- struct smbc_server *srv = NULL;
- struct in_addr rem_ip;
- int slot = 0;
- uint8 eclass;
- uint32 ecode;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (!fname) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (smbc_parse_path(fname, server, share, path, user, password)) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (user[0] == (char)0) pstrcpy(user, smbc_user);
-
- /* Get a file entry ... */
-
- slot = 0;
-
- while (smbc_file_table[slot])
- slot++;
-
- if (slot > smbc_max_fd) {
-
- errno = ENOMEM;
- return -1; /* FIXME, ... move into a func */
-
- }
-
- smbc_file_table[slot] = malloc(sizeof(struct smbc_file));
-
- if (!smbc_file_table[slot]) {
-
- errno = ENOMEM;
- return -1;
-
- }
-
- smbc_file_table[slot]->cli_fd = 0;
- smbc_file_table[slot]->smbc_fd = slot + smbc_start_fd;
- smbc_file_table[slot]->fname = strdup(fname);
- smbc_file_table[slot]->srv = NULL;
- smbc_file_table[slot]->offset = 0;
- smbc_file_table[slot]->file = False;
- smbc_file_table[slot]->dir_list =
- smbc_file_table[slot]->dir_next =
- smbc_file_table[slot]->dir_end = NULL;
-
- if (server[0] == (char)0) {
-
- if (share[0] != (char)0 || path[0] != (char)0) {
-
- errno = EINVAL;
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL;
- return -1;
-
- }
-
- /* We have server and share and path empty ... so list the workgroups */
-
- /*cli_get_backup_server(my_netbios_name, lp_workgroup(), server, sizeof(server));*/
-
- if (!resolve_name(lp_workgroup(), &rem_ip, 0x1d)) {
-
- errno = EINVAL; /* Something wrong with smb.conf? */
- return -1;
-
- }
-
- smbc_file_table[slot]->dir_type = SMBC_WORKGROUP;
-
- /* find the name of the server ... */
-
- if (!name_status_find(0, rem_ip, server)) {
-
- fprintf(stderr, "Could not get the name of local master browser ...\n");
- errno = EINVAL;
- return -1;
-
- }
-
- /*
- * Get a connection to IPC$ on the server if we do not already have one
- */
-
- srv = smbc_server(server, "IPC$", lp_workgroup(), user, password);
-
- if (!srv) {
-
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL;
- return -1;
-
- }
-
- smbc_file_table[slot]->srv = srv;
-
- /* Now, list the stuff ... */
-
- if (!cli_NetServerEnum(&srv->cli, lp_workgroup(), 0x80000000, list_fn,
- (void *)smbc_file_table[slot])) {
-
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL;
- errno = cli_error(&srv->cli, &eclass, &ecode, NULL);
- return -1;
-
- }
- }
- else { /* Server not an empty string ... Check the rest and see what gives */
-
- if (share[0] == (char)0) {
-
- if (path[0] != (char)0) { /* Should not have empty share with path */
-
- errno = EINVAL;
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL;
- return -1;
-
- }
-
- /* Check to see if <server><1D> translates, or <server><20> translates */
-
- if (resolve_name(server, &rem_ip, 0x1d)) { /* Found LMB */
- pstring buserver;
-
- smbc_file_table[slot]->dir_type = SMBC_SERVER;
-
- /*
- * Get the backup list ...
- */
-
- /*cli_get_backup_server(my_netbios_name, server, buserver, sizeof(buserver)); */
-
- if (!name_status_find(0, rem_ip, buserver)) {
-
- fprintf(stderr, "Could not get name of local master browser ...\n");
- errno = EPERM; /* FIXME, is this correct */
- return -1;
-
- }
-
- /*
- * Get a connection to IPC$ on the server if we do not already have one
- */
-
- srv = smbc_server(buserver, "IPC$", lp_workgroup(), user, password);
-
- if (!srv) {
-
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL; /* FIXME: Memory leaks ... */
- return -1;
-
- }
-
- smbc_file_table[slot]->srv = srv;
-
- /* Now, list the servers ... */
-
- if (!cli_NetServerEnum(&srv->cli, server, 0x0000FFFE, list_fn,
- (void *)smbc_file_table[slot])) {
-
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL;
- errno = cli_error(&srv->cli, &eclass, &ecode, NULL);
- return -1;
-
- }
-
- }
- else {
-
- if (resolve_name(server, &rem_ip, 0x20)) {
-
- /* Now, list the shares ... */
-
- smbc_file_table[slot]->dir_type = SMBC_FILE_SHARE;
-
- srv = smbc_server(server, "IPC$", lp_workgroup(), user, password);
-
- if (!srv) {
-
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL;
- return -1;
-
- }
-
- smbc_file_table[slot]->srv = srv;
-
- /* Now, list the servers ... */
-
- if (cli_RNetShareEnum(&srv->cli, list_fn,
- (void *)smbc_file_table[slot]) < 0) {
-
- errno = cli_error(&srv->cli, &eclass, &ecode, NULL);
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL;
- return -1;
-
- }
-
- }
- else {
-
- errno = ENODEV; /* Neither the workgroup nor server exists */
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL;
- return -1;
-
- }
-
- }
-
- }
- else { /* The server and share are specified ... work from there ... */
-
- /* Well, we connect to the server and list the directory */
-
- smbc_file_table[slot]->dir_type = SMBC_FILE_SHARE;
-
- srv = smbc_server(server, share, lp_workgroup(), user, password);
-
- if (!srv) {
-
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL;
- return -1;
-
- }
-
- smbc_file_table[slot]->srv = srv;
-
- /* Now, list the files ... */
-
- pstrcat(path, "\\*");
-
- if (cli_list(&srv->cli, path, aDIR | aSYSTEM | aHIDDEN, dir_list_fn,
- (void *)smbc_file_table[slot]) < 0) {
-
- if (smbc_file_table[slot]) {
- if (smbc_file_table[slot]->fname) free(smbc_file_table[slot]->fname);
- free(smbc_file_table[slot]);
- }
- smbc_file_table[slot] = NULL;
- errno = smbc_errno(&srv->cli);
- return -1;
-
- }
- }
-
- }
-
- return smbc_file_table[slot]->smbc_fd;
-
-}
-
-/*
- * Routine to close a directory
- */
-
-int smbc_closedir(int fd)
-{
- struct smbc_file *fe;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (fd < smbc_start_fd || fd >= (smbc_start_fd + smbc_max_fd)) {
-
- errno = EBADF;
- return -1;
-
- }
-
- fe = smbc_file_table[fd - smbc_start_fd];
-
- if (!fe) {
-
- errno = EBADF;
- return -1;
-
- }
-
- smbc_remove_dir(fe); /* Clean it up */
-
- if (fe) {
-
- if (fe->fname) free(fe->fname);
- free(fe); /* Free the space too */
-
- }
-
- smbc_file_table[fd - smbc_start_fd] = NULL;
-
- return 0;
-
-}
-
-/*
- * Routine to get a directory entry
- */
-
-static char smbc_local_dirent[512]; /* Make big enough */
-
-struct smbc_dirent *smbc_readdir(unsigned int fd)
-{
- struct smbc_file *fe;
- struct smbc_dirent *dirp, *dirent;
-
- /* Check that all is ok first ... */
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return NULL;
-
- }
-
- if (fd < smbc_start_fd || fd >= (smbc_start_fd + smbc_max_fd)) {
-
- errno = EBADF;
- return NULL;
-
- }
-
- fe = smbc_file_table[fd - smbc_start_fd];
-
- if (!fe) {
-
- errno = EBADF;
- return NULL;
-
- }
-
- if (fe->file != False) { /* FIXME, should be dir, perhaps */
-
- errno = ENOTDIR;
- return NULL;
-
- }
-
- if (!fe->dir_next)
- return NULL;
- else {
-
- dirent = fe->dir_next->dirent;
-
- if (!dirent) {
-
- errno = ENOENT;
- return NULL;
-
- }
-
- /* Hmmm, do I even need to copy it? */
-
- bcopy(dirent, smbc_local_dirent, dirent->dirlen); /* Copy the dirent */
-
- dirp = (struct smbc_dirent *)smbc_local_dirent;
-
- dirp->comment = (char *)(&dirp->name + dirent->namelen + 1);
-
- fe->dir_next = fe->dir_next->next;
-
- return (struct smbc_dirent *)smbc_local_dirent;
- }
-
-}
-
-/*
- * Routine to get directory entries
- */
-
-int smbc_getdents(unsigned int fd, struct smbc_dirent *dirp, int count)
-{
- struct smbc_file *fe;
- struct smbc_dir_list *dir;
- int rem = count, reqd;
- char *ndir = (char *)dirp;
-
- /* Check that all is ok first ... */
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (fd < smbc_start_fd || fd >= (smbc_start_fd + smbc_max_fd)) {
-
- errno = EBADF;
- return -1;
-
- }
-
- fe = smbc_file_table[fd - smbc_start_fd];
-
- if (!fe) {
-
- errno = EBADF;
- return -1;
-
- }
-
- if (fe->file != False) { /* FIXME, should be dir, perhaps */
-
- errno = ENOTDIR;
- return -1;
-
- }
-
- /*
- * Now, retrieve the number of entries that will fit in what was passed
- * We have to figure out if the info is in the list, or we need to
- * send a request to the server to get the info.
- */
-
- while ((dir = fe->dir_next)) {
- struct smbc_dirent *dirent;
-
- if (!dir->dirent) {
-
- errno = ENOENT; /* Bad error */
- return -1;
-
- }
-
- if (rem < (reqd = (sizeof(struct smbc_dirent) + dir->dirent->namelen +
- dir->dirent->commentlen + 1))) {
-
- if (rem < count) { /* We managed to copy something */
-
- errno = 0;
- return count - rem;
-
- }
- else { /* Nothing copied ... */
-
- errno = EINVAL; /* Not enough space ... */
- return -1;
-
- }
-
- }
-
- dirent = dir->dirent;
-
- bcopy(dirent, ndir, reqd); /* Copy the data in ... */
-
- ((struct smbc_dirent *)ndir)->comment =
- (char *)(&((struct smbc_dirent *)ndir)->name + dirent->namelen + 1);
-
- ndir += reqd;
-
- rem -= reqd;
-
- fe->dir_next = dir = dir -> next;
- }
-
- if (rem == count)
- return 0;
- else
- return count - rem;
-
-}
-
-/*
- * Routine to create a directory ...
- */
-
-int smbc_mkdir(const char *fname, mode_t mode)
-{
- struct smbc_server *srv;
- fstring server, share, user, password;
- pstring path;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (!fname) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- DEBUG(4, ("smbc_mkdir(%s)\n", fname));
-
- smbc_parse_path(fname, server, share, path, user, password); /*FIXME, errors*/
-
- if (user[0] == (char)0) pstrcpy(user, smbc_user);
-
- srv = smbc_server(server, share, lp_workgroup(), user, password);
-
- if (!srv) {
-
- return -1; /* errno set by smbc_server */
-
- }
-
- /* if (strncmp(srv->cli.dev, "IPC", 3) == 0) {
-
- mode = aDIR | aRONLY;
-
- }
- else if (strncmp(srv->cli.dev, "LPT", 3) == 0) {
-
- if (strcmp(path, "\\") == 0) {
-
- mode = aDIR | aRONLY;
-
- }
- else {
-
- mode = aRONLY;
- smbc_stat_printjob(srv, path, &size, &m_time);
- c_time = a_time = m_time;
-
- }
- else { */
-
- if (!cli_mkdir(&srv->cli, path)) {
-
- errno = smbc_errno(&srv->cli);
- return -1;
-
- }
-
- return 0;
-
-}
-
-/*
- * Our list function simply checks to see if a directory is not empty
- */
-
-static int smbc_rmdir_dirempty = True;
-
-static void rmdir_list_fn(file_info *finfo, const char *mask, void *state)
-{
-
- if (strncmp(finfo->name, ".", 1) != 0 && strncmp(finfo->name, "..", 2) != 0)
- smbc_rmdir_dirempty = False;
-
-}
-
-/*
- * Routine to remove a directory
- */
-
-int smbc_rmdir(const char *fname)
-{
- struct smbc_server *srv;
- fstring server, share, user, password;
- pstring path;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (!fname) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- DEBUG(4, ("smbc_rmdir(%s)\n", fname));
-
- smbc_parse_path(fname, server, share, path, user, password); /*FIXME, errors*/
-
- if (user[0] == (char)0) pstrcpy(user, smbc_user);
-
- srv = smbc_server(server, share, lp_workgroup(), user, password);
-
- if (!srv) {
-
- return -1; /* errno set by smbc_server */
-
- }
-
- /* if (strncmp(srv->cli.dev, "IPC", 3) == 0) {
-
- mode = aDIR | aRONLY;
-
- }
- else if (strncmp(srv->cli.dev, "LPT", 3) == 0) {
-
- if (strcmp(path, "\\") == 0) {
-
- mode = aDIR | aRONLY;
-
- }
- else {
-
- mode = aRONLY;
- smbc_stat_printjob(srv, path, &size, &m_time);
- c_time = a_time = m_time;
-
- }
- else { */
-
- if (!cli_rmdir(&srv->cli, path)) {
-
- errno = smbc_errno(&srv->cli);
-
- if (errno == EACCES) { /* Check if the dir empty or not */
-
- pstring lpath; /* Local storage to avoid buffer overflows */
-
- smbc_rmdir_dirempty = True; /* Make this so ... */
-
- pstrcpy(lpath, path);
- pstrcat(lpath, "\\*");
-
- if (cli_list(&srv->cli, lpath, aDIR | aSYSTEM | aHIDDEN, rmdir_list_fn,
- NULL) < 0) {
-
- /* Fix errno to ignore latest error ... */
-
- DEBUG(5, ("smbc_rmdir: cli_list returned an error: %d\n",
- smbc_errno(&srv->cli)));
- errno = EACCES;
-
- }
-
- if (smbc_rmdir_dirempty)
- errno = EACCES;
- else
- errno = ENOTEMPTY;
-
- }
-
- return -1;
-
- }
-
- return 0;
-
-}
-
-/*
- * Routine to return the current directory position
- */
-
-off_t smbc_telldir(int fd)
-{
- struct smbc_file *fe;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (fd < smbc_start_fd || fd >= (smbc_start_fd + smbc_max_fd)) {
-
- errno = EBADF;
- return -1;
-
- }
-
- fe = smbc_file_table[fd - smbc_start_fd];
-
- if (!fe) {
-
- errno = EBADF;
- return -1;
-
- }
-
- if (fe->file != False) { /* FIXME, should be dir, perhaps */
-
- errno = ENOTDIR;
- return -1;
-
- }
-
- return (off_t) fe->dir_next;
-
-}
-
-/*
- * A routine to run down the list and see if the entry is OK
- */
-
-struct smbc_dir_list *smbc_check_dir_ent(struct smbc_dir_list *list,
- struct smbc_dirent *dirent)
-{
-
- /* Run down the list looking for what we want */
-
- if (dirent) {
-
- struct smbc_dir_list *tmp = list;
-
- while (tmp) {
-
- if (tmp->dirent == dirent)
- return tmp;
-
- tmp = tmp->next;
-
- }
-
- }
-
- return NULL; /* Not found, or an error */
-
-}
-
-
-/*
- * Routine to seek on a directory
- */
-
-int smbc_lseekdir(int fd, off_t offset)
-{
- struct smbc_file *fe;
- struct smbc_dirent *dirent = (struct smbc_dirent *)offset;
- struct smbc_dir_list *list_ent = NULL;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (fd < smbc_start_fd || fd >= (smbc_start_fd + smbc_max_fd)) {
-
- errno = EBADF;
- return -1;
-
- }
-
- fe = smbc_file_table[fd - smbc_start_fd];
-
- if (!fe) {
-
- errno = EBADF;
- return -1;
-
- }
-
- if (fe->file != False) { /* FIXME, should be dir, perhaps */
-
- errno = ENOTDIR;
- return -1;
-
- }
-
- /* Now, check what we were passed and see if it is OK ... */
-
- if (dirent == NULL) { /* Seek to the begining of the list */
-
- fe->dir_next = fe->dir_list;
- return 0;
-
- }
-
- /* Now, run down the list and make sure that the entry is OK */
- /* This may need to be changed if we change the format of the list */
-
- if ((list_ent = smbc_check_dir_ent(fe->dir_list, dirent)) == NULL) {
-
- errno = EINVAL; /* Bad entry */
- return -1;
-
- }
-
- fe->dir_next = list_ent;
-
- return 0;
-
-}
-
-/*
- * Routine to fstat a dir
- */
-
-int smbc_fstatdir(int fd, struct stat *st)
-{
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- /* No code yet ... */
-
- return 0;
-
-}
-
-/*
- * Routine to print a file on a remote server ...
- *
- * We open the file, which we assume to be on a remote server, and then
- * copy it to a print file on the share specified by printq.
- */
-
-int smbc_print_file(const char *fname, const char *printq)
-{
- int fid1, fid2, bytes, saverr, tot_bytes = 0;
- char buf[4096];
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (!fname && !printq) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- /* Try to open the file for reading ... */
-
- if ((fid1 = smbc_open(fname, O_RDONLY, 0666)) < 0) {
-
- fprintf(stderr, "Error, fname=%s, errno=%i\n", fname, errno);
- return -1; /* smbc_open sets errno */
-
- }
-
- /* Now, try to open the printer file for writing */
-
- if ((fid2 = smbc_open_print_job(printq)) < 0) {
-
- saverr = errno; /* Save errno */
- smbc_close(fid1);
- errno = saverr;
- return -1;
-
- }
-
- while ((bytes = smbc_read(fid1, buf, sizeof(buf))) > 0) {
-
- tot_bytes += bytes;
-
- if ((smbc_write(fid2, buf, bytes)) < 0) {
-
- saverr = errno;
- smbc_close(fid1);
- smbc_close(fid2);
- errno = saverr;
-
- }
-
- }
-
- saverr = errno;
-
- smbc_close(fid1); /* We have to close these anyway */
- smbc_close(fid2);
-
- if (bytes < 0) {
-
- errno = saverr;
- return -1;
-
- }
-
- return tot_bytes;
-
-}
-
-/*
- * Open a print file to be written to by other calls
- */
-
-int smbc_open_print_job(const char *fname)
-{
- fstring server, share, user, password;
- pstring path;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (!fname) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- DEBUG(4, ("smbc_open_print_job(%s)\n", fname));
-
- smbc_parse_path(fname, server, share, path, user, password); /*FIXME, errors*/
-
- /* What if the path is empty, or the file exists? */
-
- return smbc_open(fname, O_WRONLY, 666);
-
-}
-
-/*
- * Routine to list print jobs on a printer share ...
- */
-
-int smbc_list_print_jobs(const char *fname, void (*fn)(struct print_job_info *))
-{
- struct smbc_server *srv;
- fstring server, share, user, password;
- pstring path;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (!fname) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- DEBUG(4, ("smbc_list_print_jobs(%s)\n", fname));
-
- smbc_parse_path(fname, server, share, path, user, password); /*FIXME, errors*/
-
- if (user[0] == (char)0) pstrcpy(user, smbc_user);
-
- srv = smbc_server(server, share, lp_workgroup(), user, password);
-
- if (!srv) {
-
- return -1; /* errno set by smbc_server */
-
- }
-
- if (cli_print_queue(&srv->cli, fn) < 0) {
-
- errno = smbc_errno(&srv->cli);
- return -1;
-
- }
-
- return 0;
-
-}
-
-/*
- * Delete a print job from a remote printer share
- */
-
-int smbc_unlink_print_job(const char *fname, int id)
-{
- struct smbc_server *srv;
- fstring server, share, user, password;
- pstring path;
- int err;
-
- if (!smbc_initialized) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- if (!fname) {
-
- errno = EINVAL;
- return -1;
-
- }
-
- DEBUG(4, ("smbc_unlink_print_job(%s)\n", fname));
-
- smbc_parse_path(fname, server, share, path, user, password); /*FIXME, errors*/
-
- if (user[0] == (char)0) pstrcpy(user, smbc_user);
-
- srv = smbc_server(server, share, lp_workgroup(), user, password);
-
- if (!srv) {
-
- return -1; /* errno set by smbc_server */
-
- }
-
- if ((err = cli_printjob_del(&srv->cli, id)) != 0) {
-
- if (err < 0)
- errno = smbc_errno(&srv->cli);
- else if (err == ERRnosuchprintjob)
- errno = EINVAL;
- return -1;
-
-
- }
-
- return 0;
-
-}
-
diff --git a/source/libsmb/namequery.c b/source/libsmb/namequery.c
index 465198dfad4..816804753e7 100644
--- a/source/libsmb/namequery.c
+++ b/source/libsmb/namequery.c
@@ -190,96 +190,6 @@ BOOL name_status_find(int type, struct in_addr to_ip, char *name)
return True;
}
-/****************************************************************************
- Do a NetBIOS name registation to try to claim a name ...
-***************************************************************************/
-BOOL name_register(int fd, const char *name, int name_type,
- struct in_addr name_ip, int opcode,
- BOOL bcast,
- struct in_addr to_ip, int *count)
-{
- int retries = 3;
- struct timeval tval;
- struct packet_struct p;
- struct packet_struct *p2;
- struct nmb_packet *nmb = &p.packet.nmb;
- struct in_addr register_ip;
-
- DEBUG(4, ("name_register: %s as %s on %s\n", name, inet_ntoa(name_ip), inet_ntoa(to_ip)));
-
- register_ip.s_addr = name_ip.s_addr; /* Fix this ... */
-
- bzero((char *)&p, sizeof(p));
-
- *count = 0;
-
- nmb->header.name_trn_id = generate_trn_id();
- nmb->header.opcode = opcode;
- nmb->header.response = False;
- nmb->header.nm_flags.bcast = False;
- nmb->header.nm_flags.recursion_available = False;
- nmb->header.nm_flags.recursion_desired = True; /* ? */
- nmb->header.nm_flags.trunc = False;
- nmb->header.nm_flags.authoritative = True;
-
- nmb->header.qdcount = 1;
- nmb->header.ancount = 0;
- nmb->header.nscount = 0;
- nmb->header.arcount = 1;
-
- make_nmb_name(&nmb->question.question_name, name, name_type);
-
- nmb->question.question_type = 0x20;
- nmb->question.question_class = 0x1;
-
- /* Now, create the additional stuff for a registration request */
-
- if ((nmb->additional = (struct res_rec *)malloc(sizeof(struct res_rec))) == NULL) {
-
- DEBUG(0, ("name_register: malloc fail for additional record.\n"));
- return False;
-
- }
-
- bzero((char *)nmb->additional, sizeof(struct res_rec));
-
- nmb->additional->rr_name = nmb->question.question_name;
- nmb->additional->rr_type = RR_TYPE_NB;
- nmb->additional->rr_class = RR_CLASS_IN;
-
- /* See RFC 1002, sections 5.1.1.1, 5.1.1.2 and 5.1.1.3 */
- if (nmb->header.nm_flags.bcast)
- nmb->additional->ttl = PERMANENT_TTL;
- else
- nmb->additional->ttl = lp_max_ttl();
-
- nmb->additional->rdlength = 6;
-
- nmb->additional->rdata[0] = NB_MFLAG & 0xFF;
-
- /* Set the address for the name we are registering. */
- putip(&nmb->additional->rdata[2], &register_ip);
-
- p.ip = to_ip;
- p.port = NMB_PORT;
- p.fd = fd;
- p.timestamp = time(NULL);
- p.packet_type = NMB_PACKET;
-
- GetTimeOfDay(&tval);
-
- if (!send_packet(&p))
- return False;
-
- retries--;
-
- if ((p2 = receive_nmb_packet(fd, 10, nmb->header.name_trn_id))) {
- debug_nmb_packet(p2);
- free(p2); /* No memory leaks ... */
- }
-
- return True;
-}
/****************************************************************************
Do a netbios name query to find someones IP.
@@ -546,65 +456,6 @@ void endlmhosts(FILE *fp)
fclose(fp);
}
-BOOL name_register_wins(const char *name, int name_type)
-{
- int sock, i, return_count;
- int num_interfaces = iface_count();
- struct in_addr sendto_ip;
-
- /*
- * Do a broadcast register ...
- */
-
- if (!lp_wins_server())
- return False;
-
- DEBUG(4, ("name_register_wins:Registering my name %s on %s\n", name, lp_wins_server()));
-
- sock = open_socket_in(SOCK_DGRAM, 0, 3,
- interpret_addr("0.0.0.0"), True);
-
- if (sock == -1) return False;
-
- set_socket_options(sock, "SO_BROADCAST");
-
- sendto_ip.s_addr = inet_addr(lp_wins_server());
-
- if (num_interfaces > 1) {
-
- for (i = 0; i < num_interfaces; i++) {
-
- if (!name_register(sock, name, name_type, *iface_n_ip(i),
- NMB_NAME_MULTIHOMED_REG_OPCODE,
- True, sendto_ip, &return_count)) {
-
- close(sock);
- return False;
-
- }
-
- }
-
- }
- else {
-
- if (!name_register(sock, name, name_type, *iface_n_ip(0),
- NMB_NAME_REG_OPCODE,
- True, sendto_ip, &return_count)) {
-
- close(sock);
- return False;
-
- }
-
- }
-
- close(sock);
-
- return True;
-
-}
-
/********************************************************
Resolve via "bcast" method.
*********************************************************/
@@ -772,7 +623,7 @@ static BOOL resolve_hosts(const char *name,
DEBUG(3,("resolve_hosts: Attempting host lookup for name %s<0x20>\n", name));
- if (((hp = sys_gethostbyname(name)) != NULL) && (hp->h_addr != NULL)) {
+ if (((hp = Get_Hostbyname(name)) != NULL) && (hp->h_addr != NULL)) {
struct in_addr return_ip;
putip((char *)&return_ip,(char *)hp->h_addr);
*return_iplist = (struct in_addr *)malloc(sizeof(struct in_addr));
diff --git a/source/libsmb/pwd_cache.c b/source/libsmb/pwd_cache.c
index 420b49ed2e7..26b1d192f09 100644
--- a/source/libsmb/pwd_cache.c
+++ b/source/libsmb/pwd_cache.c
@@ -103,21 +103,11 @@ void pwd_read(struct pwd_info *pwd, char *passwd_report, BOOL do_encrypt)
user_pass = (char*)getpass(passwd_report);
- /*
- * Do not assume that an empty string is a NULL password.
- * If you do this will break the session key generation for
- * and account with an emtpy password. If you wish to use
- * a NULL password, use the -N option to smbclient and rpcclient
- * --jerry
- */
-#if 0
if (user_pass == NULL || user_pass[0] == 0)
{
pwd_set_nullpwd(pwd);
}
else if (do_encrypt)
-#endif
- if (do_encrypt)
{
pwd_make_lm_nt_16(pwd, user_pass);
}
diff --git a/source/libsmb/smbdes.c b/source/libsmb/smbdes.c
index 7e8a9a5b89e..d0e1c6e85fb 100644
--- a/source/libsmb/smbdes.c
+++ b/source/libsmb/smbdes.c
@@ -381,7 +381,7 @@ void SamOEMhash( unsigned char *data, unsigned char *key, int val)
s_box[ind] = s_box[j];
s_box[j] = tc;
}
- for( ind = 0; ind < val; ind++)
+ for( ind = 0; ind < (val ? 516 : 16); ind++)
{
unsigned char tc;
unsigned char t;
diff --git a/source/libsmb/smbencrypt.c b/source/libsmb/smbencrypt.c
index 7efb2bb9b31..caf92567879 100644
--- a/source/libsmb/smbencrypt.c
+++ b/source/libsmb/smbencrypt.c
@@ -223,7 +223,7 @@ BOOL make_oem_passwd_hash(char data[516], const char *passwd, uchar old_pw_hash[
DEBUG(100,("make_oem_passwd_hash\n"));
dump_data(100, data, 516);
#endif
- SamOEMhash( (unsigned char *)data, (unsigned char *)old_pw_hash, 516);
+ SamOEMhash( (unsigned char *)data, (unsigned char *)old_pw_hash, True);
return True;
}
diff --git a/source/libsmb/unexpected.c b/source/libsmb/unexpected.c
index 4aa566de5b2..6c5dd611a9c 100644
--- a/source/libsmb/unexpected.c
+++ b/source/libsmb/unexpected.c
@@ -49,7 +49,7 @@ void unexpected_packet(struct packet_struct *p)
int len=0;
if (!tdbd) {
- tdbd = tdb_open_log(lock_path("unexpected.tdb"), 1,
+ tdbd = tdb_open(lock_path("unexpected.tdb"), 1,
TDB_CLEAR_IF_FIRST,
O_RDWR | O_CREAT, 0644);
if (!tdbd) {
@@ -151,7 +151,7 @@ struct packet_struct *receive_unexpected(enum packet_type packet_type, int id,
{
TDB_CONTEXT *tdb2;
- tdb2 = tdb_open_log(lock_path("unexpected.tdb"), 0, 0, O_RDONLY, 0);
+ tdb2 = tdb_open(lock_path("unexpected.tdb"), 0, 0, O_RDONLY, 0);
if (!tdb2) return NULL;
matched_packet = NULL;
diff --git a/source/locking/brlock.c b/source/locking/brlock.c
index 7f3ec6757e3..175ab5c9b0a 100644
--- a/source/locking/brlock.c
+++ b/source/locking/brlock.c
@@ -113,16 +113,12 @@ static BOOL brl_conflict(struct lock_struct *lck1,
/****************************************************************************
- Delete a record if it is for a dead process, if check_self is true, then
- delete any records belonging to this pid also (there shouldn't be any).
+delete a record if it is for a dead process
****************************************************************************/
-
static int delete_fn(TDB_CONTEXT *ttdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
{
struct lock_struct *locks;
int count, i;
- BOOL check_self = *(BOOL *)state;
- pid_t mypid = sys_getpid();
tdb_chainlock(tdb, kbuf);
@@ -132,20 +128,7 @@ static int delete_fn(TDB_CONTEXT *ttdb, TDB_DATA kbuf, TDB_DATA dbuf, void *stat
for (i=0; i<count; i++) {
struct lock_struct *lock = &locks[i];
- /* If check_self is true we want to remove our own records. */
- if (check_self && (mypid == lock->context.pid)) {
-
- DEBUG(0,("brlock : delete_fn. LOGIC ERROR ! Shutting down and a record for my pid (%u) exists !\n",
- (unsigned int)lock->context.pid ));
-
- } else if (process_exists(lock->context.pid)) {
-
- DEBUG(10,("brlock : delete_fn. pid %u exists.\n", (unsigned int)lock->context.pid ));
- continue;
- }
-
- DEBUG(10,("brlock : delete_fn. Deleting record for process %u\n",
- (unsigned int)lock->context.pid ));
+ if (process_exists(lock->context.pid)) continue;
if (count > 1 && i < count-1) {
memmove(&locks[i], &locks[i+1],
@@ -169,14 +152,10 @@ static int delete_fn(TDB_CONTEXT *ttdb, TDB_DATA kbuf, TDB_DATA dbuf, void *stat
/****************************************************************************
Open up the brlock.tdb database.
****************************************************************************/
-
void brl_init(int read_only)
{
- BOOL check_self = False;
-
- if (tdb)
- return;
- tdb = tdb_open_log(lock_path("brlock.tdb"), 0, TDB_CLEAR_IF_FIRST,
+ if (tdb) return;
+ tdb = tdb_open(lock_path("brlock.tdb"), 0, TDB_CLEAR_IF_FIRST,
read_only?O_RDONLY:(O_RDWR|O_CREAT), 0644);
if (!tdb) {
DEBUG(0,("Failed to open byte range locking database\n"));
@@ -184,27 +163,11 @@ void brl_init(int read_only)
}
/* delete any dead locks */
- if (!read_only)
- tdb_traverse(tdb, delete_fn, &check_self);
+ if (!read_only) {
+ tdb_traverse(tdb, delete_fn, NULL);
+ }
}
-/****************************************************************************
- Close down the brlock.tdb database.
-****************************************************************************/
-
-void brl_shutdown(int read_only)
-{
- BOOL check_self = True;
-
- if (!tdb)
- return;
-
- /* delete any dead locks */
- if (!read_only)
- tdb_traverse(tdb, delete_fn, &check_self);
-
- tdb_close(tdb);
-}
/****************************************************************************
Lock a range of bytes.
@@ -341,33 +304,13 @@ smbpid = %u, pid = %u, tid = %u\n",
}
/****************************************************************************
- Check to see if this lock conflicts, but ignore our own locks on the
- same fnum only.
-****************************************************************************/
-
-static BOOL brl_conflict_other(struct lock_struct *lck1, struct lock_struct *lck2)
-{
- if (lck1->lock_type == READ_LOCK && lck2->lock_type == READ_LOCK)
- return False;
-
- if (brl_same_context(&lck1->context, &lck2->context) &&
- lck1->fnum == lck2->fnum)
- return False;
-
- if (lck1->start >= (lck2->start + lck2->size) ||
- lck2->start >= (lck1->start + lck1->size)) return False;
-
- return True;
-}
-
-/****************************************************************************
Test if we could add a lock if we wanted to.
****************************************************************************/
BOOL brl_locktest(SMB_DEV_T dev, SMB_INO_T ino, int fnum,
uint16 smbpid, pid_t pid, uint16 tid,
br_off start, br_off size,
- enum brl_type lock_type, int check_self)
+ enum brl_type lock_type)
{
TDB_DATA kbuf, dbuf;
int count, i;
@@ -393,15 +336,8 @@ BOOL brl_locktest(SMB_DEV_T dev, SMB_INO_T ino, int fnum,
locks = (struct lock_struct *)dbuf.dptr;
count = dbuf.dsize / sizeof(*locks);
for (i=0; i<count; i++) {
- if (check_self) {
- if (brl_conflict(&locks[i], &lock))
- goto fail;
- } else {
- /*
- * Our own locks don't conflict.
- */
- if (brl_conflict_other(&locks[i], &lock))
- goto fail;
+ if (brl_conflict(&locks[i], &lock)) {
+ goto fail;
}
}
}
diff --git a/source/locking/locking.c b/source/locking/locking.c
index a75388081e9..5824287e913 100644
--- a/source/locking/locking.c
+++ b/source/locking/locking.c
@@ -53,14 +53,11 @@ static const char *lock_type_name(enum brl_type lock_type)
/****************************************************************************
Utility function called to see if a file region is locked.
- If check_self is True, then checks on our own fd with the same locking context
- are still made. If check_self is False, then checks are not made on our own fd
- with the same locking context are not made.
****************************************************************************/
BOOL is_locked(files_struct *fsp,connection_struct *conn,
SMB_BIG_UINT count,SMB_BIG_UINT offset,
- enum brl_type lock_type, BOOL check_self)
+ enum brl_type lock_type)
{
int snum = SNUM(conn);
BOOL ret;
@@ -73,25 +70,16 @@ BOOL is_locked(files_struct *fsp,connection_struct *conn,
ret = !brl_locktest(fsp->dev, fsp->inode, fsp->fnum,
global_smbpid, sys_getpid(), conn->cnum,
- offset, count, lock_type, check_self);
-
- DEBUG(10,("is_locked: brl start=%.0f len=%.0f %s for file %s\n",
- (double)offset, (double)count, ret ? "locked" : "unlocked",
- fsp->fsp_name ));
+ offset, count, lock_type);
/*
* There is no lock held by an SMB daemon, check to
* see if there is a POSIX lock from a UNIX or NFS process.
*/
- if(!ret && lp_posix_locking(snum)) {
+ if(!ret && lp_posix_locking(snum))
ret = is_posix_locked(fsp, offset, count, lock_type);
- DEBUG(10,("is_locked: posix start=%.0f len=%.0f %s for file %s\n",
- (double)offset, (double)count, ret ? "locked" : "unlocked",
- fsp->fsp_name ));
- }
-
return ret;
}
@@ -168,7 +156,7 @@ BOOL do_unlock(files_struct *fsp,connection_struct *conn,
if (!OPEN_FSP(fsp) || !fsp->can_lock || (fsp->conn != conn)) {
*eclass = ERRDOS;
- *ecode = ERRbadfid;
+ *ecode = ERRlock;
return False;
}
@@ -187,7 +175,7 @@ BOOL do_unlock(files_struct *fsp,connection_struct *conn,
if (!ok) {
DEBUG(10,("do_unlock: returning ERRlock.\n" ));
*eclass = ERRDOS;
- *ecode = ERRnotlocked;
+ *ecode = ERRlock;
return False;
}
@@ -227,74 +215,15 @@ void locking_close_file(files_struct *fsp)
}
/****************************************************************************
- Delete a record if it is for a dead process, if check_self is true, then
- delete any records belonging to this pid also (there shouldn't be any).
- This function is only called on locking startup and shutdown.
-****************************************************************************/
-
-static int delete_fn(TDB_CONTEXT *ttdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
-{
- struct locking_data *data;
- share_mode_entry *shares;
- int i, del_count=0;
- pid_t mypid = sys_getpid();
- BOOL check_self = *(BOOL *)state;
-
- tdb_chainlock(tdb, kbuf);
-
- data = (struct locking_data *)dbuf.dptr;
- shares = (share_mode_entry *)(dbuf.dptr + sizeof(*data));
-
- for (i=0;i<data->num_share_mode_entries;) {
-
- if (check_self && (shares[i].pid == mypid)) {
- DEBUG(0,("locking : delete_fn. LOGIC ERROR ! Shutting down and a record for my pid (%u) exists !\n",
- (unsigned int)shares[i].pid ));
- } else if (!process_exists(shares[i].pid)) {
- DEBUG(0,("locking : delete_fn. LOGIC ERROR ! Entry for pid %u and it no longer exists !\n",
- (unsigned int)shares[i].pid ));
- } else {
- /* Process exists, leave this record alone. */
- i++;
- continue;
- }
-
- data->num_share_mode_entries--;
- memmove(&shares[i], &shares[i+1],
- dbuf.dsize - (sizeof(*data) + (i+1)*sizeof(*shares)));
- del_count++;
-
- }
-
- /* the record has shrunk a bit */
- dbuf.dsize -= del_count * sizeof(*shares);
-
- /* store it back in the database */
- if (data->num_share_mode_entries == 0)
- tdb_delete(ttdb, kbuf);
- else
- tdb_store(ttdb, kbuf, dbuf, TDB_REPLACE);
-
- tdb_chainunlock(tdb, kbuf);
- return 0;
-}
-
-/****************************************************************************
Initialise the locking functions.
****************************************************************************/
-
-static int open_read_only;
-
BOOL locking_init(int read_only)
{
- BOOL check_self = False;
-
brl_init(read_only);
- if (tdb)
- return True;
+ if (tdb) return True;
- tdb = tdb_open_log(lock_path("locking.tdb"),
+ tdb = tdb_open(lock_path("locking.tdb"),
0, TDB_CLEAR_IF_FIRST,
read_only?O_RDONLY:O_RDWR|O_CREAT,
0644);
@@ -307,35 +236,15 @@ BOOL locking_init(int read_only)
if (!posix_locking_init(read_only))
return False;
- /* delete any dead locks */
- if (!read_only)
- tdb_traverse(tdb, delete_fn, &check_self);
-
- open_read_only = read_only;
-
return True;
}
/*******************************************************************
Deinitialize the share_mode management.
******************************************************************/
-
BOOL locking_end(void)
{
- BOOL check_self = True;
-
- brl_shutdown(open_read_only);
- if (tdb) {
-
- /* delete any dead locks */
-
- if (!open_read_only)
- tdb_traverse(tdb, delete_fn, &check_self);
-
- if (tdb_close(tdb) != 0)
- return False;
- }
-
+ if (tdb && tdb_close(tdb) != 0) return False;
return True;
}
diff --git a/source/locking/posix.c b/source/locking/posix.c
index 9cfe25ed9d5..75fc6272b5a 100644
--- a/source/locking/posix.c
+++ b/source/locking/posix.c
@@ -1350,14 +1350,14 @@ BOOL posix_locking_init(int read_only)
return True;
if (!posix_lock_tdb)
- posix_lock_tdb = tdb_open_log(NULL, 0, TDB_INTERNAL,
+ posix_lock_tdb = tdb_open(NULL, 0, TDB_INTERNAL,
read_only?O_RDONLY:(O_RDWR|O_CREAT), 0644);
if (!posix_lock_tdb) {
DEBUG(0,("Failed to open POSIX byte range locking database.\n"));
return False;
}
if (!posix_pending_close_tdb)
- posix_pending_close_tdb = tdb_open_log(NULL, 0, TDB_INTERNAL,
+ posix_pending_close_tdb = tdb_open(NULL, 0, TDB_INTERNAL,
read_only?O_RDONLY:(O_RDWR|O_CREAT), 0644);
if (!posix_pending_close_tdb) {
DEBUG(0,("Failed to open POSIX pending close database.\n"));
diff --git a/source/msdfs/msdfs.c b/source/msdfs/msdfs.c
index b2530a3d7f2..b93590fcd24 100644
--- a/source/msdfs/msdfs.c
+++ b/source/msdfs/msdfs.c
@@ -30,298 +30,285 @@ extern uint32 global_client_caps;
/**********************************************************************
Create a tcon relative path from a dfs_path structure
**********************************************************************/
-
static void create_nondfs_path(char* pathname, struct dfs_path* pdp)
{
- pstrcpy(pathname,pdp->volumename);
- pstrcat(pathname,"\\");
- pstrcat(pathname,pdp->restofthepath);
+ pstrcpy(pathname,pdp->volumename);
+ pstrcat(pathname,"\\");
+ pstrcat(pathname,pdp->restofthepath);
}
/**********************************************************************
Parse the pathname of the form \hostname\service\volume\restofthepath
into the dfs_path structure
**********************************************************************/
-
static BOOL parse_dfs_path(char* pathname, struct dfs_path* pdp)
{
- pstring pathname_local;
- char* p,*temp;
-
- pstrcpy(pathname_local,pathname);
- p = temp = pathname_local;
-
- ZERO_STRUCTP(pdp);
-
- trim_string(temp,"\\","\\");
- DEBUG(10,("temp in parse_dfs_path: .%s. after trimming \\'s\n",temp));
-
- /* now tokenize */
- /* parse out hostname */
- p = strchr(temp,'\\');
- if(p == NULL)
- return False;
- *p = '\0';
- pstrcpy(pdp->hostname,temp);
- DEBUG(10,("hostname: %s\n",pdp->hostname));
-
- /* parse out servicename */
- temp = p+1;
- p = strchr(temp,'\\');
- if(p == NULL) {
- pstrcpy(pdp->servicename,temp);
- return True;
- }
- *p = '\0';
- pstrcpy(pdp->servicename,temp);
- DEBUG(10,("servicename: %s\n",pdp->servicename));
-
- /* parse out volumename */
- temp = p+1;
- p = strchr(temp,'\\');
- if(p == NULL) {
- pstrcpy(pdp->volumename,temp);
- return True;
- }
- *p = '\0';
- pstrcpy(pdp->volumename,temp);
- DEBUG(10,("volumename: %s\n",pdp->volumename));
-
- /* remaining path .. */
- pstrcpy(pdp->restofthepath,p+1);
- DEBUG(10,("rest of the path: %s\n",pdp->restofthepath));
- return True;
-}
-
-/********************************************************
- Fake up a connection struct for the VFS layer.
-*********************************************************/
-
-static BOOL create_conn_struct( connection_struct *conn, int snum, char *path)
-{
- ZERO_STRUCTP(conn);
- conn->service = snum;
- conn->connectpath = path;
-
- if (!vfs_init(conn)) {
- DEBUG(0,("create_conn_struct: vfs init failed.\n"));
- return False;
- }
- return True;
+ pstring pathname_local;
+ char* p,*temp;
+
+ pstrcpy(pathname_local,pathname);
+ p = temp = pathname_local;
+
+ ZERO_STRUCTP(pdp);
+
+ trim_string(temp,"\\","\\");
+ DEBUG(10,("temp in parse_dfs_path: .%s. after trimming \\'s\n",temp));
+
+ /* now tokenize */
+ /* parse out hostname */
+ p = strchr(temp,'\\');
+ if(p == NULL)
+ return False;
+ *p = '\0';
+ pstrcpy(pdp->hostname,temp);
+ DEBUG(10,("hostname: %s\n",pdp->hostname));
+
+ /* parse out servicename */
+ temp = p+1;
+ p = strchr(temp,'\\');
+ if(p == NULL)
+ {
+ pstrcpy(pdp->servicename,temp);
+ return True;
+ }
+ *p = '\0';
+ pstrcpy(pdp->servicename,temp);
+ DEBUG(10,("servicename: %s\n",pdp->servicename));
+
+ /* parse out volumename */
+ temp = p+1;
+ p = strchr(temp,'\\');
+ if(p == NULL)
+ {
+ pstrcpy(pdp->volumename,temp);
+ return True;
+ }
+ *p = '\0';
+ pstrcpy(pdp->volumename,temp);
+ DEBUG(10,("volumename: %s\n",pdp->volumename));
+
+ /* remaining path .. */
+ pstrcpy(pdp->restofthepath,p+1);
+ DEBUG(10,("rest of the path: %s\n",pdp->restofthepath));
+ return True;
}
/**********************************************************************
Forms a valid Unix pathname from the junction
**********************************************************************/
-
-static BOOL form_path_from_junction(struct junction_map* jn, char* path, int max_pathlen,
- connection_struct *conn)
+static BOOL form_path_from_junction(struct junction_map* jn, char* path,
+ int max_pathlen)
{
- int snum;
+ int snum;
- if(!path || !jn)
- return False;
+ if(!path || !jn)
+ return False;
- snum = lp_servicenumber(jn->service_name);
- if(snum < 0)
- return False;
+ snum = lp_servicenumber(jn->service_name);
+ if(snum < 0)
+ return False;
- safe_strcpy(path, lp_pathname(snum), max_pathlen-1);
- safe_strcat(path, "/", max_pathlen-1);
- strlower(jn->volume_name);
- safe_strcat(path, jn->volume_name, max_pathlen-1);
-
- if (!create_conn_struct(conn, snum, path))
- return False;
-
- return True;
+ safe_strcpy(path, lp_pathname(snum), max_pathlen-1);
+ safe_strcat(path, "/", max_pathlen-1);
+ strlower(jn->volume_name);
+ safe_strcat(path, jn->volume_name, max_pathlen-1);
+ return True;
}
/**********************************************************************
Creates a junction structure from the Dfs pathname
**********************************************************************/
-
BOOL create_junction(char* pathname, struct junction_map* jn)
{
- struct dfs_path dp;
+ struct dfs_path dp;
- parse_dfs_path(pathname,&dp);
-
- /* check if path is dfs : check hostname is the first token */
- if(global_myname && (strcasecmp(global_myname,dp.hostname)!=0)) {
- DEBUG(4,("create_junction: Invalid hostname %s in dfs path %s\n", dp.hostname, pathname));
- return False;
- }
-
- /* Check for a non-DFS share */
- if(!lp_msdfs_root(lp_servicenumber(dp.servicename))) {
- DEBUG(4,("create_junction: %s is not an msdfs root.\n", dp.servicename));
- return False;
- }
+ parse_dfs_path(pathname,&dp);
+
+ /* check if path is dfs : check hostname is the first token */
+ if(global_myname && (strcasecmp(global_myname,dp.hostname)!=0))
+ {
+ DEBUG(4,("create_junction: Invalid hostname %s in dfs path %s\n",
+ dp.hostname, pathname));
+ return False;
+ }
+
+ /* Check for a non-DFS share */
+ if(!lp_msdfs_root(lp_servicenumber(dp.servicename)))
+ {
+ DEBUG(4,("create_junction: %s is not an msdfs root.\n",
+ dp.servicename));
+ return False;
+ }
- pstrcpy(jn->service_name,dp.servicename);
- pstrcpy(jn->volume_name,dp.volumename);
- return True;
+ pstrcpy(jn->service_name,dp.servicename);
+ pstrcpy(jn->volume_name,dp.volumename);
+ return True;
}
/**********************************************************************
Parse the contents of a symlink to verify if it is an msdfs referral
A valid referral is of the form: msdfs:server1\share1,server2\share2
**********************************************************************/
-
static BOOL parse_symlink(char* buf,struct referral** preflist, int* refcount)
{
- pstring temp;
- char* prot;
- char* alt_path[MAX_REFERRAL_COUNT];
- int count=0, i;
- struct referral* reflist;
+ pstring temp;
+ char* prot;
+ char* alt_path[MAX_REFERRAL_COUNT];
+ int count=0, i;
+ struct referral* reflist;
- pstrcpy(temp,buf);
+ pstrcpy(temp,buf);
- prot = strtok(temp,":");
-
- if(!strequal(prot, "msdfs"))
- return False;
-
- /* It's an msdfs referral */
- if(!preflist)
- return True;
-
- /* parse out the alternate paths */
- while(((alt_path[count] = strtok(NULL,",")) != NULL) && count<MAX_REFERRAL_COUNT)
- count++;
-
- DEBUG(10,("parse_symlink: count=%d\n", count));
-
- reflist = *preflist = (struct referral*) malloc(count * sizeof(struct referral));
- if(reflist == NULL) {
- DEBUG(0,("parse_symlink: Malloc failed!\n"));
- return False;
- }
+ prot = strtok(temp,":");
+
+ if(!strequal(prot, "msdfs"))
+ return False;
+
+ /* It's an msdfs referral */
+ if(!preflist)
+ return True;
+
+ /* parse out the alternate paths */
+ while(((alt_path[count] = strtok(NULL,",")) != NULL)
+ && count<MAX_REFERRAL_COUNT)
+ count++;
+
+ DEBUG(10,("parse_symlink: count=%d\n", count));
+ reflist = *preflist = (struct referral*) malloc(count *
+ sizeof(struct referral));
+ if(reflist == NULL)
+ {
+ DEBUG(0,("parse_symlink: Malloc failed!\n"));
+ return False;
+ }
- for(i=0;i<count;i++) {
- /* replace / in the alternate path by a \ */
- char* p = strchr(alt_path[i],'/');
- if(p)
- *p = '\\';
-
- pstrcpy(reflist[i].alternate_path, "\\");
- pstrcat(reflist[i].alternate_path, alt_path[i]);
- reflist[i].proximity = 0;
- reflist[i].ttl = REFERRAL_TTL;
- DEBUG(10, ("parse_symlink: Created alt path: %s\n", reflist[i].alternate_path));
- }
-
- if(refcount)
- *refcount = count;
-
- return True;
+ for(i=0;i<count;i++)
+ {
+ /* replace / in the alternate path by a \ */
+ char* p = strchr(alt_path[i],'/');
+ if(p) *p = '\\';
+
+ pstrcpy(reflist[i].alternate_path, "\\");
+ pstrcat(reflist[i].alternate_path, alt_path[i]);
+ reflist[i].proximity = 0;
+ reflist[i].ttl = REFERRAL_TTL;
+ DEBUG(10, ("parse_symlink: Created alt path: %s\n",
+ reflist[i].alternate_path));
+ }
+
+ if(refcount)
+ *refcount = count;
+
+ return True;
}
/**********************************************************************
Returns true if the unix path is a valid msdfs symlink
**********************************************************************/
-
BOOL is_msdfs_link(connection_struct* conn, char* path)
{
- SMB_STRUCT_STAT st;
- pstring referral;
- int referral_len = 0;
+ SMB_STRUCT_STAT st;
+ pstring referral;
+ int referral_len = 0;
- if(!path || !conn)
- return False;
+ if(!path || !conn)
+ return False;
- strlower(path);
+ strlower(path);
- if(conn->vfs_ops.lstat(conn,dos_to_unix(path,False),&st) != 0) {
- DEBUG(5,("is_msdfs_link: %s does not exist.\n",path));
- return False;
- }
+ if(conn->vfs_ops.lstat(conn,dos_to_unix(path,False),&st) != 0)
+ {
+ DEBUG(5,("is_msdfs_link: %s does not exist.\n",path));
+ return False;
+ }
- if(S_ISLNK(st.st_mode)) {
- /* open the link and read it */
- referral_len = conn->vfs_ops.readlink(conn, path, referral, sizeof(pstring));
- if(referral_len == -1)
- DEBUG(0,("is_msdfs_link: Error reading msdfs link %s: %s\n", path, strerror(errno)));
-
- referral[referral_len] = '\0';
- DEBUG(5,("is_msdfs_link: %s -> %s\n",path,referral));
- if(parse_symlink(referral, NULL, NULL))
- return True;
- }
- return False;
+ if(S_ISLNK(st.st_mode))
+ {
+ /* open the link and read it */
+ referral_len = readlink(path, referral, sizeof(pstring));
+ if(referral_len == -1)
+ DEBUG(0,("is_msdfs_link: Error reading msdfs link %s: %s\n",
+ path, strerror(errno)));
+
+ referral[referral_len] = '\0';
+ DEBUG(5,("is_msdfs_link: %s -> %s\n",path,referral));
+ if(parse_symlink(referral, NULL, NULL))
+ return True;
+ }
+ return False;
}
/**********************************************************************
Fills in the junction_map struct with the referrals from the
symbolic link
**********************************************************************/
-
BOOL get_referred_path(struct junction_map* junction)
{
- pstring path;
- pstring buf;
- SMB_STRUCT_STAT st;
- connection_struct conns;
- connection_struct *conn = &conns;
-
- if(!form_path_from_junction(junction, path, sizeof(path), conn))
- return False;
+ fstring path;
+ pstring buf;
+ SMB_STRUCT_STAT st;
+
+ if(!form_path_from_junction(junction, path, sizeof(path)))
+ return False;
- DEBUG(5,("get_referred_path: lstat target: %s\n", path));
+ DEBUG(5,("get_referred_path: lstat target: %s\n", path));
- if(conn->vfs_ops.lstat(conn,dos_to_unix(path, False),&st) != 0) {
- DEBUG(5,("get_referred_path: %s does not exist.\n",path));
- return False;
- }
+ if(lstat(dos_to_unix(path, False),&st) != 0)
+ {
+ DEBUG(5,("get_referred_path: %s does not exist.\n",path));
+ return False;
+ }
- if(S_ISLNK(st.st_mode)) {
- /* open the link and read it to get the dfs referral */
- int linkcnt = 0;
- linkcnt = conn->vfs_ops.readlink(conn, path, buf, sizeof(buf));
- buf[linkcnt] = '\0';
- DEBUG(5,("get_referred_path: Referral: %s\n",buf));
- if(parse_symlink(buf, &junction->referral_list, &junction->referral_count))
- return True;
- }
- return False;
+ if(S_ISLNK(st.st_mode))
+ {
+ /* open the link and read it to get the dfs referral */
+ int linkcnt = 0;
+ linkcnt = readlink(path, buf, sizeof(buf));
+ buf[linkcnt] = '\0';
+ DEBUG(5,("get_referred_path: Referral: %s\n",buf));
+ if(parse_symlink(buf, &junction->referral_list,
+ &junction->referral_count))
+ return True;
+ }
+ return False;
}
/**************************************************************
Decides if given pathname is Dfs and if it should be redirected
Converts pathname to non-dfs format if Dfs redirection not required
**************************************************************/
-
BOOL dfs_redirect(char* pathname, connection_struct* conn)
{
- struct dfs_path dp;
- pstring temp;
- fstring path;
-
- pstrcpy(temp,pathname);
-
- if(!lp_msdfs_root(SNUM(conn)) )
- return False;
-
- parse_dfs_path(pathname,&dp);
-
- if(global_myname && (strcasecmp(global_myname,dp.hostname)!=0))
- return False;
-
- /* check if need to redirect */
- fstrcpy(path, conn->connectpath);
- fstrcat(path, "/");
- fstrcat(path, dp.volumename);
- if(is_msdfs_link(conn, path)) {
- DEBUG(4,("dfs_redirect: Redirecting %s\n",temp));
- return True;
- } else {
- create_nondfs_path(pathname,&dp);
- DEBUG(4,("dfs_redirect: Not redirecting %s. Converted to non-dfs pathname \'%s\'\n",
- temp,pathname));
- return False;
- }
+ struct dfs_path dp;
+ pstring temp;
+ fstring path;
+
+ pstrcpy(temp,pathname);
+
+ if(!lp_msdfs_root(SNUM(conn)) )
+ return False;
+
+ parse_dfs_path(pathname,&dp);
+
+ if(global_myname && (strcasecmp(global_myname,dp.hostname)!=0))
+ return False;
+
+ /* check if need to redirect */
+ fstrcpy(path, conn->connectpath);
+ fstrcat(path, "/");
+ fstrcat(path, dp.volumename);
+ if(is_msdfs_link(conn, path))
+ {
+ DEBUG(4,("dfs_redirect: Redirecting %s\n",temp));
+ return True;
+ }
+ else
+ {
+ create_nondfs_path(pathname,&dp);
+ DEBUG(4,("dfs_redirect: Not redirecting %s. Converted to non-dfs pathname \'%s\'\n",
+ temp,pathname));
+ return False;
+ }
}
/*
@@ -329,434 +316,450 @@ BOOL dfs_redirect(char* pathname, connection_struct* conn)
If the findfirst is for the dfs junction, then no redirection,
if it is for the underlying directory contents, redirect.
*/
-
BOOL dfs_findfirst_redirect(char* pathname, connection_struct* conn)
{
- struct dfs_path dp;
+ struct dfs_path dp;
- pstring temp;
-
- pstrcpy(temp,pathname);
-
- /* Is the path Dfs-redirectable? */
- if(!dfs_redirect(temp,conn)) {
- pstrcpy(pathname,temp);
- return False;
- }
-
- parse_dfs_path(pathname,&dp);
- DEBUG(8,("dfs_findfirst_redirect: path %s is in Dfs. dp.restofthepath=.%s.\n",
- pathname,dp.restofthepath));
- if(!(*(dp.restofthepath))) {
- create_nondfs_path(pathname,&dp);
- return False;
- }
-
- return True;
+ pstring temp;
+
+ pstrcpy(temp,pathname);
+
+ /* Is the path Dfs-redirectable? */
+ if(!dfs_redirect(temp,conn))
+ {
+ pstrcpy(pathname,temp);
+ return False;
+ }
+
+ parse_dfs_path(pathname,&dp);
+ DEBUG(8,("dfs_findfirst_redirect: path %s is in Dfs. dp.restofthepath=.%s.\n",pathname,dp.restofthepath));
+ if(*(dp.restofthepath))
+ return True;
+ else
+ {
+ create_nondfs_path(pathname,&dp);
+ return False;
+ }
}
static int setup_ver2_dfs_referral(char* pathname, char** ppdata,
struct junction_map* junction,
BOOL self_referral)
{
- char* pdata = *ppdata;
-
- unsigned char uni_requestedpath[1024];
- int uni_reqpathoffset1,uni_reqpathoffset2;
- int uni_curroffset;
- int requestedpathlen=0;
- int offset;
- int reply_size = 0;
- int i=0;
-
- DEBUG(10,("setting up version2 referral\nRequested path:\n"));
-
- requestedpathlen = (dos_struni2(uni_requestedpath,pathname,512)+1)*2;
-
- dump_data(10,uni_requestedpath,requestedpathlen);
-
- DEBUG(10,("ref count = %u\n",junction->referral_count));
-
- uni_reqpathoffset1 = REFERRAL_HEADER_SIZE +
- VERSION2_REFERRAL_SIZE * junction->referral_count;
-
- uni_reqpathoffset2 = uni_reqpathoffset1 + requestedpathlen;
-
- uni_curroffset = uni_reqpathoffset2 + requestedpathlen;
-
- reply_size = REFERRAL_HEADER_SIZE + VERSION2_REFERRAL_SIZE*junction->referral_count +
- 2 * requestedpathlen;
- DEBUG(10,("reply_size: %u\n",reply_size));
-
- /* add up the unicode lengths of all the referral paths */
- for(i=0;i<junction->referral_count;i++) {
- DEBUG(10,("referral %u : %s\n",i,junction->referral_list[i].alternate_path));
- reply_size += (strlen(junction->referral_list[i].alternate_path)+1)*2;
- }
-
- DEBUG(10,("reply_size = %u\n",reply_size));
- /* add the unexplained 0x16 bytes */
- reply_size += 0x16;
-
- pdata = *ppdata = Realloc(pdata,reply_size);
- if(pdata == NULL) {
- DEBUG(0,("malloc failed for Realloc!\n"));
- return -1;
- }
-
- /* copy in the dfs requested paths.. required for offset calculations */
- memcpy(pdata+uni_reqpathoffset1,uni_requestedpath,requestedpathlen);
- memcpy(pdata+uni_reqpathoffset2,uni_requestedpath,requestedpathlen);
-
- /* create the header */
- SSVAL(pdata,0,requestedpathlen-2); /* path consumed */
- SSVAL(pdata,2,junction->referral_count); /* number of referral in this pkt */
- if(self_referral)
- SIVAL(pdata,4,DFSREF_REFERRAL_SERVER | DFSREF_STORAGE_SERVER);
- else
- SIVAL(pdata,4,DFSREF_STORAGE_SERVER);
-
- offset = 8;
- /* add the referral elements */
- for(i=0;i<junction->referral_count;i++) {
- struct referral* ref = &(junction->referral_list[i]);
- int unilen;
-
- SSVAL(pdata,offset,2); /* version 2 */
- SSVAL(pdata,offset+2,VERSION2_REFERRAL_SIZE);
- if(self_referral)
- SSVAL(pdata,offset+4,1);
- else
- SSVAL(pdata,offset+4,0);
- SSVAL(pdata,offset+6,0); /* ref_flags :use path_consumed bytes? */
- SIVAL(pdata,offset+8,ref->proximity);
- SIVAL(pdata,offset+12,ref->ttl);
-
- SSVAL(pdata,offset+16,uni_reqpathoffset1-offset);
- SSVAL(pdata,offset+18,uni_reqpathoffset2-offset);
- /* copy referred path into current offset */
- unilen = (dos_struni2(pdata+uni_curroffset,ref->alternate_path,512) +1)*2;
- SSVAL(pdata,offset+20,uni_curroffset-offset);
-
- uni_curroffset += unilen;
- offset += VERSION2_REFERRAL_SIZE;
- }
- /* add in the unexplained 22 (0x16) bytes at the end */
- memset(pdata+uni_curroffset,'\0',0x16);
- free(junction->referral_list);
- return reply_size;
+ char* pdata = *ppdata;
+
+ unsigned char uni_requestedpath[1024];
+ int uni_reqpathoffset1,uni_reqpathoffset2;
+ int uni_curroffset;
+ int requestedpathlen=0;
+ int offset;
+ int reply_size = 0;
+ int i=0;
+
+ DEBUG(10,("setting up version2 referral\nRequested path:\n"));
+
+ requestedpathlen = (dos_struni2(uni_requestedpath,pathname,512)+1)*2;
+
+ dump_data(10,uni_requestedpath,requestedpathlen);
+
+ DEBUG(10,("ref count = %u\n",junction->referral_count));
+
+ uni_reqpathoffset1 = REFERRAL_HEADER_SIZE +
+ VERSION2_REFERRAL_SIZE * junction->referral_count;
+
+ uni_reqpathoffset2 = uni_reqpathoffset1 + requestedpathlen;
+
+ uni_curroffset = uni_reqpathoffset2 + requestedpathlen;
+
+ reply_size = REFERRAL_HEADER_SIZE + VERSION2_REFERRAL_SIZE*junction->referral_count +
+ 2 * requestedpathlen;
+ DEBUG(10,("reply_size: %u\n",reply_size));
+
+ /* add up the unicode lengths of all the referral paths */
+ for(i=0;i<junction->referral_count;i++)
+ {
+ DEBUG(10,("referral %u : %s\n",i,junction->referral_list[i].alternate_path));
+ reply_size += (strlen(junction->referral_list[i].alternate_path)+1)*2;
+ }
+
+ DEBUG(10,("reply_size = %u\n",reply_size));
+ /* add the unexplained 0x16 bytes */
+ reply_size += 0x16;
+
+ pdata = *ppdata = Realloc(pdata,reply_size);
+ if(pdata == NULL)
+ {
+ DEBUG(0,("malloc failed for Realloc!\n"));
+ return -1;
+ }
+
+ /* copy in the dfs requested paths.. required for offset calculations */
+ memcpy(pdata+uni_reqpathoffset1,uni_requestedpath,requestedpathlen);
+ memcpy(pdata+uni_reqpathoffset2,uni_requestedpath,requestedpathlen);
+
+
+ /* create the header */
+ SSVAL(pdata,0,requestedpathlen-2); /* path consumed */
+ SSVAL(pdata,2,junction->referral_count); /* number of referral in this pkt */
+ if(self_referral)
+ SIVAL(pdata,4,DFSREF_REFERRAL_SERVER | DFSREF_STORAGE_SERVER);
+ else
+ SIVAL(pdata,4,DFSREF_STORAGE_SERVER);
+
+ offset = 8;
+ /* add the referral elements */
+ for(i=0;i<junction->referral_count;i++)
+ {
+ struct referral* ref = &(junction->referral_list[i]);
+ int unilen;
+
+ SSVAL(pdata,offset,2); /* version 2 */
+ SSVAL(pdata,offset+2,VERSION2_REFERRAL_SIZE);
+ if(self_referral)
+ SSVAL(pdata,offset+4,1);
+ else
+ SSVAL(pdata,offset+4,0);
+ SSVAL(pdata,offset+6,0); /* ref_flags :use path_consumed bytes? */
+ SIVAL(pdata,offset+8,ref->proximity);
+ SIVAL(pdata,offset+12,ref->ttl);
+
+ SSVAL(pdata,offset+16,uni_reqpathoffset1-offset);
+ SSVAL(pdata,offset+18,uni_reqpathoffset2-offset);
+ /* copy referred path into current offset */
+ unilen = (dos_struni2(pdata+uni_curroffset,ref->alternate_path,512)
+ +1)*2;
+ SSVAL(pdata,offset+20,uni_curroffset-offset);
+
+ uni_curroffset += unilen;
+ offset += VERSION2_REFERRAL_SIZE;
+ }
+ /* add in the unexplained 22 (0x16) bytes at the end */
+ memset(pdata+uni_curroffset,'\0',0x16);
+ free(junction->referral_list);
+ return reply_size;
}
static int setup_ver3_dfs_referral(char* pathname, char** ppdata,
struct junction_map* junction,
BOOL self_referral)
{
- char* pdata = *ppdata;
+ char* pdata = *ppdata;
- unsigned char uni_reqpath[1024];
- int uni_reqpathoffset1, uni_reqpathoffset2;
- int uni_curroffset;
- int reply_size = 0;
+ unsigned char uni_reqpath[1024];
+ int uni_reqpathoffset1, uni_reqpathoffset2;
+ int uni_curroffset;
+ int reply_size = 0;
- int reqpathlen = 0;
- int offset,i=0;
+ int reqpathlen = 0;
+ int offset,i=0;
- DEBUG(10,("setting up version3 referral\n"));
+ DEBUG(10,("setting up version3 referral\n"));
- reqpathlen = (dos_struni2(uni_reqpath,pathname,512)+1)*2;
+ reqpathlen = (dos_struni2(uni_reqpath,pathname,512)+1)*2;
- dump_data(10,uni_reqpath,reqpathlen);
-
- uni_reqpathoffset1 = REFERRAL_HEADER_SIZE + VERSION3_REFERRAL_SIZE * junction->referral_count;
- uni_reqpathoffset2 = uni_reqpathoffset1 + reqpathlen;
- reply_size = uni_curroffset = uni_reqpathoffset2 + reqpathlen;
-
- for(i=0;i<junction->referral_count;i++) {
- DEBUG(10,("referral %u : %s\n",i,junction->referral_list[i].alternate_path));
- reply_size += (strlen(junction->referral_list[i].alternate_path)+1)*2;
- }
-
- pdata = *ppdata = Realloc(pdata,reply_size);
- if(pdata == NULL) {
- DEBUG(0,("version3 referral setup: malloc failed for Realloc!\n"));
- return -1;
- }
+ dump_data(10,uni_reqpath,reqpathlen);
+
+ uni_reqpathoffset1 = REFERRAL_HEADER_SIZE + VERSION3_REFERRAL_SIZE *
+ junction->referral_count;
+ uni_reqpathoffset2 = uni_reqpathoffset1 + reqpathlen;
+ reply_size = uni_curroffset = uni_reqpathoffset2 + reqpathlen;
+
+ for(i=0;i<junction->referral_count;i++)
+ {
+ DEBUG(10,("referral %u : %s\n",i,junction->referral_list[i].alternate_path));
+ reply_size += (strlen(junction->referral_list[i].alternate_path)+1)*2;
+ }
+
+ pdata = *ppdata = Realloc(pdata,reply_size);
+ if(pdata == NULL)
+ {
+ DEBUG(0,("version3 referral setup: malloc failed for Realloc!\n"));
+ return -1;
+ }
- /* create the header */
- SSVAL(pdata,0,reqpathlen-2); /* path consumed */
- SSVAL(pdata,2,junction->referral_count); /* number of referral in this pkt */
- if(self_referral)
- SIVAL(pdata,4,DFSREF_REFERRAL_SERVER | DFSREF_STORAGE_SERVER);
- else
- SIVAL(pdata,4,DFSREF_STORAGE_SERVER);
+ /* create the header */
+ SSVAL(pdata,0,reqpathlen-2); /* path consumed */
+ SSVAL(pdata,2,junction->referral_count); /* number of referral in this pkt */
+ if(self_referral)
+ SIVAL(pdata,4,DFSREF_REFERRAL_SERVER | DFSREF_STORAGE_SERVER);
+ else
+ SIVAL(pdata,4,DFSREF_STORAGE_SERVER);
- /* copy in the reqpaths */
- memcpy(pdata+uni_reqpathoffset1,uni_reqpath,reqpathlen);
- memcpy(pdata+uni_reqpathoffset2,uni_reqpath,reqpathlen);
+ /* copy in the reqpaths */
+ memcpy(pdata+uni_reqpathoffset1,uni_reqpath,reqpathlen);
+ memcpy(pdata+uni_reqpathoffset2,uni_reqpath,reqpathlen);
- offset = 8;
- for(i=0;i<junction->referral_count;i++) {
- struct referral* ref = &(junction->referral_list[i]);
- int unilen;
-
- SSVAL(pdata,offset,3); /* version 3 */
- SSVAL(pdata,offset+2,VERSION3_REFERRAL_SIZE);
- if(self_referral)
- SSVAL(pdata,offset+4,1);
- else
- SSVAL(pdata,offset+4,0);
-
- SSVAL(pdata,offset+6,0); /* ref_flags :use path_consumed bytes? */
- SIVAL(pdata,offset+8,ref->ttl);
+ offset = 8;
+ for(i=0;i<junction->referral_count;i++)
+ {
+ struct referral* ref = &(junction->referral_list[i]);
+ int unilen;
+
+ SSVAL(pdata,offset,3); /* version 3 */
+ SSVAL(pdata,offset+2,VERSION3_REFERRAL_SIZE);
+ if(self_referral)
+ SSVAL(pdata,offset+4,1);
+ else
+ SSVAL(pdata,offset+4,0);
+
+ SSVAL(pdata,offset+6,0); /* ref_flags :use path_consumed bytes? */
+ SIVAL(pdata,offset+8,ref->ttl);
- SSVAL(pdata,offset+12,uni_reqpathoffset1-offset);
- SSVAL(pdata,offset+14,uni_reqpathoffset2-offset);
- /* copy referred path into current offset */
- unilen = (dos_struni2(pdata+uni_curroffset,ref->alternate_path,512) +1)*2;
- SSVAL(pdata,offset+16,uni_curroffset-offset);
- /* copy 0x10 bytes of 00's in the ServiceSite GUID */
- memset(pdata+offset+18,'\0',16);
-
- uni_curroffset += unilen;
- offset += VERSION3_REFERRAL_SIZE;
- }
- free(junction->referral_list);
- return reply_size;
+ SSVAL(pdata,offset+12,uni_reqpathoffset1-offset);
+ SSVAL(pdata,offset+14,uni_reqpathoffset2-offset);
+ /* copy referred path into current offset */
+ unilen = (dos_struni2(pdata+uni_curroffset,ref->alternate_path,512)
+ +1)*2;
+ SSVAL(pdata,offset+16,uni_curroffset-offset);
+ /* copy 0x10 bytes of 00's in the ServiceSite GUID */
+ memset(pdata+offset+18,'\0',16);
+
+ uni_curroffset += unilen;
+ offset += VERSION3_REFERRAL_SIZE;
+ }
+ free(junction->referral_list);
+ return reply_size;
}
+
+
/******************************************************************
* Set up the Dfs referral for the dfs pathname
******************************************************************/
-
-int setup_dfs_referral(char* pathname, int max_referral_level, char** ppdata)
+int setup_dfs_referral(char* pathname, int max_referral_level,
+ char** ppdata)
{
- struct junction_map junction;
+ struct junction_map junction;
- BOOL self_referral;
+ BOOL self_referral;
- int reply_size = 0;
+ int reply_size = 0;
- ZERO_STRUCT(junction);
+ ZERO_STRUCT(junction);
- if(!create_junction(pathname, &junction))
- return -1;
+ if(!create_junction(pathname, &junction))
+ return -1;
- /* get the junction entry */
- if(!get_referred_path(&junction)) {
-
- /* refer the same pathname, create a standard referral struct */
- struct referral* ref;
- self_referral = True;
- junction.referral_count = 1;
- if((ref = (struct referral*) malloc(sizeof(struct referral))) == NULL) {
- DEBUG(0,("malloc failed for referral\n"));
- return -1;
- }
+ /* get the junction entry */
+ if(!get_referred_path(&junction))
+ {
- pstrcpy(ref->alternate_path,pathname);
- ref->proximity = 0;
- ref->ttl = REFERRAL_TTL;
- junction.referral_list = ref;
- } else {
- self_referral = False;
- if( DEBUGLVL( 3 ) ) {
- int i=0;
- dbgtext("setup_dfs_referral: Path %s to alternate path(s):",pathname);
- for(i=0;i<junction.referral_count;i++)
- dbgtext(" %s",junction.referral_list[i].alternate_path);
- dbgtext(".\n");
- }
+ /* refer the same pathname, create a standard referral struct */
+ struct referral* ref;
+ self_referral = True;
+ junction.referral_count = 1;
+ if((ref = (struct referral*) malloc(sizeof(struct referral))) == NULL)
+ {
+ DEBUG(0,("malloc failed for referral\n"));
+ return -1;
}
- /* create the referral depeding on version */
- DEBUG(10,("max_referral_level :%d\n",max_referral_level));
- if(max_referral_level<2 || max_referral_level>3)
- max_referral_level = 2;
-
- switch(max_referral_level) {
- case 2:
- {
- reply_size = setup_ver2_dfs_referral(pathname, ppdata, &junction, self_referral);
- break;
- }
- case 3:
- {
- reply_size = setup_ver3_dfs_referral(pathname, ppdata, &junction, self_referral);
- break;
- }
- default:
- {
- DEBUG(0,("setup_dfs_referral: Invalid dfs referral version: %d\n", max_referral_level));
- return -1;
- }
+ pstrcpy(ref->alternate_path,pathname);
+ ref->proximity = 0;
+ ref->ttl = REFERRAL_TTL;
+ junction.referral_list = ref;
+ }
+ else
+ {
+ self_referral = False;
+ if( DEBUGLVL( 3 ) )
+ {
+ int i=0;
+ dbgtext("setup_dfs_referral: Path %s to alternate path(s):",pathname);
+ for(i=0;i<junction.referral_count;i++)
+ dbgtext(" %s",junction.referral_list[i].alternate_path);
+ dbgtext(".\n");
}
+ }
- DEBUG(10,("DFS Referral pdata:\n"));
- dump_data(10,*ppdata,reply_size);
- return reply_size;
+ /* create the referral depeding on version */
+ DEBUG(10,("max_referral_level :%d\n",max_referral_level));
+ if(max_referral_level<2 || max_referral_level>3) max_referral_level = 2;
+
+ switch(max_referral_level)
+ {
+ case 2:
+ {
+ reply_size = setup_ver2_dfs_referral(pathname, ppdata, &junction,
+ self_referral);
+ break;
+ }
+ case 3:
+ {
+ reply_size = setup_ver3_dfs_referral(pathname, ppdata, &junction,
+ self_referral);
+ break;
+ }
+ default:
+ {
+ DEBUG(0,("setup_dfs_referral: Invalid dfs referral version: %d\n",
+ max_referral_level));
+ return -1;
+ }
+ }
+
+ DEBUG(10,("DFS Referral pdata:\n"));
+ dump_data(10,*ppdata,reply_size);
+ return reply_size;
}
int dfs_path_error(char* inbuf, char* outbuf)
{
- enum remote_arch_types ra_type = get_remote_arch();
- BOOL NT_arch = ((ra_type==RA_WINNT) || (ra_type == RA_WIN2K));
- if(NT_arch && (global_client_caps & (CAP_NT_SMBS | CAP_STATUS32)) ) {
- SSVAL(outbuf,smb_flg2,SVAL(outbuf,smb_flg2) | FLAGS2_32_BIT_ERROR_CODES);
- return(ERROR(0,0xc0000000|NT_STATUS_PATH_NOT_COVERED));
- }
- return(ERROR(ERRSRV,ERRbadpath));
+ enum remote_arch_types ra_type = get_remote_arch();
+ BOOL NT_arch = ((ra_type==RA_WINNT) || (ra_type == RA_WIN2K));
+ if(NT_arch && (global_client_caps & (CAP_NT_SMBS | CAP_STATUS32)) )
+ {
+ SSVAL(outbuf,smb_flg2,SVAL(outbuf,smb_flg2) | FLAGS2_32_BIT_ERROR_CODES);
+ return(ERROR(0,0xc0000000|NT_STATUS_PATH_NOT_COVERED));
+ }
+ return(ERROR(ERRSRV,ERRbadpath));
}
/**********************************************************************
The following functions are called by the NETDFS RPC pipe functions
**********************************************************************/
-
BOOL create_msdfs_link(struct junction_map* jn, BOOL exists)
{
- pstring path;
- pstring msdfs_link;
- connection_struct conns;
- connection_struct *conn = &conns;
- int i=0;
-
- if(!form_path_from_junction(jn, path, sizeof(path), conn))
- return False;
+ pstring path;
+ pstring msdfs_link;
+ int i=0;
+
+ if(!form_path_from_junction(jn, path, sizeof(path)))
+ return False;
- /* form the msdfs_link contents */
- pstrcpy(msdfs_link, "msdfs:");
- for(i=0; i<jn->referral_count; i++) {
- char* refpath = jn->referral_list[i].alternate_path;
+ /* form the msdfs_link contents */
+ pstrcpy(msdfs_link, "msdfs:");
+ for(i=0; i<jn->referral_count; i++)
+ {
+ char* refpath = jn->referral_list[i].alternate_path;
- trim_string(refpath, "\\", "\\");
- if(*refpath == '\0')
- continue;
+ trim_string(refpath, "\\", "\\");
+ if(*refpath == '\0')
+ continue;
- if(i>0)
- pstrcat(msdfs_link, ",");
+ if(i>0)
+ pstrcat(msdfs_link, ",");
- pstrcat(msdfs_link, refpath);
- }
-
- DEBUG(5,("create_msdfs_link: Creating new msdfs link: %s -> %s\n", path, msdfs_link));
-
- if(exists)
- if(conn->vfs_ops.unlink(conn,path)!=0)
- return False;
-
- if(conn->vfs_ops.symlink(conn, msdfs_link, path) < 0) {
- DEBUG(1,("create_msdfs_link: symlink failed %s -> %s\nError: %s\n",
- path, msdfs_link, strerror(errno)));
- return False;
- }
- return True;
+ pstrcat(msdfs_link, refpath);
+ }
+
+ DEBUG(5,("create_msdfs_link: Creating new msdfs link: %s -> %s\n",
+ path, msdfs_link));
+
+ if(exists)
+ if(unlink(path)!=0)
+ return False;
+
+ if(symlink(msdfs_link, path) < 0)
+ {
+ DEBUG(1,("create_msdfs_link: symlink failed %s -> %s\nError: %s\n",
+ path, msdfs_link, strerror(errno)));
+ return False;
+ }
+ return True;
}
BOOL remove_msdfs_link(struct junction_map* jn)
{
- pstring path;
- connection_struct conns;
- connection_struct *conn = &conns;
+ pstring path;
- if(!form_path_from_junction(jn, path, sizeof(path), conn))
- return False;
+ if(!form_path_from_junction(jn, path, sizeof(path)))
+ return False;
- if(conn->vfs_ops.unlink(conn, path)!=0)
- return False;
+ if(unlink(path)!=0)
+ return False;
- return True;
+ return True;
}
static BOOL form_junctions(int snum, struct junction_map* jn, int* jn_count)
{
- int cnt = *jn_count;
- DIR *dirp;
- char* dname;
- pstring connect_path;
- char* service_name = lp_servicename(snum);
- connection_struct conns;
- connection_struct *conn = &conns;
-
- pstrcpy(connect_path,lp_pathname(snum));
-
- if(*connect_path == '\0')
- return False;
-
- /*
- * Fake up a connection struct for the VFS layer.
- */
+ int cnt = *jn_count;
+ DIR *dirp;
+ char* dname;
- if (!create_conn_struct(conn, snum, connect_path))
- return False;
-
- /* form a junction for the msdfs root - convention */
- /*
- pstrpcy(jn[cnt].service_name, service_name);
- jn[cnt].volume_name[0] = '\0';
- jn[cnt].referral_count = 1;
+ char* connect_path = lp_pathname(snum);
+ char* service_name = lp_servicename(snum);
+
+ if(*connect_path == '\0')
+ return False;
+
+ /* form a junction for the msdfs root - convention */
+ /*
+ pstrpcy(jn[cnt].service_name, service_name);
+ jn[cnt].volume_name[0] = '\0';
+ jn[cnt].referral_count = 1;
- slprintf(alt_path,sizeof(alt_path)-1"\\\\%s\\%s", global_myname, service_name);
- jn[cnt].referral_l
- */
-
- dirp = conn->vfs_ops.opendir(conn, dos_to_unix(connect_path,False));
- if(!dirp)
- return False;
-
- while((dname = vfs_readdirname(conn, dirp)) != NULL) {
- SMB_STRUCT_STAT st;
- pstring pathreal;
- fstring buf;
- int buflen = 0;
- pstrcpy(pathreal, connect_path);
- pstrcat(pathreal, "/");
- pstrcat(pathreal, dname);
+ slprintf(alt_path,sizeof(alt_path)-1"\\\\%s\\%s", global_myname, service_name);
+ jn[cnt].referral_l
+ */
+
+ dirp = opendir(connect_path);
+ if(!dirp)
+ return False;
+
+ while((dname = readdirname(dirp)) != NULL)
+ {
+ SMB_STRUCT_STAT st;
+ pstring pathreal;
+ fstring buf;
+ int buflen = 0;
+ pstrcpy(pathreal, connect_path);
+ pstrcat(pathreal, "/");
+ pstrcat(pathreal, dname);
- if(conn->vfs_ops.lstat(conn,pathreal,&st) != 0) {
- DEBUG(4,("lstat error for %s: %s\n",pathreal, strerror(errno)));
- continue;
- }
- if(S_ISLNK(st.st_mode)) {
- buflen = conn->vfs_ops.readlink(conn, dos_to_unix(pathreal,False), buf, sizeof(fstring));
- buf[buflen] = '\0';
- if(parse_symlink(buf, &(jn[cnt].referral_list), &(jn[cnt].referral_count))) {
- pstrcpy(jn[cnt].service_name, service_name);
- pstrcpy(jn[cnt].volume_name, dname);
- cnt++;
- }
- }
+ if(lstat(pathreal,&st) != 0)
+ {
+ DEBUG(4,("lstat error for %s: %s\n",pathreal, strerror(errno)));
+ continue;
}
+ if(S_ISLNK(st.st_mode))
+ {
+ buflen = readlink(pathreal, buf, sizeof(fstring));
+ buf[buflen] = '\0';
+ if(parse_symlink(buf, &(jn[cnt].referral_list),
+ &(jn[cnt].referral_count)))
+ {
+ pstrcpy(jn[cnt].service_name, service_name);
+ pstrcpy(jn[cnt].volume_name, dname);
+ cnt++;
+ }
+ }
+ }
- conn->vfs_ops.closedir(conn,dirp);
- *jn_count = cnt;
- return True;
+ closedir(dirp);
+ *jn_count = cnt;
+ return True;
}
int enum_msdfs_links(struct junction_map* jn)
{
- int i=0;
- int jn_count = 0;
-
- if(!lp_host_msdfs())
- return -1;
-
- for(i=0;*lp_servicename(i);i++) {
- if(lp_msdfs_root(i))
- form_junctions(i,jn,&jn_count);
- }
- return jn_count;
+ int i=0;
+ int jn_count = 0;
+
+ if(!lp_host_msdfs())
+ return -1;
+
+ for(i=0;*lp_servicename(i);i++)
+ {
+ if(lp_msdfs_root(i))
+ form_junctions(i,jn,&jn_count);
+ }
+ return jn_count;
}
#else
/* Stub functions if WITH_MSDFS not defined */
- int setup_dfs_referral(char* pathname, int max_referral_level, char** ppdata)
+int setup_dfs_referral(char* pathname, int max_referral_level,
+ char** ppdata)
{
- return -1;
+ return -1;
}
- BOOL is_msdfs_link(connection_struct* conn, char* path)
+BOOL is_msdfs_link(connection_struct* conn, char* path)
{
- return False;
+ return False;
}
#endif
diff --git a/source/nmbd/nmbd.c b/source/nmbd/nmbd.c
index 2fab8f6bc7b..46f6056e7c0 100644
--- a/source/nmbd/nmbd.c
+++ b/source/nmbd/nmbd.c
@@ -83,7 +83,7 @@ static void sig_term(int sig)
/**************************************************************************** **
catch a sighup
**************************************************************************** */
-static VOLATILE sig_atomic_t reload_after_sighup = False;
+static VOLATILE SIG_ATOMIC_T reload_after_sighup = False;
static void sig_hup(int sig)
{
@@ -460,9 +460,7 @@ static void process(void)
* This will only work to a Samba WINS server.
* (nmbd_browsesync.c)
*/
- if (lp_enhanced_browsing()) {
- collect_all_workgroup_names_from_wins_server(t);
- }
+ collect_all_workgroup_names_from_wins_server(t);
/*
* Go through the response record queue and time out or re-transmit
@@ -479,9 +477,7 @@ static void process(void)
/*
* regularly sync with any other DMBs we know about
*/
- if (lp_enhanced_browsing()) {
- sync_all_dmbs(t);
- }
+ sync_all_dmbs(t);
/*
* clear the unexpected packet queue
diff --git a/source/nmbd/nmbd_namequery.c b/source/nmbd/nmbd_namequery.c
index 61435c14f55..57baa4cb2f0 100644
--- a/source/nmbd/nmbd_namequery.c
+++ b/source/nmbd/nmbd_namequery.c
@@ -30,9 +30,8 @@ extern int DEBUGLEVEL;
Deal with a response packet when querying a name.
****************************************************************************/
-static void query_name_response( struct subnet_record *subrec,
- struct response_record *rrec,
- struct packet_struct *p)
+static void query_name_response(struct subnet_record *subrec,
+ struct response_record *rrec, struct packet_struct *p)
{
struct nmb_packet *nmb = &p->packet.nmb;
BOOL success = False;
@@ -53,14 +52,9 @@ static void query_name_response( struct subnet_record *subrec,
{
/* WINS server is telling us to wait. Pretend we didn't get
the response but don't send out any more query requests. */
-
- if( DEBUGLVL( 5 ) )
- {
- dbgtext( "query_name_response: " );
- dbgtext( "WACK from WINS server %s ", inet_ntoa(p->ip) );
- dbgtext( "in querying name %s ", nmb_namestr(question_name) );
- dbgtext( "on subnet %s.\n", subrec->subnet_name );
- }
+
+ DEBUG(5,("query_name_response: WACK from WINS server %s in querying \
+name %s on subnet %s.\n", inet_ntoa(p->ip), nmb_namestr(question_name), subrec->subnet_name));
rrec->repeat_count = 0;
/* How long we should wait for. */
@@ -72,26 +66,18 @@ static void query_name_response( struct subnet_record *subrec,
{
success = False;
- if( DEBUGLVL( 5 ) )
- {
- dbgtext( "query_name_response: On subnet %s ", subrec->subnet_name );
- dbgtext( "- negative response from IP %s ", inet_ntoa(p->ip) );
- dbgtext( "for name %s. ", nmb_namestr(question_name) );
- dbgtext( "Error code was %d.\n", nmb->header.rcode );
- }
+ DEBUG(5,("query_name_response: On subnet %s - negative response \
+from IP %s for name %s. Error code was %d.\n", subrec->subnet_name, inet_ntoa(p->ip),
+ nmb_namestr(question_name), nmb->header.rcode));
}
else
{
success = True;
putip((char *)&answer_ip,&nmb->answers->rdata[2]);
- if( DEBUGLVL( 5 ) )
- {
- dbgtext( "query_name_response: On subnet %s ", subrec->subnet_name );
- dbgtext( "- positive response from IP %s ", inet_ntoa(p->ip) );
- dbgtext( "for name %s. ", nmb_namestr(question_name) );
- dbgtext( "IP of that name is %s\n", inet_ntoa(answer_ip) );
- }
+ DEBUG(5,("query_name_response: On subnet %s - positive response from IP %s \
+for name %s. IP of that name is %s\n", subrec->subnet_name, inet_ntoa(p->ip),
+ nmb_namestr(question_name), inet_ntoa(answer_ip)));
/* Interestingly, we could add these names to our namelists, and
change nmbd to a model that checked its own name cache first,
@@ -101,15 +87,10 @@ static void query_name_response( struct subnet_record *subrec,
}
else if( rrec->num_msgs > 1)
{
- if( DEBUGLVL( 0 ) )
- {
- dbgtext( "query_name_response: " );
- dbgtext( "Multiple (%d) responses ", rrec->num_msgs );
- dbgtext( "received for a query on subnet %s ", subrec->subnet_name );
- dbgtext( "for name %s.\nThis response ", nmb_namestr(question_name) );
- dbgtext( "was from IP %s, reporting", inet_ntoa(p->ip) );
- dbgtext( "an IP address of %s.\n", inet_ntoa(answer_ip) );
- }
+ DEBUG(0,("query_name_response: Multiple (%d) responses received for a query on \
+subnet %s for name %s. This response was from IP %s\n",
+ rrec->num_msgs, subrec->subnet_name, nmb_namestr(question_name),
+ inet_ntoa(p->ip) ));
/* We have already called the success or fail function, so we
don't call again here. Leave the response record around in
@@ -147,12 +128,9 @@ static void query_name_timeout_response(struct subnet_record *subrec,
if(failed)
{
- if( DEBUGLVL( 5 ) )
- {
- dbgtext( "query_name_timeout_response: No response to " );
- dbgtext( "query for name %s ", nmb_namestr(question_name) );
- dbgtext( "on subnet %s.\n", subrec->subnet_name );
- }
+ DEBUG(5,("query_name_timeout_response: No response to querying name %s on subnet %s.\n",
+ nmb_namestr(question_name), subrec->subnet_name));
+
if(rrec->fail_fn)
(*rrec->fail_fn)(subrec, rrec, question_name, 0);
}
@@ -223,12 +201,8 @@ BOOL query_name(struct subnet_record *subrec, char *name, int type,
rrec.rdlength = namerec->data.num_ips * 6;
if(rrec.rdlength > MAX_DGRAM_SIZE)
{
- if( DEBUGLVL( 0 ) )
- {
- dbgtext( "query_name: nmbd internal error - " );
- dbgtext( "there are %d ip addresses ", namerec->data.num_ips );
- dbgtext( "for name %s.\n", nmb_namestr(&nmbname) );
- }
+ DEBUG(0,("query_name: nmbd internal error - there are %d ip addresses for name %s.\n",
+ namerec->data.num_ips, nmb_namestr(&nmbname) ));
return False;
}
@@ -252,11 +226,8 @@ BOOL query_name(struct subnet_record *subrec, char *name, int type,
userdata,
&nmbname) == NULL)
{
- if( DEBUGLVL( 0 ) )
- {
- dbgtext( "query_name: Failed to send packet " );
- dbgtext( "trying to query name %s\n", nmb_namestr(&nmbname) );
- }
+ DEBUG(0,("query_name: Failed to send packet trying to query name %s\n",
+ nmb_namestr(&nmbname)));
return True;
}
return False;
@@ -284,11 +255,8 @@ BOOL query_name_from_wins_server(struct in_addr ip_to,
userdata,
&nmbname) == NULL)
{
- if( DEBUGLVL( 0 ) )
- {
- dbgtext( "query_name_from_wins_server: Failed to send packet " );
- dbgtext( "trying to query name %s\n", nmb_namestr(&nmbname) );
- }
+ DEBUG(0,("query_name_from_wins_server: Failed to send packet trying to query name %s\n",
+ nmb_namestr(&nmbname)));
return True;
}
return False;
diff --git a/source/nmbd/nmbd_packets.c b/source/nmbd/nmbd_packets.c
index 00059c1775e..8b102985611 100644
--- a/source/nmbd/nmbd_packets.c
+++ b/source/nmbd/nmbd_packets.c
@@ -107,14 +107,12 @@ static void debug_browse_data(char *outbuf, int len)
for (j = 0; j < 16; j++)
{
- unsigned char x;
- if (i+j >= len)
- break;
-
- x = outbuf[i+j];
+ unsigned char x = outbuf[i+j];
if (x < 32 || x > 127)
x = '.';
+ if (i+j >= len)
+ break;
DEBUGADD( 4, ( "%c", x ) );
}
@@ -1265,21 +1263,14 @@ an error packet of type %x\n",
len = SVAL(buf,smb_vwv11);
buf2 = smb_base(buf) + SVAL(buf,smb_vwv12);
- if (len <= 0)
- return;
-
- if (buf2 + len > buf + sizeof(dgram->data)) {
- DEBUG(2,("process_dgram: datagram from %s to %s IP %s for %s len=%d too long.\n",
- nmb_namestr(&dgram->source_name),nmb_namestr(&dgram->dest_name),
- inet_ntoa(p->ip), smb_buf(buf),len));
- len = (buf + sizeof(dgram->data)) - buf;
- }
-
DEBUG(4,("process_dgram: datagram from %s to %s IP %s for %s of type %d len=%d\n",
nmb_namestr(&dgram->source_name),nmb_namestr(&dgram->dest_name),
inet_ntoa(p->ip), smb_buf(buf),CVAL(buf2,0),len));
+ if (len <= 0)
+ return;
+
/* Datagram packet received for the browser mailslot */
if (strequal(smb_buf(buf),BROWSE_MAILSLOT))
{
diff --git a/source/nmbd/nmbd_synclists.c b/source/nmbd/nmbd_synclists.c
index 23cbc01b889..6105fb41650 100644
--- a/source/nmbd/nmbd_synclists.c
+++ b/source/nmbd/nmbd_synclists.c
@@ -51,8 +51,7 @@ static FILE *fp;
This is the NetServerEnum callback.
Note sname and comment are in UNIX codepage format.
******************************************************************/
-static void callback(const char *sname, uint32 stype,
- const char *comment, void *state)
+static void callback(const char *sname, uint32 stype, const char *comment)
{
fprintf(fp,"\"%s\" %08X \"%s\"\n", sname, stype, comment);
}
@@ -107,8 +106,8 @@ static void sync_child(char *name, int nm_type,
/* Fetch a workgroup list. */
cli_NetServerEnum(&cli, unix_workgroup,
- local_type|SV_TYPE_DOMAIN_ENUM,
- callback, NULL);
+ local_type|SV_TYPE_DOMAIN_ENUM,
+ callback);
/* Now fetch a server list. */
if (servers) {
@@ -116,7 +115,7 @@ static void sync_child(char *name, int nm_type,
dos_to_unix(unix_workgroup, True);
cli_NetServerEnum(&cli, unix_workgroup,
local?SV_TYPE_LOCAL_LIST_ONLY:SV_TYPE_ALL,
- callback, NULL);
+ callback);
}
cli_shutdown(&cli);
diff --git a/source/nsswitch/.cvsignore b/source/nsswitch/.cvsignore
deleted file mode 100644
index 6d609cec52b..00000000000
--- a/source/nsswitch/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.po
diff --git a/source/nsswitch/pam_winbind.c b/source/nsswitch/pam_winbind.c
index a8410f85086..ece504411b3 100644
--- a/source/nsswitch/pam_winbind.c
+++ b/source/nsswitch/pam_winbind.c
@@ -19,12 +19,8 @@
#define MODULE_NAME "pam_winbind"
#define PAM_SM_AUTH
#define PAM_SM_ACCOUNT
-#ifdef HAVE_SECURITY_PAM_MODULES_H
#include <security/pam_modules.h>
-#endif
-#ifdef HAVE_SECURITY__PAM_MACROS_H
#include <security/_pam_macros.h>
-#endif
#define PAM_DEBUG_ARG (1<<0)
#define PAM_USE_AUTHTOK_ARG (1<<1)
diff --git a/source/nsswitch/pam_winbind.h b/source/nsswitch/pam_winbind.h
deleted file mode 100644
index 5618dc1b61f..00000000000
--- a/source/nsswitch/pam_winbind.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* pam_winbind header file
- (Solaris needs some macros from Linux for common PAM code)
-
- Shirish Kalele 2000
-*/
-
-#ifdef HAVE_FEATURES_H
-#include <features.h>
-#endif
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <syslog.h>
-#include <stdarg.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#include <config.h>
-
-#define MODULE_NAME "pam_winbind"
-#define PAM_SM_AUTH
-#define PAM_SM_ACCOUNT
-#define PAM_SM_PASSWORD
-
-#if defined(SUNOS5) || defined(SUNOS4)
-
-/* Solaris always uses dynamic pam modules */
-#define PAM_EXTERN extern
-#include <security/pam_appl.h>
-
-#define PAM_AUTHTOK_RECOVER_ERR PAM_AUTHTOK_RECOVERY_ERR
-#endif
-
-#ifdef HAVE_SECURITY_PAM_MODULES_H
-#include <security/pam_modules.h>
-#endif
-
-#ifdef HAVE_SECURITY__PAM_MACROS_H
-#include <security/_pam_macros.h>
-#else
-/* Define required macros from (Linux PAM 0.68) security/_pam_macros.h */
-#define _pam_drop_reply(/* struct pam_response * */ reply, /* int */ replies) \
-do { \
- int reply_i; \
- \
- for (reply_i=0; reply_i<replies; ++reply_i) { \
- if (reply[reply_i].resp) { \
- _pam_overwrite(reply[reply_i].resp); \
- free(reply[reply_i].resp); \
- } \
- } \
- if (reply) \
- free(reply); \
-} while (0)
-
-#define _pam_overwrite(x) \
-do { \
- register char *__xx__; \
- if ((__xx__=(x))) \
- while (*__xx__) \
- *__xx__++ = '\0'; \
-} while (0)
-
-/*
- * Don't just free it, forget it too.
- */
-
-#define _pam_drop(X) \
-do { \
- if (X) { \
- free(X); \
- X=NULL; \
- } \
-} while (0)
-
-#define x_strdup(s) ( (s) ? strdup(s):NULL )
-#endif
-
-#define PAM_DEBUG_ARG (1<<0)
-#define PAM_USE_AUTHTOK_ARG (1<<1)
-#define PAM_UNKNOWN_OK_ARG (1<<2)
-
-#include "winbind_nss_config.h"
-#include "winbindd_nss.h"
diff --git a/source/nsswitch/wb_client.c b/source/nsswitch/wb_client.c
index 71a21a97207..746e5406bc8 100644
--- a/source/nsswitch/wb_client.c
+++ b/source/nsswitch/wb_client.c
@@ -31,7 +31,7 @@ BOOL winbind_lookup_name(const char *name, DOM_SID *sid, enum SID_NAME_USE *name
{
struct winbindd_request request;
struct winbindd_response response;
- NSS_STATUS result;
+ enum nss_status result;
if (!sid || !name_type)
return False;
@@ -42,7 +42,7 @@ BOOL winbind_lookup_name(const char *name, DOM_SID *sid, enum SID_NAME_USE *name
ZERO_STRUCT(response);
fstrcpy(request.data.name, name);
- if ((result = (NSS_STATUS)winbindd_request(WINBINDD_LOOKUPNAME, &request,
+ if ((result = winbindd_request(WINBINDD_LOOKUPNAME, &request,
&response)) == NSS_STATUS_SUCCESS) {
string_to_sid(sid, response.data.sid.sid);
*name_type = (enum SID_NAME_USE)response.data.sid.type;
@@ -57,7 +57,7 @@ BOOL winbind_lookup_sid(DOM_SID *sid, fstring dom_name, fstring name, enum SID_N
{
struct winbindd_request request;
struct winbindd_response response;
- NSS_STATUS result;
+ enum nss_status result;
fstring sid_str;
/* Initialise request */
@@ -70,7 +70,7 @@ BOOL winbind_lookup_sid(DOM_SID *sid, fstring dom_name, fstring name, enum SID_N
/* Make request */
- result = (NSS_STATUS)winbindd_request(WINBINDD_LOOKUPSID, &request, &response);
+ result = winbindd_request(WINBINDD_LOOKUPSID, &request, &response);
/* Copy out result */
diff --git a/source/nsswitch/wb_common.c b/source/nsswitch/wb_common.c
index 243f05825b7..98a4b6758bc 100644
--- a/source/nsswitch/wb_common.c
+++ b/source/nsswitch/wb_common.c
@@ -59,7 +59,7 @@ void init_response(struct winbindd_response *response)
{
/* Initialise return value */
- response->result = WINBINDD_ERROR;
+ response->result = (enum winbindd_result)NSS_STATUS_UNAVAIL;
}
/* Close established socket */
@@ -141,7 +141,6 @@ static int open_pipe_sock(void)
if (connect(established_socket, (struct sockaddr *)&sunaddr,
sizeof(sunaddr)) == -1) {
close_sock();
- established_socket = -1;
return -1;
}
@@ -305,7 +304,7 @@ void free_response(struct winbindd_response *response)
/* Handle simple types of requests */
-NSS_STATUS winbindd_request(int req_type,
+enum nss_status winbindd_request(int req_type,
struct winbindd_request *request,
struct winbindd_response *response)
{
diff --git a/source/nsswitch/wbinfo.c b/source/nsswitch/wbinfo.c
index f20e1b16144..cff2b8b69a0 100644
--- a/source/nsswitch/wbinfo.c
+++ b/source/nsswitch/wbinfo.c
@@ -28,7 +28,7 @@
/* Prototypes from common.h - only needed #if TNG */
-NSS_STATUS winbindd_request(int req_type,
+enum nss_status winbindd_request(int req_type,
struct winbindd_request *request,
struct winbindd_response *response);
@@ -101,11 +101,10 @@ static BOOL wbinfo_check_secret(void)
if (result) {
- if (response.data.num_entries == 0) {
+ if (response.data.num_entries) {
printf("Secret is good\n");
} else {
- printf("Secret is bad\n0x%08x\n",
- response.data.num_entries);
+ printf("Secret is bad\n");
}
return True;
@@ -448,8 +447,8 @@ int main(int argc, char **argv)
return 1;
}
break;
-
- /* Invalid option */
+
+ /* Invalid option */
default:
usage();
diff --git a/source/nsswitch/winbind_nss.c b/source/nsswitch/winbind_nss.c
index 04b576a7a53..78485aa05e3 100644
--- a/source/nsswitch/winbind_nss.c
+++ b/source/nsswitch/winbind_nss.c
@@ -25,15 +25,11 @@
#include "winbind_nss_config.h"
#include "winbindd_nss.h"
-/* Prototypes from common.c */
-
+/* prototypes from common.c */
void init_request(struct winbindd_request *req,int rq_type);
-NSS_STATUS winbindd_request(int req_type,
- struct winbindd_request *request,
- struct winbindd_response *response);
int write_sock(void *buffer, int count);
int read_reply(struct winbindd_response *response);
-void free_response(struct winbindd_response *response);
+
/* Allocate some space from the nss static buffer. The buffer and buflen
are the pointers passed in by the C library to the _nss_ntdom_*
@@ -41,810 +37,429 @@ void free_response(struct winbindd_response *response);
static char *get_static(char **buffer, int *buflen, int len)
{
- char *result;
+ char *result;
- /* Error check. We return false if things aren't set up right, or
- there isn't enough buffer space left. */
-
- if ((buffer == NULL) || (buflen == NULL) || (*buflen < len)) {
- return NULL;
- }
+ /* Error check. We return false if things aren't set up right, or
+ there isn't enough buffer space left. */
- /* Some architectures, like Sparc, need pointers aligned on
- boundaries */
-#if _ALIGNMENT_REQUIRED
- {
- int mod = len % _MAX_ALIGNMENT;
- if(mod != 0)
- len += _MAX_ALIGNMENT - mod;
- }
-#endif
+ if ((buffer == NULL) || (buflen == NULL) || (*buflen < len)) {
+ return NULL;
+ }
- /* Return an index into the static buffer */
+ /* Return an index into the static buffer */
- result = *buffer;
- *buffer += len;
- *buflen -= len;
+ result = *buffer;
+ *buffer += len;
+ *buflen -= len;
- return result;
+ return result;
}
/* I've copied the strtok() replacement function next_token() from
lib/util_str.c as I really don't want to have to link in any other
objects if I can possibly avoid it. */
+#ifdef strchr /* Aargh! This points at multibyte_strchr(). )-: */
+#undef strchr
+#endif
+
static char *last_ptr = NULL;
BOOL next_token(char **ptr, char *buff, char *sep, size_t bufsize)
{
- char *s;
- BOOL quoted;
- size_t len=1;
+ char *s;
+ BOOL quoted;
+ size_t len=1;
- if (!ptr) ptr = &last_ptr;
- if (!ptr) return(False);
+ if (!ptr) ptr = &last_ptr;
+ if (!ptr) return(False);
- s = *ptr;
+ s = *ptr;
- /* default to simple separators */
- if (!sep) sep = " \t\n\r";
+ /* default to simple separators */
+ if (!sep) sep = " \t\n\r";
- /* find the first non sep char */
- while(*s && strchr(sep,*s)) s++;
+ /* find the first non sep char */
+ while(*s && strchr(sep,*s)) s++;
- /* nothing left? */
- if (! *s) return(False);
+ /* nothing left? */
+ if (! *s) return(False);
- /* copy over the token */
- for (quoted = False;
- len < bufsize && *s && (quoted || !strchr(sep,*s));
- s++) {
-
- if (*s == '\"') {
- quoted = !quoted;
- } else {
- len++;
- *buff++ = *s;
- }
- }
+ /* copy over the token */
+ for (quoted = False;
+ len < bufsize && *s && (quoted || !strchr(sep,*s));
+ s++) {
+
+ if (*s == '\"') {
+ quoted = !quoted;
+ } else {
+ len++;
+ *buff++ = *s;
+ }
+ }
- *ptr = (*s) ? s+1 : s;
- *buff = 0;
- last_ptr = *ptr;
+ *ptr = (*s) ? s+1 : s;
+ *buff = 0;
+ last_ptr = *ptr;
- return(True);
+ return(True);
+}
+
+
+/* handle simple types of requests */
+static enum nss_status generic_request(int req_type,
+ struct winbindd_request *request,
+ struct winbindd_response *response)
+{
+ struct winbindd_request lrequest;
+ struct winbindd_response lresponse;
+
+ if (!response) response = &lresponse;
+ if (!request) request = &lrequest;
+
+ /* Fill in request and send down pipe */
+ init_request(request, req_type);
+
+ if (write_sock(request, sizeof(*request)) == -1) {
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ /* Wait for reply */
+ if (read_reply(response) == -1) {
+ return NSS_STATUS_UNAVAIL;
+ }
+
+ /* Copy reply data from socket */
+ if (response->result != WINBINDD_OK) {
+ return NSS_STATUS_NOTFOUND;
+ }
+
+ return NSS_STATUS_SUCCESS;
}
/* Fill a pwent structure from a winbindd_response structure. We use
the static data passed to us by libc to put strings and stuff in.
- Return NSS_STATUS_TRYAGAIN if we run out of memory. */
+ Return errno = ERANGE and NSS_STATUS_TRYAGAIN if we run out of
+ memory. */
-static NSS_STATUS fill_pwent(struct passwd *result,
- struct winbindd_pw *pw,
- char **buffer, int *buflen)
+static enum nss_status fill_pwent(struct passwd *result,
+ struct winbindd_response *response,
+ char **buffer, int *buflen, int *errnop)
{
- /* User name */
+ struct winbindd_pw *pw = &response->data.pw;
- if ((result->pw_name =
- get_static(buffer, buflen, strlen(pw->pw_name) + 1)) == NULL) {
+ /* User name */
- /* Out of memory */
+ if ((result->pw_name =
+ get_static(buffer, buflen, strlen(pw->pw_name) + 1)) == NULL) {
- return NSS_STATUS_TRYAGAIN;
- }
+ /* Out of memory */
- strcpy(result->pw_name, pw->pw_name);
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
- /* Password */
+ strcpy(result->pw_name, pw->pw_name);
- if ((result->pw_passwd =
- get_static(buffer, buflen, strlen(pw->pw_passwd) + 1)) == NULL) {
+ /* Password */
- /* Out of memory */
+ if ((result->pw_passwd =
+ get_static(buffer, buflen, strlen(pw->pw_passwd) + 1)) == NULL) {
- return NSS_STATUS_TRYAGAIN;
- }
+ /* Out of memory */
- strcpy(result->pw_passwd, pw->pw_passwd);
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ strcpy(result->pw_passwd, pw->pw_passwd);
- /* [ug]id */
+ /* [ug]id */
- result->pw_uid = pw->pw_uid;
- result->pw_gid = pw->pw_gid;
+ result->pw_uid = pw->pw_uid;
+ result->pw_gid = pw->pw_gid;
- /* GECOS */
+ /* GECOS */
- if ((result->pw_gecos =
- get_static(buffer, buflen, strlen(pw->pw_gecos) + 1)) == NULL) {
+ if ((result->pw_gecos =
+ get_static(buffer, buflen, strlen(pw->pw_gecos) + 1)) == NULL) {
- /* Out of memory */
+ /* Out of memory */
- return NSS_STATUS_TRYAGAIN;
- }
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
- strcpy(result->pw_gecos, pw->pw_gecos);
-
- /* Home directory */
-
- if ((result->pw_dir =
- get_static(buffer, buflen, strlen(pw->pw_dir) + 1)) == NULL) {
+ strcpy(result->pw_gecos, pw->pw_gecos);
- /* Out of memory */
+ /* Home directory */
- return NSS_STATUS_TRYAGAIN;
- }
+ if ((result->pw_dir =
+ get_static(buffer, buflen, strlen(pw->pw_dir) + 1)) == NULL) {
- strcpy(result->pw_dir, pw->pw_dir);
+ /* Out of memory */
- /* Logon shell */
-
- if ((result->pw_shell =
- get_static(buffer, buflen, strlen(pw->pw_shell) + 1)) == NULL) {
-
- /* Out of memory */
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
- return NSS_STATUS_TRYAGAIN;
- }
+ strcpy(result->pw_dir, pw->pw_dir);
- strcpy(result->pw_shell, pw->pw_shell);
+ /* Logon shell */
- return NSS_STATUS_SUCCESS;
+ if ((result->pw_shell =
+ get_static(buffer, buflen, strlen(pw->pw_shell) + 1)) == NULL) {
+
+ /* Out of memory */
+
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ strcpy(result->pw_shell, pw->pw_shell);
+
+ return NSS_STATUS_SUCCESS;
}
/* Fill a grent structure from a winbindd_response structure. We use
the static data passed to us by libc to put strings and stuff in.
- Return NSS_STATUS_TRYAGAIN if we run out of memory. */
+ Return errno = ERANGE and NSS_STATUS_TRYAGAIN if we run out of
+ memory. */
-static int fill_grent(struct group *result, struct winbindd_gr *gr,
- char *gr_mem, char **buffer, int *buflen)
+static int fill_grent(struct group *result,
+ struct winbindd_response *response,
+ char **buffer, int *buflen, int *errnop)
{
- fstring name;
- int i;
+ struct winbindd_gr *gr = &response->data.gr;
+ fstring name;
+ int i;
- /* Group name */
+ /* Group name */
- if ((result->gr_name =
- get_static(buffer, buflen, strlen(gr->gr_name) + 1)) == NULL) {
+ if ((result->gr_name =
+ get_static(buffer, buflen, strlen(gr->gr_name) + 1)) == NULL) {
- /* Out of memory */
+ /* Out of memory */
- return NSS_STATUS_TRYAGAIN;
- }
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
- strcpy(result->gr_name, gr->gr_name);
+ strcpy(result->gr_name, gr->gr_name);
- /* Password */
+ /* Password */
- if ((result->gr_passwd =
- get_static(buffer, buflen, strlen(gr->gr_passwd) + 1)) == NULL) {
+ if ((result->gr_passwd =
+ get_static(buffer, buflen, strlen(gr->gr_passwd) + 1)) == NULL) {
- /* Out of memory */
-
- return NSS_STATUS_TRYAGAIN;
- }
+ /* Out of memory */
- strcpy(result->gr_passwd, gr->gr_passwd);
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
- /* gid */
+ strcpy(result->gr_passwd, gr->gr_passwd);
- result->gr_gid = gr->gr_gid;
+ /* gid */
- /* Group membership */
+ result->gr_gid = gr->gr_gid;
- if ((gr->num_gr_mem < 0) || !gr_mem) {
- gr->num_gr_mem = 0;
- }
+ /* Group membership */
- if ((result->gr_mem =
- (char **)get_static(buffer, buflen, (gr->num_gr_mem + 1) *
- sizeof(char *))) == NULL) {
+ if ((gr->num_gr_mem < 0) || !response->extra_data) {
+ gr->num_gr_mem = 0;
+ }
- /* Out of memory */
+ if ((result->gr_mem =
+ (char **)get_static(buffer, buflen, (gr->num_gr_mem + 1) *
+ sizeof(char *))) == NULL) {
- return NSS_STATUS_TRYAGAIN;
- }
+ /* Out of memory */
- if (gr->num_gr_mem == 0) {
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
- /* Group is empty */
+ if (gr->num_gr_mem == 0) {
- *(result->gr_mem) = NULL;
- return NSS_STATUS_SUCCESS;
- }
+ /* Group is empty */
+
+ *(result->gr_mem) = NULL;
+ return NSS_STATUS_SUCCESS;
+ }
- /* Start looking at extra data */
+ /* Start looking at extra data */
- i = 0;
+ i = 0;
- while(next_token((char **)&gr_mem, name, ",", sizeof(fstring))) {
+ while(next_token(&response->extra_data, name, ",", sizeof(fstring))) {
- /* Allocate space for member */
+ /* Allocate space for member */
- if (((result->gr_mem)[i] =
- get_static(buffer, buflen, strlen(name) + 1)) == NULL) {
+ if (((result->gr_mem)[i] =
+ get_static(buffer, buflen, strlen(name) + 1)) == NULL) {
- /* Out of memory */
+ /* Out of memory */
- return NSS_STATUS_TRYAGAIN;
- }
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
- strcpy((result->gr_mem)[i], name);
- i++;
- }
-
- /* Terminate list */
+ strcpy((result->gr_mem)[i], name);
+ i++;
+ }
- (result->gr_mem)[i] = NULL;
+ /* Terminate list */
- return NSS_STATUS_SUCCESS;
+ (result->gr_mem)[i] = NULL;
+
+ return NSS_STATUS_SUCCESS;
}
/*
* NSS user functions
*/
-static struct winbindd_response getpwent_response;
-
-static int ndx_pw_cache; /* Current index into pwd cache */
-static int num_pw_cache; /* Current size of pwd cache */
-
/* Rewind "file pointer" to start of ntdom password database */
-NSS_STATUS
+enum nss_status
_nss_winbind_setpwent(void)
{
-#ifdef DEBUG_NSS
- fprintf(stderr, "[%5d]: setpwent\n", getpid());
-#endif
-
- if (num_pw_cache > 0) {
- ndx_pw_cache = num_pw_cache = 0;
- free_response(&getpwent_response);
- }
-
- return winbindd_request(WINBINDD_SETPWENT, NULL, NULL);
+ return generic_request(WINBINDD_SETPWENT, NULL, NULL);
}
/* Close ntdom password database "file pointer" */
-NSS_STATUS
+enum nss_status
_nss_winbind_endpwent(void)
{
-#ifdef DEBUG_NSS
- fprintf(stderr, "[%5d]: endpwent\n", getpid());
-#endif
-
- if (num_pw_cache > 0) {
- ndx_pw_cache = num_pw_cache = 0;
- free_response(&getpwent_response);
- }
-
- return winbindd_request(WINBINDD_ENDPWENT, NULL, NULL);
+ return generic_request(WINBINDD_ENDPWENT, NULL, NULL);
}
/* Fetch the next password entry from ntdom password database */
-#define MAX_GETPWENT_USERS 250
-
-NSS_STATUS
+enum nss_status
_nss_winbind_getpwent_r(struct passwd *result, char *buffer,
- size_t buflen, int *errnop)
+ size_t buflen, int *errnop)
{
- NSS_STATUS ret;
- struct winbindd_request request;
- static int called_again;
-
-#ifdef DEBUG_NSS
- fprintf(stderr, "[%5d]: getpwent\n", getpid());
-#endif
-
- /* Return an entry from the cache if we have one, or if we are
- called again because we exceeded our static buffer. */
-
- if ((ndx_pw_cache < num_pw_cache) || called_again) {
- goto return_result;
- }
-
- /* Else call winbindd to get a bunch of entries */
-
- if (num_pw_cache > 0) {
- free_response(&getpwent_response);
- }
-
- ZERO_STRUCT(request);
- ZERO_STRUCT(getpwent_response);
-
- request.data.num_entries = MAX_GETPWENT_USERS;
-
- ret = winbindd_request(WINBINDD_GETPWENT, &request,
- &getpwent_response);
-
- if (ret == NSS_STATUS_SUCCESS) {
- struct winbindd_pw *pw_cache;
-
- /* Fill cache */
-
- ndx_pw_cache = 0;
- num_pw_cache = getpwent_response.data.num_entries;
-
- /* Return a result */
-
- return_result:
-
- pw_cache = getpwent_response.extra_data;
-
- /* Check data is valid */
-
- if (pw_cache == NULL) {
- return NSS_STATUS_NOTFOUND;
- }
-
- ret = fill_pwent(result, &pw_cache[ndx_pw_cache],
- &buffer, &buflen);
-
- /* Out of memory - try again */
-
- if (ret == NSS_STATUS_TRYAGAIN) {
- called_again = True;
- *errnop = errno = ERANGE;
- return ret;
- }
-
- *errnop = errno = 0;
- called_again = False;
- ndx_pw_cache++;
-
- /* If we've finished with this lot of results free cache */
+ enum nss_status ret;
+ struct winbindd_response response;
- if (ndx_pw_cache == num_pw_cache) {
- ndx_pw_cache = num_pw_cache = 0;
- free_response(&getpwent_response);
- }
- }
+ ret = generic_request(WINBINDD_GETPWENT, NULL, &response);
+ if (ret != NSS_STATUS_SUCCESS) return ret;
- return ret;
+ return fill_pwent(result, &response, &buffer, &buflen, errnop);
}
/* Return passwd struct from uid */
-NSS_STATUS
+enum nss_status
_nss_winbind_getpwuid_r(uid_t uid, struct passwd *result, char *buffer,
- size_t buflen, int *errnop)
+ size_t buflen, int *errnop)
{
- NSS_STATUS ret;
- static struct winbindd_response response;
+ enum nss_status ret;
+ struct winbindd_response response;
struct winbindd_request request;
- static int keep_response=0;
-
- /* If our static buffer needs to be expanded we are called again */
- if (!keep_response) {
- /* Call for the first time */
+ request.data.uid = uid;
- ZERO_STRUCT(response);
- ZERO_STRUCT(request);
+ ret = generic_request(WINBINDD_GETPWNAM_FROM_UID, &request, &response);
+ if (ret != NSS_STATUS_SUCCESS) return ret;
- request.data.uid = uid;
-
- ret = winbindd_request(WINBINDD_GETPWNAM_FROM_UID, &request,
- &response);
-
- if (ret == NSS_STATUS_SUCCESS) {
- ret = fill_pwent(result, &response.data.pw,
- &buffer, &buflen);
-
- if (ret == NSS_STATUS_TRYAGAIN) {
- keep_response = True;
- *errnop = errno = ERANGE;
- return ret;
- }
- }
-
- } else {
-
- /* We've been called again */
-
- ret = fill_pwent(result, &response.data.pw, &buffer, &buflen);
-
- if (ret == NSS_STATUS_TRYAGAIN) {
- keep_response = True;
- *errnop = errno = ERANGE;
- return ret;
- }
-
- keep_response = False;
- *errnop = errno = 0;
- }
-
- free_response(&response);
- return ret;
+ return fill_pwent(result, &response, &buffer, &buflen, errnop);
}
/* Return passwd struct from username */
-NSS_STATUS
+enum nss_status
_nss_winbind_getpwnam_r(const char *name, struct passwd *result, char *buffer,
- size_t buflen, int *errnop)
+ size_t buflen, int *errnop)
{
- NSS_STATUS ret;
- static struct winbindd_response response;
+ enum nss_status ret;
+ struct winbindd_response response;
struct winbindd_request request;
- static int keep_response;
-#ifdef DEBUG_NSS
- fprintf(stderr, "[%5d]: getpwnam %s\n", getpid(), name);
-#endif
+ strncpy(request.data.username, name, sizeof(request.data.username) - 1);
+ request.data.username[sizeof(request.data.username) - 1] = '\0';
- /* If our static buffer needs to be expanded we are called again */
+ ret = generic_request(WINBINDD_GETPWNAM_FROM_USER, &request, &response);
+ if (ret != NSS_STATUS_SUCCESS) return ret;
- if (!keep_response) {
-
- /* Call for the first time */
-
- ZERO_STRUCT(response);
- ZERO_STRUCT(request);
-
- strncpy(request.data.username, name,
- sizeof(request.data.username) - 1);
- request.data.username
- [sizeof(request.data.username) - 1] = '\0';
-
- ret = winbindd_request(WINBINDD_GETPWNAM_FROM_USER, &request,
- &response);
-
- if (ret == NSS_STATUS_SUCCESS) {
- ret = fill_pwent(result, &response.data.pw, &buffer,
- &buflen);
-
- if (ret == NSS_STATUS_TRYAGAIN) {
- keep_response = True;
- *errnop = errno = ERANGE;
- return ret;
- }
- }
-
- } else {
-
- /* We've been called again */
-
- ret = fill_pwent(result, &response.data.pw, &buffer, &buflen);
-
- if (ret == NSS_STATUS_TRYAGAIN) {
- keep_response = True;
- *errnop = errno = ERANGE;
- return ret;
- }
-
- keep_response = False;
- *errnop = errno = 0;
- }
-
- free_response(&response);
- return ret;
+ return fill_pwent(result, &response, &buffer, &buflen, errnop);
}
/*
* NSS group functions
*/
-static struct winbindd_response getgrent_response;
-
-static int ndx_gr_cache; /* Current index into grp cache */
-static int num_gr_cache; /* Current size of grp cache */
-
/* Rewind "file pointer" to start of ntdom group database */
-NSS_STATUS
+enum nss_status
_nss_winbind_setgrent(void)
{
-#ifdef DEBUG_NSS
- fprintf(stderr, "[%5d]: setgrent\n", getpid());
-#endif
-
- if (num_gr_cache > 0) {
- ndx_gr_cache = num_gr_cache = 0;
- free_response(&getgrent_response);
- }
-
- return winbindd_request(WINBINDD_SETGRENT, NULL, NULL);
+ return generic_request(WINBINDD_SETGRENT, NULL, NULL);
}
/* Close "file pointer" for ntdom group database */
-NSS_STATUS
+enum nss_status
_nss_winbind_endgrent(void)
{
-#ifdef DEBUG_NSS
- fprintf(stderr, "[%5d]: endgrent\n", getpid());
-#endif
+ return generic_request(WINBINDD_ENDGRENT, NULL, NULL);
+}
- if (num_gr_cache > 0) {
- ndx_gr_cache = num_gr_cache = 0;
- free_response(&getgrent_response);
- }
- return winbindd_request(WINBINDD_ENDGRENT, NULL, NULL);
-}
/* Get next entry from ntdom group database */
-#define MAX_GETGRENT_USERS 250
-
-NSS_STATUS
+enum nss_status
_nss_winbind_getgrent_r(struct group *result,
- char *buffer, size_t buflen, int *errnop)
+ char *buffer, size_t buflen, int *errnop)
{
- NSS_STATUS ret;
- static struct winbindd_request request;
- static int called_again;
-
-#ifdef DEBUG_NSS
- fprintf(stderr, "[%5d]: getgrent\n", getpid());
-#endif
-
- /* Return an entry from the cache if we have one, or if we are
- called again because we exceeded our static buffer. */
-
- if ((ndx_gr_cache < num_gr_cache) || called_again) {
- goto return_result;
- }
-
- /* Else call winbindd to get a bunch of entries */
-
- if (num_gr_cache > 0) {
- free_response(&getgrent_response);
- }
-
- ZERO_STRUCT(request);
- ZERO_STRUCT(getgrent_response);
-
- request.data.num_entries = MAX_GETGRENT_USERS;
-
- ret = winbindd_request(WINBINDD_GETGRENT, &request,
- &getgrent_response);
-
- if (ret == NSS_STATUS_SUCCESS) {
- struct winbindd_gr *gr_cache;
- int mem_ofs;
-
- /* Fill cache */
-
- ndx_gr_cache = 0;
- num_gr_cache = getgrent_response.data.num_entries;
-
- /* Return a result */
-
- return_result:
-
- gr_cache = getgrent_response.extra_data;
-
- /* Check data is valid */
-
- if (gr_cache == NULL) {
- return NSS_STATUS_NOTFOUND;
- }
-
- /* Fill group membership. The offset into the extra data
- for the group membership is the reported offset plus the
- size of all the winbindd_gr records returned. */
-
- mem_ofs = gr_cache[ndx_gr_cache].gr_mem_ofs +
- num_gr_cache * sizeof(struct winbindd_gr);
-
- ret = fill_grent(result, &gr_cache[ndx_gr_cache],
- (char *)(getgrent_response.extra_data +
- mem_ofs), &buffer, &buflen);
-
- /* Out of memory - try again */
-
- if (ret == NSS_STATUS_TRYAGAIN) {
- called_again = True;
- *errnop = errno = ERANGE;
- return ret;
- }
-
- *errnop = 0;
- called_again = False;
- ndx_gr_cache++;
-
- /* If we've finished with this lot of results free cache */
+ enum nss_status ret;
+ struct winbindd_response response;
- if (ndx_gr_cache == num_gr_cache) {
- ndx_gr_cache = num_gr_cache = 0;
- free_response(&getgrent_response);
- }
- }
+ ret = generic_request(WINBINDD_GETGRENT, NULL, &response);
+ if (ret != NSS_STATUS_SUCCESS) return ret;
- return ret;
+ return fill_grent(result, &response, &buffer, &buflen, errnop);
}
/* Return group struct from group name */
-NSS_STATUS
+enum nss_status
_nss_winbind_getgrnam_r(const char *name,
- struct group *result, char *buffer,
- size_t buflen, int *errnop)
+ struct group *result, char *buffer,
+ size_t buflen, int *errnop)
{
- NSS_STATUS ret;
- static struct winbindd_response response;
+ enum nss_status ret;
+ struct winbindd_response response;
struct winbindd_request request;
- static int keep_response;
-
-#ifdef DEBUG_NSS
- fprintf(stderr, "[%5d]: getgrnam %s\n", getpid(), name);
-#endif
- /* If our static buffer needs to be expanded we are called again */
-
- if (!keep_response) {
-
- /* Call for the first time */
-
- ZERO_STRUCT(request);
- ZERO_STRUCT(response);
-
- strncpy(request.data.groupname, name,
- sizeof(request.data.groupname));
- request.data.groupname
- [sizeof(request.data.groupname) - 1] = '\0';
-
- ret = winbindd_request(WINBINDD_GETGRNAM_FROM_GROUP,
- &request, &response);
-
- if (ret == NSS_STATUS_SUCCESS) {
- ret = fill_grent(result, &response.data.gr,
- response.extra_data,
- &buffer, &buflen);
-
- if (ret == NSS_STATUS_TRYAGAIN) {
- keep_response = True;
- *errnop = errno = ERANGE;
- return ret;
- }
- }
-
- } else {
-
- /* We've been called again */
-
- ret = fill_grent(result, &response.data.gr,
- response.extra_data, &buffer, &buflen);
-
- if (ret == NSS_STATUS_TRYAGAIN) {
- keep_response = True;
- *errnop = errno = ERANGE;
- return ret;
- }
-
- keep_response = False;
- *errnop = 0;
- }
+ strncpy(request.data.groupname, name, sizeof(request.data.groupname));
+ request.data.groupname[sizeof(request.data.groupname) - 1] = '\0';
+
+ ret = generic_request(WINBINDD_GETGRNAM_FROM_GROUP, &request, &response);
+ if (ret != NSS_STATUS_SUCCESS) return ret;
- free_response(&response);
- return ret;
+ return fill_grent(result, &response, &buffer, &buflen, errnop);
}
/* Return group struct from gid */
-NSS_STATUS
+enum nss_status
_nss_winbind_getgrgid_r(gid_t gid,
- struct group *result, char *buffer,
- size_t buflen, int *errnop)
-{
- NSS_STATUS ret;
- static struct winbindd_response response;
- struct winbindd_request request;
- static int keep_response;
-
-#ifdef DEBUG_NSS
- fprintf(stderr, "[%5d]: getgrgid %d\n", getpid(), gid);
-#endif
-
- /* If our static buffer needs to be expanded we are called again */
-
- if (!keep_response) {
-
- /* Call for the first time */
-
- ZERO_STRUCT(request);
- ZERO_STRUCT(response);
-
- request.data.gid = gid;
-
- ret = winbindd_request(WINBINDD_GETGRNAM_FROM_GID, &request,
- &response);
-
- if (ret == NSS_STATUS_SUCCESS) {
-
- ret = fill_grent(result, &response.data.gr,
- response.extra_data,
- &buffer, &buflen);
-
- if (ret == NSS_STATUS_TRYAGAIN) {
- keep_response = True;
- *errnop = errno = ERANGE;
- return ret;
- }
- }
-
- } else {
-
- /* We've been called again */
-
- ret = fill_grent(result, &response.data.gr,
- response.extra_data, &buffer, &buflen);
-
- if (ret == NSS_STATUS_TRYAGAIN) {
- keep_response = True;
- *errnop = errno = ERANGE;
- return ret;
- }
-
- keep_response = False;
- *errnop = 0;
- }
-
- free_response(&response);
- return ret;
-}
-
-/* Initialise supplementary groups */
-
-NSS_STATUS
-_nss_winbind_initgroups(char *user, gid_t group, long int *start,
- long int *size, gid_t *groups, long int limit,
- int *errnop)
+ struct group *result, char *buffer,
+ size_t buflen, int *errnop)
{
- NSS_STATUS ret;
- struct winbindd_request request;
+ enum nss_status ret;
struct winbindd_response response;
- int i;
-
-#ifdef DEBUG_NSS
- fprintf(stderr, "[%5d]: initgroups %s (%d)\n", getpid(),
- user, group);
-#endif
-
- ZERO_STRUCT(request);
- ZERO_STRUCT(response);
-
- strncpy(request.data.username, user,
- sizeof(request.data.username) - 1);
-
- ret = winbindd_request(WINBINDD_GETGROUPS, &request, &response);
-
- if (ret == NSS_STATUS_SUCCESS) {
- int num_gids = response.data.num_entries;
- gid_t *gid_list = (gid_t *)response.extra_data;
-
- /* Copy group list to client */
-
- for (i = 0; i < num_gids; i++) {
-
- /* Skip primary group */
-
- if (gid_list[i] == group) continue;
-
- /* Add to buffer */
-
- if (*start == *size && limit <= 0) {
- groups = realloc(
- groups, 2 * (*size) * sizeof(*groups));
- if (!groups) goto done;
- *size *= 2;
- }
-
- groups[*start] = gid_list[i];
- *start += 1;
+ struct winbindd_request request;
- /* Filled buffer? */
+ request.data.gid = gid;
- if (*start == limit) goto done;
- }
- }
-
- /* Back to your regularly scheduled programming */
+ ret = generic_request(WINBINDD_GETGRNAM_FROM_GID, &request, &response);
+ if (ret != NSS_STATUS_SUCCESS) return ret;
- done:
- return ret;
+ return fill_grent(result, &response, &buffer, &buflen, errnop);
}
diff --git a/source/nsswitch/winbind_nss_config.h b/source/nsswitch/winbind_nss_config.h
index 5c09a5dd1bc..c663842a815 100644
--- a/source/nsswitch/winbind_nss_config.h
+++ b/source/nsswitch/winbind_nss_config.h
@@ -70,62 +70,17 @@
#include <errno.h>
#include <pwd.h>
-#ifdef HAVE_NSS_COMMON_H
-/* Sun Solaris */
-
-#include <nss_common.h>
-#include <nss_dbdefs.h>
-#include <nsswitch.h>
-
-typedef nss_status_t NSS_STATUS;
-
-#define NSS_STATUS_SUCCESS NSS_SUCCESS
-#define NSS_STATUS_NOTFOUND NSS_NOTFOUND
-#define NSS_STATUS_UNAVAIL NSS_UNAVAIL
-#define NSS_STATUS_TRYAGAIN NSS_TRYAGAIN
-
-#elif HAVE_NSS_H
-/* GNU */
-
+#ifdef HAVE_NSS_H
#include <nss.h>
-
-typedef enum nss_status NSS_STATUS;
-
-#else /* Nothing's defined. Neither gnu nor sun */
-
-typedef enum
-{
- NSS_STATUS_SUCCESS,
- NSS_STATUS_NOTFOUND,
- NSS_STATUS_UNAVAIL,
- NSS_STATUS_TRYAGAIN
-} NSS_STATUS;
-
+#else
+/* Minimal needed to compile.. */
+enum nss_status {
+NSS_STATUS_SUCCESS,
+NSS_STATUS_NOTFOUND,
+NSS_STATUS_UNAVAIL
+};
#endif
-/* Declarations for functions in winbind_nss.c
- needed in winbind_nss_solaris.c (solaris wrapper to nss) */
-
-NSS_STATUS _nss_winbind_setpwent(void);
-NSS_STATUS _nss_winbind_endpwent(void);
-NSS_STATUS _nss_winbind_getpwent_r(struct passwd* result, char* buffer,
- size_t buflen, int* errnop);
-NSS_STATUS _nss_winbind_getpwuid_r(uid_t, struct passwd*, char* buffer,
- size_t buflen, int* errnop);
-NSS_STATUS _nss_winbind_getpwnam_r(const char* name, struct passwd* result,
- char* buffer, size_t buflen, int* errnop);
-
-NSS_STATUS _nss_winbind_setgrent(void);
-NSS_STATUS _nss_winbind_endgrent(void);
-NSS_STATUS _nss_winbind_getgrent_r(struct group* result, char* buffer,
- size_t buflen, int* errnop);
-NSS_STATUS _nss_winbind_getgrnam_r(const char *name,
- struct group *result, char *buffer,
- size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getgrgid_r(gid_t gid,
- struct group *result, char *buffer,
- size_t buflen, int *errnop);
-
/* I'm trying really hard not to include anything from smb.h with the
result of some silly looking redeclaration of structures. */
@@ -172,7 +127,6 @@ typedef int BOOL;
/* zero a structure given a pointer to the structure */
#define ZERO_STRUCTP(x) { if ((x) != NULL) memset((char *)(x), 0, sizeof(*(x))); }
-
/* Some systems (SCO) treat UNIX domain sockets as FIFOs */
#ifndef S_IFSOCK
diff --git a/source/nsswitch/winbindd.c b/source/nsswitch/winbindd.c
index acb251950ad..b0e35f3cd6e 100644
--- a/source/nsswitch/winbindd.c
+++ b/source/nsswitch/winbindd.c
@@ -267,8 +267,7 @@ static void new_connection(int accept_sock)
{
struct sockaddr_un sunaddr;
struct winbindd_cli_state *state;
- socklen_t len
- int sock;
+ int len, sock;
/* Accept connection */
diff --git a/source/nsswitch/winbindd_cache.c b/source/nsswitch/winbindd_cache.c
index bc519430f3a..7b263dfe009 100644
--- a/source/nsswitch/winbindd_cache.c
+++ b/source/nsswitch/winbindd_cache.c
@@ -39,7 +39,7 @@ void winbindd_cache_init(void)
{
/* Open tdb cache */
unlink(lock_path("winbindd_cache.tdb"));
- if (!(cache_tdb = tdb_open_log(lock_path("winbindd_cache.tdb"), 0,
+ if (!(cache_tdb = tdb_open(lock_path("winbindd_cache.tdb"), 0,
TDB_NOLOCK,
O_RDWR | O_CREAT, 0600))) {
DEBUG(0, ("Unable to open tdb cache - user and group caching "
diff --git a/source/nsswitch/winbindd_idmap.c b/source/nsswitch/winbindd_idmap.c
index 891b79c2758..11f7b8aae7a 100644
--- a/source/nsswitch/winbindd_idmap.c
+++ b/source/nsswitch/winbindd_idmap.c
@@ -210,7 +210,7 @@ BOOL winbindd_idmap_init(void)
{
/* Open tdb cache */
- if (!(idmap_tdb = tdb_open_log(lock_path("winbindd_idmap.tdb"), 0,
+ if (!(idmap_tdb = tdb_open(lock_path("winbindd_idmap.tdb"), 0,
TDB_NOLOCK | TDB_NOMMAP,
O_RDWR | O_CREAT, 0600))) {
DEBUG(0, ("Unable to open idmap database\n"));
diff --git a/source/nsswitch/wins.c b/source/nsswitch/wins.c
index dea6418cb84..be76c2e54ee 100644
--- a/source/nsswitch/wins.c
+++ b/source/nsswitch/wins.c
@@ -31,39 +31,6 @@ extern int DEBUGLEVEL;
#define INADDRSZ 4
#endif
-/* Use our own create socket code so we don't recurse.... */
-
-static int wins_lookup_open_socket_in(void)
-{
- struct sockaddr_in sock;
- int val=1;
- int res;
-
- memset((char *)&sock,'\0',sizeof(sock));
-
-#ifdef HAVE_SOCK_SIN_LEN
- sock.sin_len = sizeof(sock);
-#endif
- sock.sin_port = 0;
- sock.sin_family = AF_INET;
- sock.sin_addr.s_addr = interpret_addr("0.0.0.0");
- res = socket(AF_INET, SOCK_DGRAM, 0);
- if (res == -1)
- return -1;
-
- setsockopt(res,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val));
-#ifdef SO_REUSEPORT
- setsockopt(res,SOL_SOCKET,SO_REUSEPORT,(char *)&val,sizeof(val));
-#endif /* SO_REUSEPORT */
-
- /* now we've got a socket - we need to bind it */
-
- if (bind(res, (struct sockaddr * ) &sock,sizeof(sock)) < 0)
- return(-1);
-
- return res;
-}
-
struct in_addr *lookup_backend(const char *name, int *count)
{
int fd;
@@ -84,9 +51,8 @@ struct in_addr *lookup_backend(const char *name, int *count)
*count = 0;
- fd = wins_lookup_open_socket_in();
- if (fd == -1)
- return NULL;
+ fd = open_socket_in(SOCK_DGRAM,0, 3, interpret_addr("0.0.0.0"), True);
+ if (fd == -1) return NULL;
set_socket_options(fd,"SO_BROADCAST");
@@ -119,7 +85,6 @@ struct in_addr *lookup_backend(const char *name, int *count)
}
out:
-
close(fd);
return ret;
}
@@ -129,24 +94,21 @@ struct in_addr *lookup_backend(const char *name, int *count)
gethostbyname() - we ignore any domain portion of the name and only
handle names that are at most 15 characters long
**************************************************************************/
-
-NSS_STATUS _nss_wins_gethostbyname_r(const char *name, struct hostent *he,
+enum nss_status
+_nss_wins_gethostbyname_r(const char *name, struct hostent *he,
char *buffer, size_t buflen, int *errnop,
int *h_errnop)
{
char **host_addresses;
struct in_addr *ip_list;
int i, count;
- size_t namelen = strlen(name) + 1;
-
- memset(he, '\0', sizeof(*he));
ip_list = lookup_backend(name, &count);
if (!ip_list) {
return NSS_STATUS_NOTFOUND;
}
- if (buflen < namelen + (2*count+1)*INADDRSZ) {
+ if (buflen < (2*count+1)*INADDRSZ) {
/* no ENOMEM error type?! */
return NSS_STATUS_NOTFOUND;
}
@@ -168,11 +130,7 @@ NSS_STATUS _nss_wins_gethostbyname_r(const char *name, struct hostent *he,
host_addresses++;
}
- if (ip_list)
- free(ip_list);
-
- memcpy(buffer, name, namelen);
- he->h_name = buffer;
+ if (ip_list) free(ip_list);
return NSS_STATUS_SUCCESS;
}
diff --git a/source/pam_smbpass/INSTALL b/source/pam_smbpass/INSTALL
deleted file mode 100644
index ae2ba02bbbc..00000000000
--- a/source/pam_smbpass/INSTALL
+++ /dev/null
@@ -1,64 +0,0 @@
-
-Because pam_smbpass is derived from the Samba smbpasswd utility, recent
-versions of pam_smbpass require a copy of the Samba source code to be
-available on the build system. Version 0.7.5 has been tested against
-Samba 2.2.0-alpha3, and this is the recommended version of Samba to use
-for building pam_smbpass. This only affects /building/ pam_smbpass; you
-can still run any version of the Samba server that you want, although
-clearly it saves some disk space to have only one copy of the source
-code on your system (Samba 2.2.0-alpha3 takes roughly 32MB of disk space
-to build pam_smbpass).
-
-Version 0.7.5 features a new build system to make it easier to build
-pam_smbpass.
-
-
-Using the new build system
-==========================
-
-If you don't have a copy of the Samba source code on your machine, and you
-don't have a preferred Samba version (or mirror site), you can build
-pam_smbpass by just typing 'make'.
-
-If you want to use a version other than 2.2.0-alpha3, or you want to
-download the source code from a faster Samba mirror (see
-<http://us1.samba.org/samba/> for a list of mirror sites), please download
-the source code and unpack it before running make. The build scripts will
-attempt to autodetect your Samba source directory, and if it can't be
-found automatically, you will be given the opportunity to specify an
-alternate directory for the Samba sources.
-
-Feedback is welcome if you try (or succeed!) to build pam_smbpass with
-other versions of Samba.
-
-
-Options to 'make'
-=================
-
-By default, pam_smbpass will configure the Samba build tree with the
-options
-
- --with-fhs --with-privatedir=/etc --with-configdir=/etc
-
-This will configure pam_smbpass to look for the smbpasswd file as
-/etc/smbpasswd (or /etc/smbpasswd.tdb), and the smb.conf file as
-/etc/smb.conf. You can override these options by setting CONFIGOPTS when
-calling make. E.g., if you have your smb.conf file in /usr/etc and your
-smbpasswd file in /usr/etc/private, you might run
-
- make CONFIGOPTS="--with-privatedir=/usr/etc/private --with-configdir=/usr/etc"
-
-For a complete list of available configuration options, see
-'./samba/configure --help'
-
-
-Installing the module
-=====================
-
-If all goes well in the build process, the file pam_smbpass.so will be
-created in the current directory. Simply install the module into your
-system's PAM module directory:
-
- install -m 755 -s bin/pam_smbpass.so /lib/security
-
-and you're all set.
diff --git a/source/pam_smbpass/README b/source/pam_smbpass/README
index cf208a99140..6f50ce4d2c0 100644
--- a/source/pam_smbpass/README
+++ b/source/pam_smbpass/README
@@ -59,8 +59,8 @@ and for the occasional good-natured complaint about the project's status
that keep me working on it :)
* and of course, all the other members of the Samba team
-<http://www.samba.org/samba/team.html>, for creating a great product
-and for giving this project a purpose
+<samba-bugs@samba.org>, for creating a great product and for giving this
+project a purpose
---------------------
Stephen Langasek <vorlon@netexpress.net>
diff --git a/source/pam_smbpass/pam_smb_acct.c b/source/pam_smbpass/pam_smb_acct.c
deleted file mode 100644
index af0c21cad57..00000000000
--- a/source/pam_smbpass/pam_smb_acct.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Unix NT password database implementation, version 0.7.5.
- *
- * 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 2 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, write to the Free Software Foundation, Inc., 675
- * Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* indicate the following groups are defined */
-#define PAM_SM_ACCT
-
-#include "includes.h"
-
-#ifndef LINUX
-
-/* This is only used in the Sun implementation. */
-#include <security/pam_appl.h>
-
-#endif /* LINUX */
-
-#include <security/pam_modules.h>
-
-#include "general.h"
-
-#include "support.h"
-
-/*
- * pam_sm_acct_mgmt() verifies whether or not the account is disabled.
- *
- */
-
-int pam_sm_acct_mgmt( pam_handle_t *pamh, int flags,
- int argc, const char **argv )
-{
- unsigned int ctrl;
- int retval;
-
- const char *name;
- const char *p;
- struct smb_passwd *smb_pwent = NULL;
-
- extern BOOL in_client;
-
- /* Samba initialization. */
- setup_logging( "pam_smbpass", False );
- charset_initialise();
- in_client = True;
-
- ctrl = set_ctrl( flags, argc, argv );
-
- /* get the username */
-
- retval = pam_get_user( pamh, &name, "Username: " );
- if (retval != PAM_SUCCESS) {
- if (on( SMB_DEBUG, ctrl )) {
- _log_err( LOG_DEBUG, "acct: could not identify user" );
- }
- return retval;
- }
- if (on( SMB_DEBUG, ctrl )) {
- _log_err( LOG_DEBUG, "acct: username [%s] obtained", name );
- }
-
- if (!initialize_password_db()) {
- _log_err( LOG_ALERT, "Cannot access samba password database" );
- return PAM_AUTHINFO_UNAVAIL;
- }
-
- /* Get the user's record. */
- smb_pwent = getsmbpwnam( name );
-
- if (!smb_pwent)
- return PAM_USER_UNKNOWN;
-
- if (smb_pwent->acct_ctrl & ACB_DISABLED) {
- if (on( SMB_DEBUG, ctrl )) {
- _log_err( LOG_DEBUG
- , "acct: account %s is administratively disabled", name );
- }
- make_remark( pamh, ctrl, PAM_ERROR_MSG
- , "Your account has been disabled; "
- "please see your system administrator." );
-
- return PAM_ACCT_EXPIRED;
- }
-
- /* TODO: support for expired passwords. */
-
- return PAM_SUCCESS;
-}
-
-/* static module data */
-#ifdef PAM_STATIC
-struct pam_module _pam_smbpass_acct_modstruct = {
- "pam_smbpass",
- NULL,
- NULL,
- pam_sm_acct_mgmt,
- NULL,
- NULL,
- NULL
-};
-#endif
-
diff --git a/source/pam_smbpass/pam_smb_auth.c b/source/pam_smbpass/pam_smb_auth.c
deleted file mode 100644
index 0e95a842993..00000000000
--- a/source/pam_smbpass/pam_smb_auth.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Unix NT password database implementation, version 0.7.5.
- *
- * 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 2 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, write to the Free Software Foundation, Inc., 675
- * Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* indicate the following groups are defined */
-#define PAM_SM_AUTH
-
-#include "includes.h"
-#include "debug.h"
-
-#ifndef LINUX
-
-/* This is only used in the Sun implementation. */
-#include <security/pam_appl.h>
-
-#endif /* LINUX */
-
-#include <security/pam_modules.h>
-
-#include "general.h"
-
-#include "support.h"
-
-#define AUTH_RETURN \
-do { \
- if(ret_data) { \
- *ret_data = retval; \
- pam_set_data( pamh, "smb_setcred_return" \
- , (void *) ret_data, NULL ); \
- } \
- return retval; \
-} while (0)
-
-static int _smb_add_user(pam_handle_t *pamh, unsigned int ctrl,
- const char *name, struct smb_passwd *smb_pwent);
-
-/*
- * pam_sm_authenticate() authenticates users against the samba password file.
- *
- * First, obtain the password from the user. Then use a
- * routine in 'support.c' to authenticate the user.
- */
-
-#define _SMB_AUTHTOK "-SMB-PASS"
-
-int pam_sm_authenticate(pam_handle_t *pamh, int flags,
- int argc, const char **argv)
-{
- unsigned int ctrl;
- int retval, *ret_data = NULL;
-
- const char *name;
-
- /* Points to memory managed by the PAM library. Do not free. */
- const char *p = NULL;
-
- struct smb_passwd *smb_pwent = NULL;
-
- extern BOOL in_client;
-
- /* Samba initialization. */
- setup_logging("pam_smbpass",False);
- charset_initialise();
- in_client = True;
-
- ctrl = set_ctrl(flags, argc, argv);
-
- /* Get a few bytes so we can pass our return value to
- pam_sm_setcred(). */
- ret_data = malloc(sizeof(int));
-
- /* get the username */
- retval = pam_get_user( pamh, &name, "Username: " );
- if ( retval != PAM_SUCCESS ) {
- if (on( SMB_DEBUG, ctrl )) {
- _log_err(LOG_DEBUG, "auth: could not identify user");
- }
- AUTH_RETURN;
- }
- if (on( SMB_DEBUG, ctrl )) {
- _log_err( LOG_DEBUG, "username [%s] obtained", name );
- }
-
- if (!initialize_password_db()) {
- _log_err( LOG_ALERT, "Cannot access samba password database" );
- retval = PAM_AUTHINFO_UNAVAIL;
- AUTH_RETURN;
- }
-
- smb_pwent = getsmbpwnam( name );
-
- if (on( SMB_MIGRATE, ctrl )) {
- retval = _smb_add_user(pamh, ctrl, name, smb_pwent);
- AUTH_RETURN;
- }
-
- if (smb_pwent == NULL) {
- _log_err(LOG_ALERT, "Failed to find entry for user %s.", name);
- retval = PAM_USER_UNKNOWN;
- AUTH_RETURN;
- }
-
- /* if this user does not have a password... */
-
- if (_smb_blankpasswd( ctrl, smb_pwent )) {
- smb_pwent = NULL;
- retval = PAM_SUCCESS;
- AUTH_RETURN;
- }
-
- /* get this user's authentication token */
-
- retval = _smb_read_password(pamh, ctrl, NULL, "Password: ", NULL
- , _SMB_AUTHTOK, &p);
- if (retval != PAM_SUCCESS ) {
- _log_err(LOG_CRIT, "auth: no password provided for [%s]"
- , name);
- smb_pwent = NULL;
- AUTH_RETURN;
- }
-
- /* verify the password of this user */
-
- retval = _smb_verify_password( pamh, smb_pwent, p, ctrl );
- smb_pwent = NULL;
- p = NULL;
- AUTH_RETURN;
-}
-
-/*
- * This function is for setting samba credentials. If anyone comes up
- * with any credentials they think should be set, let me know.
- */
-
-int pam_sm_setcred(pam_handle_t *pamh, int flags,
- int argc, const char **argv)
-{
- int retval, *pretval = NULL;
-
- retval = PAM_SUCCESS;
-
- pam_get_data(pamh, "smb_setcred_return", (const void **) &pretval);
- if(pretval) {
- retval = *pretval;
- free(pretval);
- }
- pam_set_data(pamh, "smb_setcred_return", NULL, NULL);
-
- return retval;
-}
-
-
-/* Helper function for adding a user to the db. */
-static int _smb_add_user(pam_handle_t *pamh, unsigned int ctrl,
- const char *name, struct smb_passwd *smb_pwent)
-{
- pstring err_str;
- pstring msg_str;
- const char *pass = NULL;
- int retval;
-
- err_str[0] = '\0';
- msg_str[0] = '\0';
-
- /* Get the authtok; if we don't have one, silently fail. */
- retval = pam_get_item( pamh, PAM_AUTHTOK, (const void **) &pass );
-
- if (retval != PAM_SUCCESS) {
- _log_err( LOG_ALERT
- , "pam_get_item returned error to pam_sm_authenticate" );
- return PAM_AUTHTOK_RECOVER_ERR;
- } else if (pass == NULL) {
- return PAM_AUTHTOK_RECOVER_ERR;
- }
-
- /* Add the user to the db if they aren't already there. */
- if (smb_pwent == NULL) {
- retval = local_password_change( name, LOCAL_ADD_USER,
- pass, err_str,
- sizeof(err_str),
- msg_str, sizeof(msg_str) );
- if (!retval && *err_str)
- {
- err_str[PSTRING_LEN-1] = '\0';
- make_remark( pamh, ctrl, PAM_ERROR_MSG, err_str );
- }
- else if (*msg_str)
- {
- msg_str[PSTRING_LEN-1] = '\0';
- make_remark( pamh, ctrl, PAM_TEXT_INFO, msg_str );
- }
- pass = NULL;
-
- return PAM_IGNORE;
- }
-
- /* Change the user's password IFF it's null. */
- if (smb_pwent->smb_passwd == NULL && (smb_pwent->acct_ctrl & ACB_PWNOTREQ))
- {
- retval = local_password_change( name, 0,
- pass, err_str,
- sizeof(err_str),
- msg_str, sizeof(msg_str) );
- if (!retval && *err_str)
- {
- err_str[PSTRING_LEN-1] = '\0';
- make_remark( pamh, ctrl, PAM_ERROR_MSG, err_str );
- }
- else if (*msg_str)
- {
- msg_str[PSTRING_LEN-1] = '\0';
- make_remark( pamh, ctrl, PAM_TEXT_INFO, msg_str );
- }
- }
- pass = NULL;
-
- return PAM_IGNORE;
-}
-
-
-/* static module data */
-#ifdef PAM_STATIC
-struct pam_module _pam_smbpass_auth_modstruct = {
- "pam_smbpass",
- pam_sm_authenticate,
- pam_sm_setcred,
- NULL,
- NULL,
- NULL,
- NULL
-};
-#endif
-
diff --git a/source/pam_smbpass/pam_smb_passwd.c b/source/pam_smbpass/pam_smb_passwd.c
deleted file mode 100644
index e1bb8f37042..00000000000
--- a/source/pam_smbpass/pam_smb_passwd.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/* Unix NT password database implementation, version 0.7.5.
- *
- * 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 2 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, write to the Free Software Foundation, Inc., 675
- * Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* indicate the following groups are defined */
-#define PAM_SM_PASSWORD
-
-#include "includes.h"
-
-#ifndef LINUX
-
-/* This is only used in the Sun implementation. */
-#include <security/pam_appl.h>
-
-#endif /* LINUX */
-
-#include <security/pam_modules.h>
-
-#include "general.h"
-
-#include "support.h"
-
-int smb_update_db( pam_handle_t *pamh, int ctrl, const char *user
- , const char *pass_new )
-{
- char c;
- int retval, i;
- pstring err_str;
- pstring msg_str;
-
- err_str[0] = '\0';
- msg_str[0] = '\0';
-
- retval = local_password_change( user, 0, pass_new, err_str, sizeof(err_str),
- msg_str, sizeof(msg_str) );
-
- if (!retval) {
- if (*err_str) {
- err_str[PSTRING_LEN-1] = '\0';
- make_remark( pamh, ctrl, PAM_ERROR_MSG, err_str );
- }
-
- /* FIXME: what value is appropriate here? */
- retval = PAM_AUTHTOK_ERR;
- } else {
- if (*msg_str) {
- msg_str[PSTRING_LEN-1] = '\0';
- make_remark( pamh, ctrl, PAM_TEXT_INFO, msg_str );
- }
- retval = PAM_SUCCESS;
- }
-
- return retval;
-
-}
-
-
-/* data tokens */
-
-#define _SMB_OLD_AUTHTOK "-SMB-OLD-PASS"
-#define _SMB_NEW_AUTHTOK "-SMB-NEW-PASS"
-
-/*
- * FUNCTION: pam_sm_chauthtok()
- *
- * This function is called twice by the PAM library, once with
- * PAM_PRELIM_CHECK set, and then again with PAM_UPDATE_AUTHTOK set. With
- * Linux-PAM, these two passes generally involve first checking the old
- * token and then changing the token. This is what we do here.
- *
- * Having obtained a new password. The function updates the
- * SMB_PASSWD_FILE file (normally, $(LIBDIR)/smbpasswd).
- */
-
-int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
- int argc, const char **argv)
-{
- unsigned int ctrl;
- int retval;
-
- extern BOOL in_client;
-
- struct smb_passwd *smb_pwent=NULL;
- const char *user;
- const char *pass_old, *pass_new;
-
- /* Samba initialization. */
- setup_logging( "pam_smbpass", False );
- charset_initialise();
- in_client = True;
-
- ctrl = set_ctrl(flags, argc, argv);
-
- /*
- * First get the name of a user. No need to do anything if we can't
- * determine this.
- */
-
- retval = pam_get_user( pamh, &user, "Username: " );
- if (retval != PAM_SUCCESS) {
- if (on( SMB_DEBUG, ctrl )) {
- _log_err( LOG_DEBUG, "password: could not identify user" );
- }
- return retval;
- }
- if (on( SMB_DEBUG, ctrl )) {
- _log_err( LOG_DEBUG, "username [%s] obtained", user );
- }
-
- if (!initialize_password_db()) {
- _log_err( LOG_ALERT, "Cannot access samba password database" );
- return PAM_AUTHINFO_UNAVAIL;
- }
-
- /* obtain user record */
- smb_pwent = getsmbpwnam(user);
-
- if (smb_pwent == NULL) {
- _log_err( LOG_ALERT, "Failed to find entry for user %s.", user );
- return PAM_USER_UNKNOWN;
- }
-
- if (flags & PAM_PRELIM_CHECK) {
- /*
- * obtain and verify the current password (OLDAUTHTOK) for
- * the user.
- */
-
- char *Announce;
-
- if (_smb_blankpasswd( ctrl, smb_pwent )) {
-
- return PAM_SUCCESS;
-
- }
-
- /* Password change by root, or for an expired token, doesn't
- require authentication. Is this a good choice? */
- if (getuid() != 0 && !(flags & PAM_CHANGE_EXPIRED_AUTHTOK)) {
-
- /* tell user what is happening */
-#define greeting "Changing password for "
- Announce = (char *) malloc(sizeof(greeting)+strlen(user));
- if (Announce == NULL) {
- _log_err(LOG_CRIT, "password: out of memory");
- return PAM_BUF_ERR;
- }
- strncpy( Announce, greeting, sizeof(greeting) );
- strncpy( Announce+sizeof(greeting)-1, user, strlen(user)+1 );
-#undef greeting
-
- set( SMB__OLD_PASSWD, ctrl );
- retval = _smb_read_password( pamh, ctrl
- , Announce
- , "Current SMB password: "
- , NULL
- , _SMB_OLD_AUTHTOK
- , &pass_old );
- free( Announce );
-
- if (retval != PAM_SUCCESS) {
- _log_err( LOG_NOTICE
- , "password - (old) token not obtained" );
- return retval;
- }
-
- /* verify that this is the password for this user */
-
- retval = _smb_verify_password( pamh, smb_pwent, pass_old, ctrl );
-
- } else {
- pass_old = NULL;
- retval = PAM_SUCCESS; /* root doesn't have to */
- }
-
- pass_old = NULL;
- return retval;
-
- } else if (flags & PAM_UPDATE_AUTHTOK) {
-
- if (flags & PAM_CHANGE_EXPIRED_AUTHTOK) {
- /* NOTE: there is currently no support for password expiring
- under Samba. Support will be added here when it becomes
- available. */
- return PAM_SUCCESS;
- }
- /*
- * obtain the proposed password
- */
-
- /*
- * get the old token back. NULL was ok only if root [at this
- * point we assume that this has already been enforced on a
- * previous call to this function].
- */
-
- if (off( SMB_NOT_SET_PASS, ctrl )) {
- retval = pam_get_item( pamh, PAM_OLDAUTHTOK,
- (const void **)&pass_old );
- } else {
- retval = pam_get_data( pamh, _SMB_OLD_AUTHTOK,
- (const void **)&pass_old );
- if (retval == PAM_NO_MODULE_DATA) {
- pass_old = NULL;
- retval = PAM_SUCCESS;
- }
- }
-
- if (retval != PAM_SUCCESS) {
- _log_err( LOG_NOTICE, "password: user not authenticated" );
- return retval;
- }
-
- /*
- * use_authtok is to force the use of a previously entered
- * password -- needed for pluggable password strength checking
- * or other module stacking
- */
-
- if (on( SMB_USE_AUTHTOK, ctrl )) {
- set( SMB_USE_FIRST_PASS, ctrl );
- }
-
- retval = _smb_read_password( pamh, ctrl
- , NULL
- , "Enter new SMB password: "
- , "Retype new SMB password: "
- , _SMB_NEW_AUTHTOK
- , &pass_new );
-
- if (retval != PAM_SUCCESS) {
- if (on( SMB_DEBUG, ctrl )) {
- _log_err( LOG_ALERT
- , "password: new password not obtained" );
- }
- pass_old = NULL; /* tidy up */
- return retval;
- }
-
- /*
- * At this point we know who the user is and what they
- * propose as their new password. Verify that the new
- * password is acceptable.
- */
-
- if (pass_new[0] == '\0') { /* "\0" password = NULL */
- pass_new = NULL;
- }
-
- retval = _pam_smb_approve_pass(pamh, ctrl, pass_old, pass_new);
-
- if (retval != PAM_SUCCESS) {
- _log_err(LOG_NOTICE, "new password not acceptable");
- pass_new = pass_old = NULL; /* tidy up */
- return retval;
- }
-
- /*
- * By reaching here we have approved the passwords and must now
- * rebuild the smb password file.
- */
-
- /* update the password database */
-
- retval = smb_update_db(pamh, ctrl, user, pass_new);
- if (retval == PAM_SUCCESS) {
- /* password updated */
- _log_err( LOG_NOTICE, "password for (%s/%d) changed by (%s/%d)"
- , user, smb_pwent->smb_userid, uidtoname( getuid() )
- , getuid() );
- } else {
- _log_err( LOG_ERR, "password change failed for user %s"
- , user );
- }
-
- pass_old = pass_new = NULL;
- smb_pwent = NULL;
-
- } else { /* something has broken with the library */
-
- _log_err( LOG_ALERT, "password received unknown request" );
- retval = PAM_ABORT;
-
- }
-
- return retval;
-}
-
-/* static module data */
-#ifdef PAM_STATIC
-struct pam_module _pam_smbpass_passwd_modstruct = {
- "pam_smbpass",
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- pam_sm_chauthtok
-};
-#endif
-
diff --git a/source/param/loadparm.c b/source/param/loadparm.c
index fb96c3214de..f8e540466b5 100644
--- a/source/param/loadparm.c
+++ b/source/param/loadparm.c
@@ -86,8 +86,10 @@ pstring global_scope = "";
#endif
/* some helpful bits */
-#define LP_SNUM_OK(i) (((i) >= 0) && ((i) < iNumServices) && ServicePtrs[(i)]->valid)
-#define VALID(i) ServicePtrs[i]->valid
+#define pSERVICE(i) ServicePtrs[i]
+#define iSERVICE(i) (*pSERVICE(i))
+#define LP_SNUM_OK(iService) (((iService) >= 0) && ((iService) < iNumServices) && iSERVICE(iService).valid)
+#define VALID(i) iSERVICE(i).valid
int keepalive = DEFAULT_KEEPALIVE;
BOOL use_getwd_cache = True;
@@ -129,6 +131,8 @@ typedef struct
char *szWorkGroup;
char *szDomainAdminGroup;
char *szDomainGuestGroup;
+ char *szDomainAdminUsers;
+ char *szDomainGuestUsers;
char *szDomainHostsallow;
char *szDomainHostsdeny;
char *szUsernameMap;
@@ -151,6 +155,7 @@ typedef struct
char *szAnnounceVersion; /* This is initialised in init_globals */
char *szNetbiosAliases;
char *szDomainOtherSIDs;
+ char *szDomainGroups;
char *szNameResolveOrder;
char *szLdapServer;
char *szLdapSuffix;
@@ -164,8 +169,9 @@ typedef struct
#ifdef WITH_UTMP
char *szUtmpDir;
char *szWtmpDir;
- BOOL bUtmp;
-#endif
+ char *szUtmpHostname;
+ BOOL bUtmpConsolidate;
+#endif /* WITH_UTMP */
char *szSourceEnv;
char *szWinbindUID;
char *szWinbindGID;
@@ -193,7 +199,6 @@ typedef struct
int iTotalPrintJobs;
int syslog;
int os_level;
- int enhanced_browsing;
int max_ttl;
int max_wins_ttl;
int min_wins_ttl;
@@ -240,20 +245,18 @@ typedef struct
BOOL bUpdateEncrypt;
BOOL bStripDot;
BOOL bNullPasswords;
- BOOL bObeyPamRestrictions;
BOOL bLoadPrinters;
BOOL bUseRhosts;
- BOOL bLargeReadwrite;
BOOL bReadRaw;
BOOL bWriteRaw;
BOOL bReadPrediction;
BOOL bReadbmpx;
BOOL bSyslogOnly;
BOOL bBrowseList;
+ BOOL bUnixRealname;
BOOL bNISHomeMap;
BOOL bTimeServer;
BOOL bBindInterfacesOnly;
- BOOL bPamPasswordChange;
BOOL bUnixPasswdSync;
BOOL bPasswdChatDebug;
BOOL bTimestampLogs;
@@ -351,7 +354,6 @@ typedef struct
BOOL bCaseMangle;
BOOL status;
BOOL bHideDotFiles;
- BOOL bHideUnReadable;
BOOL bBrowseable;
BOOL bAvailable;
BOOL bRead_only;
@@ -366,6 +368,9 @@ typedef struct
BOOL bLocking;
BOOL bStrictLocking;
BOOL bPosixLocking;
+#ifdef WITH_UTMP
+ BOOL bUtmp;
+#endif
BOOL bShareModes;
BOOL bOpLocks;
BOOL bLevel2OpLocks;
@@ -445,12 +450,12 @@ static service sDefault = {
0, /* iWriteCacheSize */
0744, /* iCreate_mask */
0000, /* iCreate_force_mode */
- 0777, /* iSecurity_mask */
- 0, /* iSecurity_force_mode */
+ -1, /* iSecurity_mask */
+ -1, /* iSecurity_force_mode */
0755, /* iDir_mask */
0000, /* iDir_force_mode */
- 0777, /* iDir_Security_mask */
- 0, /* iDir_Security_force_mode */
+ -1, /* iDir_Security_mask */
+ -1, /* iDir_Security_force_mode */
0, /* iMaxConnections */
CASE_LOWER, /* iDefaultCase */
DEFAULT_PRINTING, /* iPrinting */
@@ -464,7 +469,6 @@ static service sDefault = {
False, /* case mangle */
True, /* status */
True, /* bHideDotFiles */
- False, /* bHideUnReadable */
True, /* bBrowseable */
True, /* bAvailable */
True, /* bRead_only */
@@ -479,6 +483,9 @@ static service sDefault = {
True, /* bLocking */
False, /* bStrictLocking */
True, /* bPosixLocking */
+#ifdef WITH_UTMP
+ False, /* bUtmp */
+#endif
True, /* bShareModes */
True, /* bOpLocks */
True, /* bLevel2OpLocks */
@@ -671,7 +678,6 @@ static struct parm_struct parm_table[] = {
{"min password length", P_INTEGER, P_GLOBAL, &Globals.min_passwd_length, NULL, NULL, 0},
{"map to guest", P_ENUM, P_GLOBAL, &Globals.map_to_guest, NULL, enum_map_to_guest, 0},
{"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL, NULL, 0},
- {"obey pam restrictions", P_BOOL, P_GLOBAL, &Globals.bObeyPamRestrictions, NULL, NULL, 0},
{"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL, NULL, 0},
/* #ifdef WITH_TDBPWD
{"tdb passwd file", P_STRING, P_GLOBAL, &Globals.szTDBPasswdFile, NULL, NULL, 0},
@@ -682,7 +688,6 @@ static struct parm_struct parm_table[] = {
{"root dir", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, 0},
{"root", P_STRING, P_GLOBAL, &Globals.szRootdir, NULL, NULL, 0},
- {"pam password change", P_BOOL, P_GLOBAL, &Globals.bPamPasswordChange, NULL, NULL, 0},
{"passwd program", P_STRING, P_GLOBAL, &Globals.szPasswdProgram, NULL, NULL, 0},
{"passwd chat", P_STRING, P_GLOBAL, &Globals.szPasswdChat, NULL, NULL, 0},
{"passwd chat debug", P_BOOL, P_GLOBAL, &Globals.bPasswdChatDebug, NULL, NULL, 0},
@@ -704,7 +709,7 @@ static struct parm_struct parm_table[] = {
{"admin users", P_STRING, P_LOCAL, &sDefault.szAdminUsers, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE},
{"read list", P_STRING, P_LOCAL, &sDefault.readlist, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE},
{"write list", P_STRING, P_LOCAL, &sDefault.writelist, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE},
- {"printer admin", P_STRING, P_LOCAL, &sDefault.printer_admin, NULL, NULL, FLAG_GLOBAL | FLAG_PRINT},
+ {"printer admin", P_STRING, P_LOCAL, &sDefault.printer_admin, NULL, NULL, FLAG_GLOBAL | FLAG_SHARE},
{"force user", P_STRING, P_LOCAL, &sDefault.force_user, NULL, NULL, FLAG_SHARE},
{"force group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, FLAG_SHARE},
{"group", P_STRING, P_LOCAL, &sDefault.force_group, NULL, NULL, 0},
@@ -775,7 +780,6 @@ static struct parm_struct parm_table[] = {
{"Protocol Options", P_SEP, P_SEPARATOR},
{"protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, 0},
- {"large readwrite", P_BOOL, P_GLOBAL, &Globals.bLargeReadwrite, NULL, NULL, 0},
{"max protocol", P_ENUM, P_GLOBAL, &Globals.maxprotocol, NULL, enum_protocol, 0},
{"min protocol", P_ENUM, P_GLOBAL, &Globals.minprotocol, NULL, enum_protocol, 0},
{"read bmpx", P_BOOL, P_GLOBAL, &Globals.bReadbmpx, NULL, NULL, 0},
@@ -863,7 +867,6 @@ static struct parm_struct parm_table[] = {
{"mangle case", P_BOOL, P_LOCAL, &sDefault.bCaseMangle, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
{"mangling char", P_CHAR, P_LOCAL, &sDefault.magic_char, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
{"hide dot files", P_BOOL, P_LOCAL, &sDefault.bHideDotFiles, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
- {"hide unreadable", P_BOOL, P_LOCAL, &sDefault.bHideUnReadable, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
{"delete veto files", P_BOOL, P_LOCAL, &sDefault.bDeleteVetoFiles, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
{"veto files", P_STRING, P_LOCAL, &sDefault.szVetoFiles, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL | FLAG_DOS_STRING},
{"hide files", P_STRING, P_LOCAL, &sDefault.szHideFiles, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL | FLAG_DOS_STRING},
@@ -877,8 +880,11 @@ static struct parm_struct parm_table[] = {
{"Domain Options", P_SEP, P_SEPARATOR},
+ {"domain groups", P_STRING, P_GLOBAL, &Globals.szDomainGroups, NULL, NULL, 0},
{"domain admin group", P_STRING, P_GLOBAL, &Globals.szDomainAdminGroup, NULL, NULL, 0},
{"domain guest group", P_STRING, P_GLOBAL, &Globals.szDomainGuestGroup, NULL, NULL, 0},
+ {"domain admin users", P_STRING, P_GLOBAL, &Globals.szDomainAdminUsers, NULL, NULL, 0},
+ {"domain guest users", P_STRING, P_GLOBAL, &Globals.szDomainGuestUsers, NULL, NULL, 0},
#ifdef USING_GROUPNAME_MAP
{"groupname map", P_STRING, P_GLOBAL, &Globals.szGroupnameMap, NULL, NULL, 0},
@@ -908,7 +914,6 @@ static struct parm_struct parm_table[] = {
{"browse list", P_BOOL, P_GLOBAL, &Globals.bBrowseList, NULL, NULL, 0},
{"browseable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT},
{"browsable", P_BOOL, P_LOCAL, &sDefault.bBrowseable, NULL, NULL, 0},
- {"enhanced browsing", P_BOOL, P_GLOBAL, &Globals.enhanced_browsing, NULL, NULL},
{"WINS Options", P_SEP, P_SEPARATOR},
{"dns proxy", P_BOOL, P_GLOBAL, &Globals.bDNSproxy, NULL, NULL, 0},
@@ -924,6 +929,9 @@ static struct parm_struct parm_table[] = {
{"fake oplocks", P_BOOL, P_LOCAL, &sDefault.bFakeOplocks, NULL, NULL, FLAG_SHARE},
{"kernel oplocks", P_BOOL, P_GLOBAL, &Globals.bKernelOplocks, NULL, NULL, FLAG_GLOBAL},
{"locking", P_BOOL, P_LOCAL, &sDefault.bLocking, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
+#ifdef WITH_UTMP
+ {"utmp", P_BOOL, P_LOCAL, &sDefault.bUtmp, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
+#endif
{"oplocks", P_BOOL, P_LOCAL, &sDefault.bOpLocks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
{"level2 oplocks", P_BOOL, P_LOCAL, &sDefault.bLevel2OpLocks, NULL, NULL, FLAG_SHARE | FLAG_GLOBAL},
@@ -955,13 +963,17 @@ static struct parm_struct parm_table[] = {
{"lock dir", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, 0},
{"lock directory", P_STRING, P_GLOBAL, &Globals.szLockDir, NULL, NULL, 0},
#ifdef WITH_UTMP
+ {"utmp dir", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, 0},
{"utmp directory", P_STRING, P_GLOBAL, &Globals.szUtmpDir, NULL, NULL, 0},
+ {"wtmp dir", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, 0},
{"wtmp directory", P_STRING, P_GLOBAL, &Globals.szWtmpDir, NULL, NULL, 0},
- {"utmp", P_BOOL, P_GLOBAL, &Globals.bUtmp, NULL, NULL, 0},
-#endif
+ {"utmp hostname", P_STRING, P_GLOBAL, &Globals.szUtmpHostname, NULL, NULL, 0},
+ {"utmp consolidate", P_BOOL, P_GLOBAL, &Globals.bUtmpConsolidate, NULL, NULL, 0},
+#endif /* WITH_UTMP */
- {"default service", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_DOS_STRING},
- {"default", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, FLAG_DOS_STRING},
+ {"default service", P_STRING, P_GLOBAL,
+ &Globals.szDefaultService, NULL, NULL, 0},
+ {"default", P_STRING, P_GLOBAL, &Globals.szDefaultService, NULL, NULL, 0},
{"message command", P_STRING, P_GLOBAL, &Globals.szMsgCommand, NULL, NULL, 0},
{"dfree command", P_STRING, P_GLOBAL, &Globals.szDfree, NULL, NULL, 0},
{"valid chars", P_STRING, P_GLOBAL, &Globals.szValidChars, handle_valid_chars, NULL, 0},
@@ -970,6 +982,7 @@ static struct parm_struct parm_table[] = {
{"socket address", P_STRING, P_GLOBAL, &Globals.szSocketAddress, NULL, NULL, 0},
{"homedir map", P_STRING, P_GLOBAL, &Globals.szNISHomeMapName, NULL, NULL, 0},
{"time offset", P_INTEGER, P_GLOBAL, &extra_time_offset, NULL, NULL, 0},
+ {"unix realname", P_BOOL, P_GLOBAL, &Globals.bUnixRealname, NULL, NULL, 0},
{"NIS homedir", P_BOOL, P_GLOBAL, &Globals.bNISHomeMap, NULL, NULL, 0},
{"-valid", P_BOOL, P_LOCAL, &sDefault.valid, NULL, NULL, FLAG_HIDE},
@@ -984,7 +997,7 @@ static struct parm_struct parm_table[] = {
{"root preexec close", P_BOOL, P_LOCAL, &sDefault.bRootpreexecClose, NULL, NULL, FLAG_SHARE},
{"root postexec", P_STRING, P_LOCAL, &sDefault.szRootPostExec, NULL, NULL, FLAG_SHARE | FLAG_PRINT},
{"available", P_BOOL, P_LOCAL, &sDefault.bAvailable, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_PRINT},
- {"volume", P_STRING, P_LOCAL, &sDefault.volume, NULL, NULL, FLAG_SHARE | FLAG_DOS_STRING},
+ {"volume", P_STRING, P_LOCAL, &sDefault.volume, NULL, NULL, FLAG_SHARE},
{"fstype", P_STRING, P_LOCAL, &sDefault.fstype, NULL, NULL, FLAG_SHARE},
{"set directory", P_BOOLREV, P_LOCAL, &sDefault.bNo_set_dir, NULL, NULL, FLAG_SHARE},
{"source environment", P_STRING, P_GLOBAL, &Globals.szSourceEnv, handle_source_env, NULL, 0},
@@ -1005,12 +1018,12 @@ static struct parm_struct parm_table[] = {
{"VFS options", P_SEP, P_SEPARATOR},
- {"vfs object", P_STRING, P_LOCAL, &sDefault.szVfsObjectFile, handle_vfs_object, NULL, FLAG_SHARE},
- {"vfs options", P_STRING, P_LOCAL, &sDefault.szVfsOptions, NULL, NULL, FLAG_SHARE},
+ {"vfs object", P_STRING, P_LOCAL, &sDefault.szVfsObjectFile, handle_vfs_object, NULL, 0},
+ {"vfs options", P_STRING, P_LOCAL, &sDefault.szVfsOptions, NULL, NULL, 0},
{"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE},
- {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, 0},
+ {"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_GLOBAL},
{"Winbind options", P_SEP, P_SEPARATOR},
@@ -1192,8 +1205,9 @@ static void init_globals(void)
#ifdef WITH_UTMP
string_set(&Globals.szUtmpDir, "");
string_set(&Globals.szWtmpDir, "");
- Globals.bUtmp = False;
-#endif
+ string_set(&Globals.szUtmpHostname, "%m");
+ Globals.bUtmpConsolidate = False;
+#endif /* WITH_UTMP */
string_set(&Globals.szSocketAddress, "0.0.0.0");
pstrcpy(s, "Samba ");
pstrcat(s, VERSION);
@@ -1224,7 +1238,6 @@ static void init_globals(void)
Globals.pwordlevel = 0;
Globals.unamelevel = 0;
Globals.deadtime = 0;
- Globals.bLargeReadwrite = False;
Globals.max_log_size = 5000;
Globals.max_open_files = MAX_OPEN_FILES;
Globals.maxprotocol = PROTOCOL_NT1;
@@ -1237,7 +1250,6 @@ static void init_globals(void)
Globals.bReadPrediction = False;
Globals.bReadbmpx = False;
Globals.bNullPasswords = False;
- Globals.bObeyPamRestrictions = False;
Globals.bStripDot = False;
Globals.syslog = 1;
Globals.bSyslogOnly = False;
@@ -1255,6 +1267,7 @@ static void init_globals(void)
Globals.lm_interval = 60;
Globals.stat_cache_size = 50; /* Number of stat translations we'll keep */
Globals.announce_as = ANNOUNCE_AS_NT_SERVER;
+ Globals.bUnixRealname = True;
#if (defined(HAVE_NETGROUP) && defined(WITH_AUTOMOUNT))
Globals.bNISHomeMap = False;
#ifdef WITH_NISPLUS_HOME
@@ -1267,7 +1280,6 @@ static void init_globals(void)
Globals.bTimeServer = False;
Globals.bBindInterfacesOnly = False;
Globals.bUnixPasswdSync = False;
- Globals.bPamPasswordChange = False;
Globals.bPasswdChatDebug = False;
Globals.bNTSmbSupport = True; /* Do NT SMB's by default. */
Globals.bNTPipeSupport = True; /* Do NT pipes by default. */
@@ -1278,7 +1290,6 @@ static void init_globals(void)
Globals.map_to_guest = 0; /* By Default, "Never" */
Globals.min_passwd_length = MINPASSWDLENGTH; /* By Default, 5. */
Globals.oplock_break_wait_time = 0; /* By Default, 0 msecs. */
- Globals.enhanced_browsing = True;
#ifdef WITH_LDAP
/* default values for ldap */
@@ -1403,13 +1414,13 @@ static char *lp_string(const char *s)
int fn_name(void) {return(*(int *)(ptr));}
#define FN_LOCAL_STRING(fn_name,val) \
- char *fn_name(int i) {return(lp_string((LP_SNUM_OK(i) && ServicePtrs[(i)]->val) ? ServicePtrs[(i)]->val : sDefault.val));}
+ char *fn_name(int i) {return(lp_string((LP_SNUM_OK(i)&&pSERVICE(i)->val)?pSERVICE(i)->val : sDefault.val));}
#define FN_LOCAL_BOOL(fn_name,val) \
- BOOL fn_name(int i) {return(LP_SNUM_OK(i)? ServicePtrs[(i)]->val : sDefault.val);}
+ BOOL fn_name(int i) {return(LP_SNUM_OK(i)? pSERVICE(i)->val : sDefault.val);}
#define FN_LOCAL_CHAR(fn_name,val) \
- char fn_name(int i) {return(LP_SNUM_OK(i)? ServicePtrs[(i)]->val : sDefault.val);}
+ char fn_name(int i) {return(LP_SNUM_OK(i)? pSERVICE(i)->val : sDefault.val);}
#define FN_LOCAL_INTEGER(fn_name,val) \
- int fn_name(int i) {return(LP_SNUM_OK(i)? ServicePtrs[(i)]->val : sDefault.val);}
+ int fn_name(int i) {return(LP_SNUM_OK(i)? pSERVICE(i)->val : sDefault.val);}
FN_GLOBAL_STRING(lp_logfile, &Globals.szLogFile)
FN_GLOBAL_STRING(lp_configfile, &Globals.szConfigFile)
@@ -1428,8 +1439,9 @@ FN_GLOBAL_STRING(lp_lockdir, &Globals.szLockDir)
#ifdef WITH_UTMP
FN_GLOBAL_STRING(lp_utmpdir, &Globals.szUtmpDir)
FN_GLOBAL_STRING(lp_wtmpdir, &Globals.szWtmpDir)
-FN_GLOBAL_BOOL(lp_utmp, &Globals.bUtmp)
-#endif
+FN_GLOBAL_STRING(lp_utmp_hostname, &Globals.szUtmpHostname)
+FN_GLOBAL_BOOL(lp_utmp_consolidate, &Globals.bUtmpConsolidate)
+#endif /* WITH_UTMP */
FN_GLOBAL_STRING(lp_rootdir, &Globals.szRootdir)
FN_GLOBAL_STRING(lp_source_environment, &Globals.szSourceEnv)
FN_GLOBAL_STRING(lp_defaultservice, &Globals.szDefaultService)
@@ -1462,8 +1474,11 @@ FN_GLOBAL_STRING(lp_panic_action, &Globals.szPanicAction)
FN_GLOBAL_STRING(lp_adduser_script, &Globals.szAddUserScript)
FN_GLOBAL_STRING(lp_deluser_script, &Globals.szDelUserScript)
FN_GLOBAL_STRING(lp_wins_hook, &Globals.szWINSHook)
+FN_GLOBAL_STRING(lp_domain_groups, &Globals.szDomainGroups)
FN_GLOBAL_STRING(lp_domain_admin_group, &Globals.szDomainAdminGroup)
FN_GLOBAL_STRING(lp_domain_guest_group, &Globals.szDomainGuestGroup)
+FN_GLOBAL_STRING(lp_domain_admin_users, &Globals.szDomainAdminUsers)
+FN_GLOBAL_STRING(lp_domain_guest_users, &Globals.szDomainGuestUsers)
FN_GLOBAL_STRING(lp_winbind_uid, &Globals.szWinbindUID)
FN_GLOBAL_STRING(lp_winbind_gid, &Globals.szWinbindGID)
FN_GLOBAL_STRING(lp_template_homedir, &Globals.szTemplateHomedir)
@@ -1510,10 +1525,8 @@ FN_GLOBAL_BOOL(lp_use_rhosts, &Globals.bUseRhosts)
FN_GLOBAL_BOOL(lp_readprediction, &Globals.bReadPrediction)
FN_GLOBAL_BOOL(lp_readbmpx, &Globals.bReadbmpx)
FN_GLOBAL_BOOL(lp_readraw, &Globals.bReadRaw)
-FN_GLOBAL_BOOL(lp_large_readwrite, &Globals.bLargeReadwrite)
FN_GLOBAL_BOOL(lp_writeraw, &Globals.bWriteRaw)
FN_GLOBAL_BOOL(lp_null_passwords, &Globals.bNullPasswords)
-FN_GLOBAL_BOOL(lp_obey_pam_restrictions, &Globals.bObeyPamRestrictions)
FN_GLOBAL_BOOL(lp_strip_dot, &Globals.bStripDot)
FN_GLOBAL_BOOL(lp_encrypted_passwords, &Globals.bEncryptPasswords)
FN_GLOBAL_BOOL(lp_update_encrypted, &Globals.bUpdateEncrypt)
@@ -1523,10 +1536,10 @@ FN_GLOBAL_BOOL(lp_debug_hires_timestamp, &Globals.bDebugHiresTimestamp)
FN_GLOBAL_BOOL(lp_debug_pid, &Globals.bDebugPid)
FN_GLOBAL_BOOL(lp_debug_uid, &Globals.bDebugUid)
FN_GLOBAL_BOOL(lp_browse_list, &Globals.bBrowseList)
+FN_GLOBAL_BOOL(lp_unix_realname, &Globals.bUnixRealname)
FN_GLOBAL_BOOL(lp_nis_home_map, &Globals.bNISHomeMap)
static FN_GLOBAL_BOOL(lp_time_server, &Globals.bTimeServer)
FN_GLOBAL_BOOL(lp_bind_interfaces_only, &Globals.bBindInterfacesOnly)
-FN_GLOBAL_BOOL(lp_pam_password_change, &Globals.bPamPasswordChange)
FN_GLOBAL_BOOL(lp_unix_password_sync, &Globals.bUnixPasswdSync)
FN_GLOBAL_BOOL(lp_passwd_chat_debug, &Globals.bPasswdChatDebug)
FN_GLOBAL_BOOL(lp_nt_smb_support, &Globals.bNTSmbSupport)
@@ -1538,7 +1551,6 @@ FN_GLOBAL_BOOL(lp_restrict_anonymous, &Globals.bRestrictAnonymous)
FN_GLOBAL_BOOL(lp_lanman_auth, &Globals.bLanmanAuth)
FN_GLOBAL_BOOL(lp_host_msdfs, &Globals.bHostMSDfs)
FN_GLOBAL_BOOL(lp_kernel_oplocks, &Globals.bKernelOplocks)
-FN_GLOBAL_BOOL(lp_enhanced_browsing, &Globals.enhanced_browsing)
FN_GLOBAL_INTEGER(lp_os_level, &Globals.os_level)
FN_GLOBAL_INTEGER(lp_max_ttl, &Globals.max_ttl)
FN_GLOBAL_INTEGER(lp_max_wins_ttl, &Globals.max_wins_ttl)
@@ -1622,7 +1634,6 @@ FN_LOCAL_BOOL(lp_shortpreservecase, bShortCasePreserve)
FN_LOCAL_BOOL(lp_casemangle, bCaseMangle)
FN_LOCAL_BOOL(lp_status, status)
FN_LOCAL_BOOL(lp_hide_dot_files, bHideDotFiles)
-FN_LOCAL_BOOL(lp_hideunreadable, bHideUnReadable)
FN_LOCAL_BOOL(lp_browseable, bBrowseable)
FN_LOCAL_BOOL(lp_readonly, bRead_only)
FN_LOCAL_BOOL(lp_no_set_dir, bNo_set_dir)
@@ -1635,6 +1646,9 @@ FN_LOCAL_BOOL(lp_map_archive, bMap_archive)
FN_LOCAL_BOOL(lp_locking, bLocking)
FN_LOCAL_BOOL(lp_strict_locking, bStrictLocking)
FN_LOCAL_BOOL(lp_posix_locking, bPosixLocking)
+#ifdef WITH_UTMP
+FN_LOCAL_BOOL(lp_utmp, bUtmp)
+#endif
FN_LOCAL_BOOL(lp_share_modes, bShareModes)
FN_LOCAL_BOOL(lp_oplocks, bOpLocks)
FN_LOCAL_BOOL(lp_level2_oplocks, bLevel2OpLocks)
@@ -1656,12 +1670,12 @@ FN_LOCAL_BOOL(lp_blocking_locks, bBlockingLocks)
FN_LOCAL_BOOL(lp_inherit_perms, bInheritPerms)
FN_LOCAL_INTEGER(lp_create_mask, iCreate_mask)
FN_LOCAL_INTEGER(lp_force_create_mode, iCreate_force_mode)
-FN_LOCAL_INTEGER(lp_security_mask, iSecurity_mask)
-FN_LOCAL_INTEGER(lp_force_security_mode, iSecurity_force_mode)
+FN_LOCAL_INTEGER(_lp_security_mask, iSecurity_mask)
+FN_LOCAL_INTEGER(_lp_force_security_mode, iSecurity_force_mode)
FN_LOCAL_INTEGER(lp_dir_mask, iDir_mask)
FN_LOCAL_INTEGER(lp_force_dir_mode, iDir_force_mode)
-FN_LOCAL_INTEGER(lp_dir_security_mask, iDir_Security_mask)
-FN_LOCAL_INTEGER(lp_force_dir_security_mode, iDir_Security_force_mode)
+FN_LOCAL_INTEGER(_lp_dir_security_mask, iDir_Security_mask)
+FN_LOCAL_INTEGER(_lp_force_dir_security_mode, iDir_Security_force_mode)
FN_LOCAL_INTEGER(lp_max_connections, iMaxConnections)
FN_LOCAL_INTEGER(lp_defaultcase, iDefaultCase)
FN_LOCAL_INTEGER(lp_minprintspace, iMinPrintSpace)
@@ -1725,8 +1739,6 @@ static void free_service(service * pservice)
string_free((char **)
(((char *)pservice) +
PTR_DIFF(parm_table[i].ptr, &sDefault)));
-
- ZERO_STRUCTP(pservice);
}
/***************************************************************************
@@ -1751,49 +1763,35 @@ static int add_a_service(service * pservice, char *name)
/* find an invalid one */
for (i = 0; i < iNumServices; i++)
- if (!ServicePtrs[i]->valid)
+ if (!pSERVICE(i)->valid)
break;
/* if not, then create one */
if (i == iNumServices)
{
-#ifdef __INSURE__
- service **oldservices = iNumServices ? malloc(sizeof(service *) * iNumServices) : NULL;
-
- if (iNumServices)
- memcpy(oldservices, ServicePtrs, sizeof(service *) * iNumServices);
-#endif
-
ServicePtrs =
(service **) Realloc(ServicePtrs,
sizeof(service *) *
num_to_alloc);
-#ifdef __INSURE__
- if (iNumServices && (memcmp(oldservices, ServicePtrs, sizeof(service *) * iNumServices) != 0)) {
- smb_panic("add_a_service: Realloc corrupted ptrs...\n");
- }
- safe_free(oldservices);
-#endif
-
if (ServicePtrs)
- ServicePtrs[iNumServices] =
+ pSERVICE(iNumServices) =
(service *) malloc(sizeof(service));
- if (!ServicePtrs || !ServicePtrs[iNumServices])
+ if (!ServicePtrs || !pSERVICE(iNumServices))
return (-1);
iNumServices++;
}
else
- free_service(ServicePtrs[i]);
+ free_service(pSERVICE(i));
- ServicePtrs[i]->valid = True;
+ pSERVICE(i)->valid = True;
- init_service(ServicePtrs[i]);
- copy_service(ServicePtrs[i], &tservice, NULL);
+ init_service(pSERVICE(i));
+ copy_service(pSERVICE(i), &tservice, NULL);
if (name)
{
- string_set(&ServicePtrs[i]->szService, name);
+ string_set(&iSERVICE(i).szService, name);
}
return (i);
}
@@ -1804,23 +1802,23 @@ from service ifrom. homename must be in DOS codepage.
***************************************************************************/
BOOL lp_add_home(char *pszHomename, int iDefaultService, char *pszHomedir)
{
- int i = add_a_service(ServicePtrs[iDefaultService], pszHomename);
+ int i = add_a_service(pSERVICE(iDefaultService), pszHomename);
if (i < 0)
return (False);
- if (!(*(ServicePtrs[i]->szPath))
- || strequal(ServicePtrs[i]->szPath, lp_pathname(-1)))
- string_set(&ServicePtrs[i]->szPath, pszHomedir);
- if (!(*(ServicePtrs[i]->comment)))
+ if (!(*(iSERVICE(i).szPath))
+ || strequal(iSERVICE(i).szPath, lp_pathname(-1)))
+ string_set(&iSERVICE(i).szPath, pszHomedir);
+ if (!(*(iSERVICE(i).comment)))
{
pstring comment;
slprintf(comment, sizeof(comment) - 1,
"Home directory of %s", pszHomename);
- string_set(&ServicePtrs[i]->comment, comment);
+ string_set(&iSERVICE(i).comment, comment);
}
- ServicePtrs[i]->bAvailable = sDefault.bAvailable;
- ServicePtrs[i]->bBrowseable = sDefault.bBrowseable;
+ iSERVICE(i).bAvailable = sDefault.bAvailable;
+ iSERVICE(i).bBrowseable = sDefault.bBrowseable;
DEBUG(3,
("adding home directory %s at %s\n", pszHomename, pszHomedir));
@@ -1833,7 +1831,7 @@ add a new service, based on an old one. pszService must be in DOS codepage.
***************************************************************************/
int lp_add_service(char *pszService, int iDefaultService)
{
- return (add_a_service(ServicePtrs[iDefaultService], pszService));
+ return (add_a_service(pSERVICE(iDefaultService), pszService));
}
@@ -1851,18 +1849,18 @@ static BOOL lp_add_ipc(char *ipc_name, BOOL guest_ok)
slprintf(comment, sizeof(comment) - 1,
"IPC Service (%s)", Globals.szServerString);
- string_set(&ServicePtrs[i]->szPath, tmpdir());
- string_set(&ServicePtrs[i]->szUsername, "");
- string_set(&ServicePtrs[i]->comment, comment);
- string_set(&ServicePtrs[i]->fstype, "IPC");
- ServicePtrs[i]->status = False;
- ServicePtrs[i]->iMaxConnections = 0;
- ServicePtrs[i]->bAvailable = True;
- ServicePtrs[i]->bRead_only = True;
- ServicePtrs[i]->bGuest_only = False;
- ServicePtrs[i]->bGuest_ok = guest_ok;
- ServicePtrs[i]->bPrint_ok = False;
- ServicePtrs[i]->bBrowseable = sDefault.bBrowseable;
+ string_set(&iSERVICE(i).szPath, tmpdir());
+ string_set(&iSERVICE(i).szUsername, "");
+ string_set(&iSERVICE(i).comment, comment);
+ string_set(&iSERVICE(i).fstype, "IPC");
+ iSERVICE(i).status = False;
+ iSERVICE(i).iMaxConnections = 0;
+ iSERVICE(i).bAvailable = True;
+ iSERVICE(i).bRead_only = True;
+ iSERVICE(i).bGuest_only = False;
+ iSERVICE(i).bGuest_ok = guest_ok;
+ iSERVICE(i).bPrint_ok = False;
+ iSERVICE(i).bBrowseable = sDefault.bBrowseable;
DEBUG(3, ("adding IPC service %s\n", ipc_name));
@@ -1877,7 +1875,7 @@ printername must be in DOS codepage.
BOOL lp_add_printer(char *pszPrintername, int iDefaultService)
{
char *comment = "From Printcap";
- int i = add_a_service(ServicePtrs[iDefaultService], pszPrintername);
+ int i = add_a_service(pSERVICE(iDefaultService), pszPrintername);
if (i < 0)
return (False);
@@ -1888,17 +1886,17 @@ BOOL lp_add_printer(char *pszPrintername, int iDefaultService)
/* entry (if/when the 'available' keyword is implemented!). */
/* the printer name is set to the service name. */
- string_set(&ServicePtrs[i]->szPrintername, pszPrintername);
- string_set(&ServicePtrs[i]->comment, comment);
- ServicePtrs[i]->bBrowseable = sDefault.bBrowseable;
+ string_set(&iSERVICE(i).szPrintername, pszPrintername);
+ string_set(&iSERVICE(i).comment, comment);
+ iSERVICE(i).bBrowseable = sDefault.bBrowseable;
/* Printers cannot be read_only. */
- ServicePtrs[i]->bRead_only = False;
+ iSERVICE(i).bRead_only = False;
/* No share modes on printer services. */
- ServicePtrs[i]->bShareModes = False;
+ iSERVICE(i).bShareModes = False;
/* No oplocks on printer services. */
- ServicePtrs[i]->bOpLocks = False;
+ iSERVICE(i).bOpLocks = False;
/* Printer services must be printable. */
- ServicePtrs[i]->bPrint_ok = True;
+ iSERVICE(i).bPrint_ok = True;
DEBUG(3, ("adding printer service %s\n", pszPrintername));
@@ -1963,10 +1961,12 @@ static int getservicebyname(char *pszServiceName, service * pserviceDest)
for (iService = iNumServices - 1; iService >= 0; iService--)
if (VALID(iService) &&
- strwicmp(ServicePtrs[iService]->szService, pszServiceName) == 0)
+ strwicmp(iSERVICE(iService).szService,
+ pszServiceName) == 0)
{
if (pserviceDest != NULL)
- copy_service(pserviceDest, ServicePtrs[iService], NULL);
+ copy_service(pserviceDest, pSERVICE(iService),
+ NULL);
break;
}
@@ -2049,7 +2049,7 @@ static BOOL service_ok(int iService)
BOOL bRetval;
bRetval = True;
- if (ServicePtrs[iService]->szService[0] == '\0')
+ if (iSERVICE(iService).szService[0] == '\0')
{
DEBUG(0,
("The following message indicates an internal error:\n"));
@@ -2059,31 +2059,31 @@ static BOOL service_ok(int iService)
/* The [printers] entry MUST be printable. I'm all for flexibility, but */
/* I can't see why you'd want a non-printable printer service... */
- if (strwicmp(ServicePtrs[iService]->szService, PRINTERS_NAME) == 0) {
- if (!ServicePtrs[iService]->bPrint_ok) {
+ if (strwicmp(iSERVICE(iService).szService, PRINTERS_NAME) == 0) {
+ if (!iSERVICE(iService).bPrint_ok) {
DEBUG(0,
("WARNING: [%s] service MUST be printable!\n",
- ServicePtrs[iService]->szService));
- ServicePtrs[iService]->bPrint_ok = True;
+ iSERVICE(iService).szService));
+ iSERVICE(iService).bPrint_ok = True;
}
/* [printers] service must also be non-browsable. */
- if (ServicePtrs[iService]->bBrowseable)
- ServicePtrs[iService]->bBrowseable = False;
+ if (iSERVICE(iService).bBrowseable)
+ iSERVICE(iService).bBrowseable = False;
}
- if (ServicePtrs[iService]->szPath[0] == '\0' &&
- strwicmp(ServicePtrs[iService]->szService, HOMES_NAME) != 0)
+ if (iSERVICE(iService).szPath[0] == '\0' &&
+ strwicmp(iSERVICE(iService).szService, HOMES_NAME) != 0)
{
DEBUG(0,
("No path in service %s - using %s\n",
- ServicePtrs[iService]->szService, tmpdir()));
- string_set(&ServicePtrs[iService]->szPath, tmpdir());
+ iSERVICE(iService).szService, tmpdir()));
+ string_set(&iSERVICE(iService).szPath, tmpdir());
}
/* If a service is flagged unavailable, log the fact at level 0. */
- if (!ServicePtrs[iService]->bAvailable)
+ if (!iSERVICE(iService).bAvailable)
DEBUG(1, ("NOTE: Service %s is flagged unavailable.\n",
- ServicePtrs[iService]->szService));
+ iSERVICE(iService).szService));
return (bRetval);
}
@@ -2429,9 +2429,9 @@ static BOOL handle_copy(char *pszParmValue, char **ptr)
}
else
{
- copy_service(ServicePtrs[iServiceIndex],
+ copy_service(pSERVICE(iServiceIndex),
&serviceTemp,
- ServicePtrs[iServiceIndex]->copymap);
+ iSERVICE(iServiceIndex).copymap);
bRetval = True;
}
}
@@ -2528,7 +2528,7 @@ static void init_copymap(service * pservice)
***************************************************************************/
void *lp_local_ptr(int snum, void *ptr)
{
- return (void *)(((char *)ServicePtrs[snum]) + PTR_DIFF(ptr, &sDefault));
+ return (void *)(((char *)pSERVICE(snum)) + PTR_DIFF(ptr, &sDefault));
}
/***************************************************************************
@@ -2573,20 +2573,20 @@ BOOL lp_do_parameter(int snum, char *pszParmName, char *pszParmValue)
return (True);
}
parm_ptr =
- ((char *)ServicePtrs[snum]) + PTR_DIFF(def_ptr,
+ ((char *)pSERVICE(snum)) + PTR_DIFF(def_ptr,
&sDefault);
}
if (snum >= 0)
{
- if (!ServicePtrs[snum]->copymap)
- init_copymap(ServicePtrs[snum]);
+ if (!iSERVICE(snum).copymap)
+ init_copymap(pSERVICE(snum));
/* this handles the aliases - set the copymap for other entries with
the same data pointer */
for (i = 0; parm_table[i].label; i++)
if (parm_table[i].ptr == parm_table[parmnum].ptr)
- ServicePtrs[snum]->copymap[i] = False;
+ iSERVICE(snum).copymap[i] = False;
}
/* if it is a special case then go ahead */
@@ -2921,7 +2921,7 @@ BOOL lp_is_default(int snum, struct parm_struct *parm)
int pdiff = PTR_DIFF(parm->ptr, &sDefault);
return equal_parameter(parm->type,
- ((char *)ServicePtrs[snum]) + pdiff,
+ ((char *)pSERVICE(snum)) + pdiff,
((char *)&sDefault) + pdiff);
}
@@ -2995,7 +2995,7 @@ struct parm_struct *lp_next_parameter(int snum, int *i, int allparameters)
}
else
{
- service *pService = ServicePtrs[snum];
+ service *pService = pSERVICE(snum);
for (; parm_table[*i].label; (*i)++)
{
@@ -3057,7 +3057,7 @@ Return TRUE if the passed service number is within range.
***************************************************************************/
BOOL lp_snum_ok(int iService)
{
- return (LP_SNUM_OK(iService) && ServicePtrs[iService]->bAvailable);
+ return (LP_SNUM_OK(iService) && iSERVICE(iService).bAvailable);
}
@@ -3107,9 +3107,9 @@ void lp_add_one_printer(char *name, char *comment)
lp_add_printer(name, printers);
if ((i = lp_servicenumber(name)) >= 0)
{
- string_set(&ServicePtrs[i]->comment, comment);
- unix_to_dos(ServicePtrs[i]->comment, True);
- ServicePtrs[i]->autoloaded = True;
+ string_set(&iSERVICE(i).comment, comment);
+ unix_to_dos(iSERVICE(i).comment, True);
+ iSERVICE(i).autoloaded = True;
}
}
}
@@ -3135,8 +3135,8 @@ void lp_killunused(BOOL (*snumused) (int))
if (!snumused || !snumused(i))
{
- ServicePtrs[i]->valid = False;
- free_service(ServicePtrs[i]);
+ iSERVICE(i).valid = False;
+ free_service(pSERVICE(i));
}
}
}
@@ -3149,8 +3149,8 @@ void lp_killservice(int iServiceIn)
{
if (VALID(iServiceIn))
{
- ServicePtrs[iServiceIn]->valid = False;
- free_service(ServicePtrs[iServiceIn]);
+ iSERVICE(iServiceIn).valid = False;
+ free_service(pSERVICE(iServiceIn));
}
}
@@ -3354,9 +3354,9 @@ void lp_dump_one(FILE * f, BOOL show_defaults, int snum, char *(*dos_to_ext)(cha
{
if (VALID(snum))
{
- if (ServicePtrs[snum]->szService[0] == '\0')
+ if (iSERVICE(snum).szService[0] == '\0')
return;
- dump_a_service(ServicePtrs[snum], f, dos_to_ext);
+ dump_a_service(pSERVICE(snum), f, dos_to_ext);
}
}
@@ -3385,14 +3385,17 @@ int lp_servicenumber(char *pszServiceName)
}
/*******************************************************************
- A useful volume label function. Returns a string in DOS codepage.
-********************************************************************/
-
+ a useful volume label function
+ ******************************************************************/
char *volume_label(int snum)
{
char *ret = lp_volume(snum);
- if (!*ret)
- return lp_servicename(snum);
+ if (!*ret) {
+ /* lp_volume returns a unix charset - lp_servicename returns a
+ dos codepage - convert so volume_label() always returns UNIX.
+ */
+ return (dos_to_unix(lp_servicename(snum), False));
+ }
return (ret);
}
@@ -3515,7 +3518,7 @@ remove a service
********************************************************************/
void lp_remove_service(int snum)
{
- ServicePtrs[snum]->valid = False;
+ pSERVICE(snum)->valid = False;
}
/*******************************************************************
@@ -3598,6 +3601,43 @@ void lp_set_name_resolve_order(char *new_order)
Globals.szNameResolveOrder = new_order;
}
+/***********************************************************
+ Functions to return the current security masks/modes. If
+ set to -1 then return the create mask/mode instead.
+************************************************************/
+
+int lp_security_mask(int snum)
+{
+ int val = _lp_security_mask(snum);
+ if (val == -1)
+ return lp_create_mask(snum);
+ return val;
+}
+
+int lp_force_security_mode(int snum)
+{
+ int val = _lp_force_security_mode(snum);
+ if (val == -1)
+ return lp_force_create_mode(snum);
+ return val;
+}
+
+int lp_dir_security_mask(int snum)
+{
+ int val = _lp_dir_security_mask(snum);
+ if (val == -1)
+ return lp_dir_mask(snum);
+ return val;
+}
+
+int lp_force_dir_security_mode(int snum)
+{
+ int val = _lp_force_dir_security_mode(snum);
+ if (val == -1)
+ return lp_force_dir_mode(snum);
+ return val;
+}
+
char *lp_printername(int snum)
{
char *ret = _lp_printername(snum);
diff --git a/source/passdb/nispass.c b/source/passdb/nispass.c
index c1a867bc338..007ae10d06d 100644
--- a/source/passdb/nispass.c
+++ b/source/passdb/nispass.c
@@ -49,7 +49,7 @@ extern int DEBUGLEVEL;
extern pstring samlogon_user;
extern BOOL sam_logon_in_ssb;
-static VOLATILE sig_atomic_t gotalarm;
+static VOLATILE SIG_ATOMIC_T gotalarm;
/***************************************************************
diff --git a/source/passdb/pampass.c b/source/passdb/pampass.c
index 53d2a062fdd..e6de54dfe69 100644
--- a/source/passdb/pampass.c
+++ b/source/passdb/pampass.c
@@ -5,7 +5,6 @@
Copyright (C) Andrew Tridgell 1992-2001
Copyright (C) John H Terpsta 1999-2001
Copyright (C) Andrew Bartlett 2001
- Copyright (C) Jeremy Allison 2001
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
@@ -44,106 +43,65 @@ extern int DEBUGLEVEL;
#include <security/pam_appl.h>
/*
- * Structure used to communicate between the conversation function
- * and the server_login/change password functions.
+ * Static variables used to communicate between the conversation function
+ * and the server_login function
*/
-struct smb_pam_userdata {
- char *PAM_username;
- char *PAM_password;
- char *PAM_newpassword;
-};
-
-typedef int (*smb_pam_conv_fn)(int, const struct pam_message **, struct pam_response **, void *appdata_ptr);
+static char *PAM_username;
+static char *PAM_password;
/*
* Macros to help make life easy
*/
#define COPY_STRING(s) (s) ? strdup(s) : NULL
-/*******************************************************************
- PAM error handler.
- *********************************************************************/
-
-static BOOL smb_pam_error_handler(pam_handle_t *pamh, int pam_error, char *msg, int dbglvl)
+/*
+ * PAM error handler.
+ */
+static BOOL pam_error_handler(pam_handle_t *pamh, int pam_error, char *msg, int dbglvl)
{
- if( pam_error != PAM_SUCCESS) {
- DEBUG(dbglvl, ("smb_pam_error_handler: PAM: %s : %s\n",
- msg, pam_strerror(pamh, pam_error)));
-
+ if( pam_error != PAM_SUCCESS)
+ {
+ DEBUG(dbglvl, ("PAM: %s : %s\n", msg, pam_strerror(pamh, pam_error)));
return False;
}
return True;
}
-/*******************************************************************
- This function is a sanity check, to make sure that we NEVER report
- failure as sucess.
-*********************************************************************/
-
-static BOOL smb_pam_nt_status_error_handler(pam_handle_t *pamh, int pam_error,
- char *msg, int dbglvl, uint32 *nt_status)
-{
- if (smb_pam_error_handler(pamh, pam_error, msg, dbglvl))
- return True;
-
- if (*nt_status == NT_STATUS_NOPROBLEMO) {
- /* Complain LOUDLY */
- DEBUG(0, ("smb_pam_nt_status_error_handler: PAM: BUG: PAM and NT_STATUS \
-error MISMATCH, forcing to NT_STATUS_LOGON_FAILURE"));
- *nt_status = NT_STATUS_LOGON_FAILURE;
- }
- return False;
-}
-
/*
* PAM conversation function
* Here we assume (for now, at least) that echo on means login name, and
* echo off means password.
*/
-static int smb_pam_conv(int num_msg,
+static int PAM_conv(int num_msg,
const struct pam_message **msg,
struct pam_response **resp,
void *appdata_ptr)
{
int replies = 0;
struct pam_response *reply = NULL;
- struct smb_pam_userdata *udp = (struct smb_pam_userdata *)appdata_ptr;
-
- *resp = NULL;
-
- if (num_msg <= 0)
- return PAM_CONV_ERR;
-
- /*
- * Apparantly HPUX has a buggy PAM that doesn't support the
- * appdata_ptr. Fail if this is the case. JRA.
- */
-
- if (udp == NULL) {
- DEBUG(0,("smb_pam_conv: PAM on this system is broken - appdata_ptr == NULL !\n"));
- return PAM_CONV_ERR;
- }
reply = malloc(sizeof(struct pam_response) * num_msg);
if (!reply)
return PAM_CONV_ERR;
- memset(reply, '\0', sizeof(struct pam_response) * num_msg);
-
- for (replies = 0; replies < num_msg; replies++) {
- switch (msg[replies]->msg_style) {
+ for (replies = 0; replies < num_msg; replies++)
+ {
+ switch (msg[replies]->msg_style)
+ {
case PAM_PROMPT_ECHO_ON:
reply[replies].resp_retcode = PAM_SUCCESS;
- reply[replies].resp = COPY_STRING(udp->PAM_username);
+ reply[replies].resp =
+ COPY_STRING(PAM_username);
/* PAM frees resp */
break;
case PAM_PROMPT_ECHO_OFF:
reply[replies].resp_retcode = PAM_SUCCESS;
- reply[replies].resp = COPY_STRING(udp->PAM_password);
+ reply[replies].resp =
+ COPY_STRING(PAM_password);
/* PAM frees resp */
break;
@@ -167,712 +125,291 @@ static int smb_pam_conv(int num_msg,
return PAM_SUCCESS;
}
-/*
- * PAM password change conversation function
- * Here we assume (for now, at least) that echo on means login name, and
- * echo off means password.
- */
-
-static void special_char_sub(char *buf)
-{
- all_string_sub(buf, "\\n", "", 0);
- all_string_sub(buf, "\\r", "", 0);
- all_string_sub(buf, "\\s", " ", 0);
- all_string_sub(buf, "\\t", "\t", 0);
-}
-
-static void pwd_sub(char *buf, char *username, char *oldpass, char *newpass)
-{
- pstring_sub(buf, "%u", username);
- all_string_sub(buf, "%o", oldpass, sizeof(fstring));
- all_string_sub(buf, "%n", newpass, sizeof(fstring));
-}
-
-
-struct chat_struct {
- struct chat_struct *next, *prev;
- fstring prompt;
- fstring reply;
+static struct pam_conv PAM_conversation = {
+ &PAM_conv,
+ NULL
};
-/**************************************************************
- Create a linked list containing chat data.
-***************************************************************/
-
-static struct chat_struct *make_pw_chat(char *p)
-{
- fstring prompt;
- fstring reply;
- struct chat_struct *list = NULL;
- struct chat_struct *t;
- struct chat_struct *tmp;
-
- while (1) {
- t = (struct chat_struct *)malloc(sizeof(*t));
- if (!t) {
- DEBUG(0,("make_pw_chat: malloc failed!\n"));
- return NULL;
- }
-
- ZERO_STRUCTP(t);
-
- DLIST_ADD_END(list, t, tmp);
-
- if (!next_token(&p, prompt, NULL, sizeof(fstring)))
- break;
-
- if (strequal(prompt,"."))
- fstrcpy(prompt,"*");
-
- special_char_sub(prompt);
- fstrcpy(t->prompt, prompt);
-
- if (!next_token(&p, reply, NULL, sizeof(fstring)))
- break;
-
- if (strequal(reply,"."))
- fstrcpy(reply,"");
-
- special_char_sub(reply);
- fstrcpy(t->reply, reply);
-
- }
- return list;
-}
-
-static void free_pw_chat(struct chat_struct *list)
-{
- while (list) {
- struct chat_struct *old_head = list;
- DLIST_REMOVE(list, list);
- free(old_head);
- }
-}
-
-static int smb_pam_passchange_conv(int num_msg,
- const struct pam_message **msg,
- struct pam_response **resp,
- void *appdata_ptr)
-{
- int replies = 0;
- struct pam_response *reply = NULL;
- fstring current_prompt;
- fstring current_reply;
- struct smb_pam_userdata *udp = (struct smb_pam_userdata *)appdata_ptr;
- struct chat_struct *pw_chat= make_pw_chat(lp_passwd_chat());
- struct chat_struct *t;
- BOOL found;
- *resp = NULL;
-
- DEBUG(10,("smb_pam_passchange_conv: starting converstation for %d messages\n", num_msg));
-
- if (num_msg <= 0)
- return PAM_CONV_ERR;
-
- if (pw_chat == NULL)
- return PAM_CONV_ERR;
-
- /*
- * Apparantly HPUX has a buggy PAM that doesn't support the
- * appdata_ptr. Fail if this is the case. JRA.
- */
-
- if (udp == NULL) {
- DEBUG(0,("smb_pam_passchange_conv: PAM on this system is broken - appdata_ptr == NULL !\n"));
- free_pw_chat(pw_chat);
- return PAM_CONV_ERR;
- }
-
- reply = malloc(sizeof(struct pam_response) * num_msg);
- if (!reply) {
- DEBUG(0,("smb_pam_passchange_conv: malloc for reply failed!\n"));
- free_pw_chat(pw_chat);
- return PAM_CONV_ERR;
- }
-
- for (replies = 0; replies < num_msg; replies++) {
- found = False;
- DEBUG(10,("smb_pam_passchange_conv: Processing message %d\n", replies));
- switch (msg[replies]->msg_style) {
- case PAM_PROMPT_ECHO_ON:
- DEBUG(10,("smb_pam_passchange_conv: PAM_PROMPT_ECHO_ON: PAM said: %s\n", msg[replies]->msg));
- fstrcpy(current_prompt, msg[replies]->msg);
- strlower(current_prompt);
- for (t=pw_chat; t; t=t->next) {
- if (ms_fnmatch(t->prompt, current_prompt) == 0) {
- fstrcpy(current_reply, t->reply);
- pwd_sub(current_reply, udp->PAM_username, udp->PAM_password, udp->PAM_newpassword);
- DEBUG(10,("smb_pam_passchange_conv: PAM_PROMPT_ECHO_ON: We sent: %s\n", current_reply));
- reply[replies].resp_retcode = PAM_SUCCESS;
- reply[replies].resp = COPY_STRING(current_reply);
- found = True;
- break;
- }
- }
- /* PAM frees resp */
- if (!found) {
- DEBUG(3,("smb_pam_passchange_conv: Could not find reply for PAM prompt: %s\n",msg[replies]->msg));
- free_pw_chat(pw_chat);
- free(reply);
- reply = NULL;
- return PAM_CONV_ERR;
- }
- break;
-
- case PAM_PROMPT_ECHO_OFF:
- DEBUG(10,("smb_pam_passchange_conv: PAM_PROMPT_ECHO_OFF: PAM said: %s\n", msg[replies]->msg));
- fstrcpy(current_prompt, msg[replies]->msg);
- strlower(current_prompt);
- for (t=pw_chat; t; t=t->next) {
- if (ms_fnmatch(t->prompt, current_prompt) == 0) {
- fstrcpy(current_reply, t->reply);
- DEBUG(10,("smb_pam_passchange_conv: PAM_PROMPT_ECHO_OFF: We sent: %s\n", current_reply));
- pwd_sub(current_reply, udp->PAM_username, udp->PAM_password, udp->PAM_newpassword);
- reply[replies].resp_retcode = PAM_SUCCESS;
- reply[replies].resp = COPY_STRING(current_reply);
-#ifdef DEBUG_PASSWORD
- DEBUG(100,("smb_pam_passchange_conv: PAM_PROMPT_ECHO_OFF: We actualy sent: %s\n", current_reply));
-#endif
- found = True;
- break;
- }
- }
- /* PAM frees resp */
-
- if (!found) {
- DEBUG(3,("smb_pam_passchange_conv: Could not find reply for PAM prompt: %s\n",msg[replies]->msg));
- free_pw_chat(pw_chat);
- free(reply);
- reply = NULL;
- return PAM_CONV_ERR;
- }
- break;
-
- case PAM_TEXT_INFO:
- /* fall through */
-
- case PAM_ERROR_MSG:
- /* ignore it... */
- reply[replies].resp_retcode = PAM_SUCCESS;
- reply[replies].resp = NULL;
- break;
-
- default:
- /* Must be an error of some sort... */
- free_pw_chat(pw_chat);
- free(reply);
- reply = NULL;
- return PAM_CONV_ERR;
- }
- }
-
- free_pw_chat(pw_chat);
- if (reply)
- *resp = reply;
- return PAM_SUCCESS;
-}
-
-/***************************************************************************
- Free up a malloced pam_conv struct.
-****************************************************************************/
-
-static void smb_free_pam_conv(struct pam_conv *pconv)
-{
- if (pconv)
- safe_free(pconv->appdata_ptr);
-
- safe_free(pconv);
-}
-
-/***************************************************************************
- Allocate a pam_conv struct.
-****************************************************************************/
-
-static struct pam_conv *smb_setup_pam_conv(smb_pam_conv_fn smb_pam_conv_fnptr, char *user,
- char *passwd, char *newpass)
-{
- struct pam_conv *pconv = (struct pam_conv *)malloc(sizeof(struct pam_conv));
- struct smb_pam_userdata *udp = (struct smb_pam_userdata *)malloc(sizeof(struct smb_pam_userdata));
-
- if (pconv == NULL || udp == NULL) {
- safe_free(pconv);
- safe_free(udp);
- return NULL;
- }
-
- udp->PAM_username = user;
- udp->PAM_password = passwd;
- udp->PAM_newpassword = newpass;
-
- pconv->conv = smb_pam_conv_fnptr;
- pconv->appdata_ptr = (void *)udp;
- return pconv;
-}
-
/*
* PAM Closing out cleanup handler
*/
-
-static BOOL smb_pam_end(pam_handle_t *pamh, struct pam_conv *smb_pam_conv_ptr)
+static BOOL proc_pam_end(pam_handle_t *pamh)
{
- int pam_error;
-
- smb_free_pam_conv(smb_pam_conv_ptr);
+ int pam_error;
- if( pamh != NULL ) {
+ if( pamh != NULL )
+ {
pam_error = pam_end(pamh, 0);
- if(smb_pam_error_handler(pamh, pam_error, "End Cleanup Failed", 2) == True) {
- DEBUG(4, ("smb_pam_end: PAM: PAM_END OK.\n"));
- return True;
+ if(pam_error_handler(pamh, pam_error, "End Cleanup Failed", 2) == True) {
+ DEBUG(4, ("PAM: PAM_END OK.\n"));
+ return True;
}
- }
- DEBUG(2,("smb_pam_end: PAM: not initialised"));
- return False;
+ }
+ DEBUG(2,("PAM: not initialised"));
+ return False;
}
/*
* Start PAM authentication for specified account
*/
-
-static BOOL smb_pam_start(pam_handle_t **pamh, char *user, char *rhost, struct pam_conv *pconv)
+static BOOL proc_pam_start(pam_handle_t **pamh, char *user)
{
- int pam_error;
+ int pam_error;
+ char * rhost;
- *pamh = (pam_handle_t *)NULL;
+ DEBUG(4,("PAM: Init user: %s\n", user));
- DEBUG(4,("smb_pam_start: PAM: Init user: %s\n", user));
+ pam_error = pam_start("samba", user, &PAM_conversation, pamh);
+ if( !pam_error_handler(*pamh, pam_error, "Init Failed", 0)) {
+ proc_pam_end(*pamh);
+ return False;
+ }
- pam_error = pam_start("samba", user, pconv, pamh);
- if( !smb_pam_error_handler(*pamh, pam_error, "Init Failed", 0)) {
- *pamh = (pam_handle_t *)NULL;
- return False;
- }
-
- if (rhost == NULL) {
- rhost = client_name();
- if (strequal(rhost,"UNKNOWN"))
- rhost = client_addr();
- }
+ rhost = client_name();
+ if (strcmp(rhost,"UNKNOWN") == 0)
+ rhost = client_addr();
#ifdef PAM_RHOST
- DEBUG(4,("smb_pam_start: PAM: setting rhost to: %s\n", rhost));
- pam_error = pam_set_item(*pamh, PAM_RHOST, rhost);
- if(!smb_pam_error_handler(*pamh, pam_error, "set rhost failed", 0)) {
- smb_pam_end(*pamh, pconv);
- *pamh = (pam_handle_t *)NULL;
- return False;
- }
+ DEBUG(4,("PAM: setting rhost to: %s\n", rhost));
+ pam_error = pam_set_item(*pamh, PAM_RHOST, rhost);
+ if(!pam_error_handler(*pamh, pam_error, "set rhost failed", 0)) {
+ proc_pam_end(*pamh);
+ return False;
+ }
#endif
#ifdef PAM_TTY
- DEBUG(4,("smb_pam_start: PAM: setting tty\n"));
- pam_error = pam_set_item(*pamh, PAM_TTY, "samba");
- if (!smb_pam_error_handler(*pamh, pam_error, "set tty failed", 0)) {
- smb_pam_end(*pamh, pconv);
- *pamh = (pam_handle_t *)NULL;
- return False;
- }
+ DEBUG(4,("PAM: setting tty\n"));
+ pam_error = pam_set_item(*pamh, PAM_TTY, "samba");
+ if (!pam_error_handler(*pamh, pam_error, "set tty failed", 0)) {
+ proc_pam_end(*pamh);
+ return False;
+ }
#endif
- DEBUG(4,("smb_pam_start: PAM: Init passed for user: %s\n", user));
- return True;
+ DEBUG(4,("PAM: Init passed for user: %s\n", user));
+ return True;
}
/*
* PAM Authentication Handler
*/
-static uint32 smb_pam_auth(pam_handle_t *pamh, char *user)
+static BOOL pam_auth(pam_handle_t *pamh, char *user, char *password)
{
int pam_error;
- uint32 nt_status = NT_STATUS_LOGON_FAILURE;
/*
* To enable debugging set in /etc/pam.d/samba:
* auth required /lib/security/pam_pwdb.so nullok shadow audit
*/
- DEBUG(4,("smb_pam_auth: PAM: Authenticate User: %s\n", user));
- pam_error = pam_authenticate(pamh, PAM_SILENT | lp_null_passwords() ? 0 : PAM_DISALLOW_NULL_AUTHTOK);
+ DEBUG(4,("PAM: Authenticate User: %s\n", user));
+ pam_error = pam_authenticate(pamh, PAM_SILENT); /* Can we authenticate user? */
switch( pam_error ){
case PAM_AUTH_ERR:
- DEBUG(2, ("smb_pam_auth: PAM: Athentication Error for user %s\n", user));
- nt_status = NT_STATUS_WRONG_PASSWORD;
+ DEBUG(2, ("PAM: Athentication Error\n"));
break;
case PAM_CRED_INSUFFICIENT:
- DEBUG(2, ("smb_pam_auth: PAM: Insufficient Credentials for user %s\n", user));
- nt_status = NT_STATUS_INSUFFICIENT_LOGON_INFO;
+ DEBUG(2, ("PAM: Insufficient Credentials\n"));
break;
case PAM_AUTHINFO_UNAVAIL:
- DEBUG(2, ("smb_pam_auth: PAM: Authentication Information Unavailable for user %s\n", user));
- nt_status = NT_STATUS_LOGON_FAILURE;
+ DEBUG(2, ("PAM: Authentication Information Unavailable\n"));
break;
case PAM_USER_UNKNOWN:
- DEBUG(2, ("smb_pam_auth: PAM: Username %s NOT known to Authentication system\n", user));
- nt_status = NT_STATUS_NO_SUCH_USER;
+ DEBUG(2, ("PAM: Username NOT known to Authentication system\n"));
break;
case PAM_MAXTRIES:
- DEBUG(2, ("smb_pam_auth: PAM: One or more authentication modules reports user limit for user %s exceeeded\n", user));
- nt_status = NT_STATUS_REMOTE_SESSION_LIMIT;
+ DEBUG(2, ("PAM: One or more authentication modules reports user limit exceeeded\n"));
break;
case PAM_ABORT:
- DEBUG(0, ("smb_pam_auth: PAM: One or more PAM modules failed to load for user %s\n", user));
- nt_status = NT_STATUS_LOGON_FAILURE;
- break;
- case PAM_SUCCESS:
- DEBUG(4, ("smb_pam_auth: PAM: User %s Authenticated OK\n", user));
- nt_status = NT_STATUS_NOPROBLEMO;
+ DEBUG(0, ("PAM: One or more PAM modules failed to load\n"));
break;
+ case PAM_SUCCESS:
+ DEBUG(4, ("PAM: User %s Authenticated OK\n", user));
+ break;
default:
- DEBUG(0, ("smb_pam_auth: PAM: UNKNOWN ERROR while authenticating user %s\n", user));
- nt_status = NT_STATUS_LOGON_FAILURE;
- break;
+ DEBUG(0, ("PAM: UNKNOWN ERROR while authenticating user %s\n", user));
}
-
- smb_pam_nt_status_error_handler(pamh, pam_error, "Authentication Failure", 2, &nt_status);
- return nt_status;
+ if(!pam_error_handler(pamh, pam_error, "Authentication Failure", 2)) {
+ proc_pam_end(pamh);
+ return False;
+ }
+ /* If this point is reached, the user has been authenticated. */
+ return (True);
}
/*
* PAM Account Handler
*/
-static uint32 smb_pam_account(pam_handle_t *pamh, char * user)
+static BOOL pam_account(pam_handle_t *pamh, char * user, char * password)
{
int pam_error;
- uint32 nt_status = NT_STATUS_ACCOUNT_DISABLED;
- DEBUG(4,("smb_pam_account: PAM: Account Management for User: %s\n", user));
+ DEBUG(4,("PAM: Account Management for User: %s\n", user));
pam_error = pam_acct_mgmt(pamh, PAM_SILENT); /* Is user account enabled? */
switch( pam_error ) {
case PAM_AUTHTOK_EXPIRED:
- DEBUG(2, ("smb_pam_account: PAM: User %s is valid but password is expired\n", user));
- nt_status = NT_STATUS_PASSWORD_EXPIRED;
+ DEBUG(2, ("PAM: User is valid but password is expired\n"));
break;
case PAM_ACCT_EXPIRED:
- DEBUG(2, ("smb_pam_account: PAM: User %s no longer permitted to access system\n", user));
- nt_status = NT_STATUS_ACCOUNT_EXPIRED;
+ DEBUG(2, ("PAM: User no longer permitted to access system\n"));
break;
case PAM_AUTH_ERR:
- DEBUG(2, ("smb_pam_account: PAM: There was an authentication error for user %s\n", user));
- nt_status = NT_STATUS_LOGON_FAILURE;
+ DEBUG(2, ("PAM: There was an authentication error\n"));
break;
case PAM_PERM_DENIED:
- DEBUG(0, ("smb_pam_account: PAM: User %s is NOT permitted to access system at this time\n", user));
- nt_status = NT_STATUS_ACCOUNT_RESTRICTION;
+ DEBUG(0, ("PAM: User is NOT permitted to access system at this time\n"));
break;
case PAM_USER_UNKNOWN:
- DEBUG(0, ("smb_pam_account: PAM: User \"%s\" is NOT known to account management\n", user));
- nt_status = NT_STATUS_NO_SUCH_USER;
- break;
- case PAM_SUCCESS:
- DEBUG(4, ("smb_pam_account: PAM: Account OK for User: %s\n", user));
- nt_status = NT_STATUS_NOPROBLEMO;
+ DEBUG(0, ("PAM: User \"%s\" is NOT known to account management\n", user));
break;
+ case PAM_SUCCESS:
+ DEBUG(4, ("PAM: Account OK for User: %s\n", user));
+ break;
default:
- nt_status = NT_STATUS_ACCOUNT_DISABLED;
- DEBUG(0, ("smb_pam_account: PAM: UNKNOWN PAM ERROR (%d) during Account Management for User: %s\n", pam_error, user));
- break;
+ DEBUG(0, ("PAM: UNKNOWN ERROR for User: %s\n", user));
+ }
+ if(!pam_error_handler(pamh, pam_error, "Account Check Failed", 2)) {
+ proc_pam_end(pamh);
+ return False;
}
-
- smb_pam_nt_status_error_handler(pamh, pam_error, "Account Check Failed", 2, &nt_status);
- return nt_status;
-}
-
-/*
- * PAM Credential Setting
- */
-
-static uint32 smb_pam_setcred(pam_handle_t *pamh, char * user)
-{
- int pam_error;
- uint32 nt_status = NT_STATUS_NO_TOKEN;
/*
* This will allow samba to aquire a kerberos token. And, when
* exporting an AFS cell, be able to /write/ to this cell.
*/
- DEBUG(4,("PAM: Account Management SetCredentials for User: %s\n", user));
+ DEBUG(4,("PAM: Account Management SetCredentials for User: %s\n", user));
pam_error = pam_setcred(pamh, (PAM_ESTABLISH_CRED|PAM_SILENT));
- switch( pam_error ) {
- case PAM_CRED_UNAVAIL:
- DEBUG(0, ("smb_pam_setcred: PAM: Credentials not found for user:%s\n", user ));
- nt_status = NT_STATUS_NO_TOKEN;
- break;
- case PAM_CRED_EXPIRED:
- DEBUG(0, ("smb_pam_setcred: PAM: Credentials for user: \"%s\" EXPIRED!\n", user ));
- nt_status = NT_STATUS_PASSWORD_EXPIRED;
- break;
- case PAM_USER_UNKNOWN:
- DEBUG(0, ("smb_pam_setcred: PAM: User: \"%s\" is NOT known so can not set credentials!\n", user ));
- nt_status = NT_STATUS_NO_SUCH_USER;
- break;
- case PAM_CRED_ERR:
- DEBUG(0, ("smb_pam_setcred: PAM: Unknown setcredentials error - unable to set credentials for %s\n", user ));
- nt_status = NT_STATUS_LOGON_FAILURE;
- break;
- case PAM_SUCCESS:
- DEBUG(4, ("smb_pam_setcred: PAM: SetCredentials OK for User: %s\n", user));
- nt_status = NT_STATUS_NOPROBLEMO;
- break;
- default:
- DEBUG(0, ("smb_pam_setcred: PAM: UNKNOWN PAM ERROR (%d) during SetCredentials for User: %s\n", pam_error, user));
- nt_status = NT_STATUS_NO_TOKEN;
- break;
- }
-
- smb_pam_nt_status_error_handler(pamh, pam_error, "Set Credential Failure", 2, &nt_status);
- return nt_status;
-}
-
-/*
- * PAM Internal Session Handler
- */
-static BOOL smb_internal_pam_session(pam_handle_t *pamh, char *user, char *tty, BOOL flag)
-{
- int pam_error;
-
-#ifdef PAM_TTY
- DEBUG(4,("smb_internal_pam_session: PAM: tty set to: %s\n", tty));
- pam_error = pam_set_item(pamh, PAM_TTY, tty);
- if (!smb_pam_error_handler(pamh, pam_error, "set tty failed", 0))
+ if(!pam_error_handler(pamh, pam_error, "Set Credential Failure", 2)) {
+ proc_pam_end(pamh);
return False;
-#endif
-
- if (flag) {
- pam_error = pam_open_session(pamh, PAM_SILENT);
- if (!smb_pam_error_handler(pamh, pam_error, "session setup failed", 0))
- return False;
- } else {
- pam_setcred(pamh, (PAM_DELETE_CRED|PAM_SILENT)); /* We don't care if this fails */
- pam_error = pam_close_session(pamh, PAM_SILENT); /* This will probably pick up the error anyway */
- if (!smb_pam_error_handler(pamh, pam_error, "session close failed", 0))
- return False;
}
+
+ /* If this point is reached, the user has been authenticated. */
return (True);
}
+
/*
- * Internal PAM Password Changer.
+ * PAM Internal Session Handler
*/
-
-static BOOL smb_pam_chauthtok(pam_handle_t *pamh, char * user)
+static BOOL proc_pam_session(pam_handle_t *pamh, char *user, char *tty, BOOL flag)
{
- int pam_error;
-
- DEBUG(4,("smb_pam_chauthtok: PAM: Password Change for User: %s\n", user));
+ int pam_error;
- pam_error = pam_chauthtok(pamh, PAM_SILENT); /* Change Password */
+ PAM_password = NULL;
+ PAM_username = user;
- switch( pam_error ) {
- case PAM_AUTHTOK_ERR:
- DEBUG(2, ("PAM: unable to obtain the new authentication token - is password to weak?\n"));
- break;
-
- /* This doesn't seem to be defined on Solaris. JRA */
-#ifdef PAM_AUTHTOK_RECOVER_ERR
- case PAM_AUTHTOK_RECOVER_ERR:
- DEBUG(2, ("PAM: unable to obtain the old authentication token - was the old password wrong?.\n"));
- break;
+#ifdef PAM_TTY
+ DEBUG(4,("PAM: tty set to: %s\n", tty));
+ pam_error = pam_set_item(pamh, PAM_TTY, tty);
+ if (!pam_error_handler(pamh, pam_error, "set tty failed", 0)) {
+ proc_pam_end(pamh);
+ return False;
+ }
#endif
- case PAM_AUTHTOK_LOCK_BUSY:
- DEBUG(2, ("PAM: unable to change the authentication token since it is currently locked.\n"));
- break;
- case PAM_AUTHTOK_DISABLE_AGING:
- DEBUG(2, ("PAM: Authentication token aging has been disabled.\n"));
- break;
- case PAM_PERM_DENIED:
- DEBUG(0, ("PAM: Permission denied.\n"));
- break;
- case PAM_TRY_AGAIN:
- DEBUG(0, ("PAM: Could not update all authentication token(s). No authentication tokens were updated.\n"));
- break;
- case PAM_USER_UNKNOWN:
- DEBUG(0, ("PAM: User not known to PAM\n"));
- break;
- case PAM_SUCCESS:
- DEBUG(4, ("PAM: Account OK for User: %s\n", user));
- break;
- default:
- DEBUG(0, ("PAM: UNKNOWN PAM ERROR (%d) for User: %s\n", pam_error, user));
- }
-
- if(!smb_pam_error_handler(pamh, pam_error, "Password Change Failed", 2)) {
- return False;
- }
-
- /* If this point is reached, the password has changed. */
- return True;
+ if (flag) {
+ pam_error = pam_open_session(pamh, PAM_SILENT);
+ if (!pam_error_handler(pamh, pam_error, "session setup failed", 0)) {
+ proc_pam_end(pamh);
+ return False;
+ }
+ }
+ else
+ {
+ pam_error = pam_close_session(pamh, PAM_SILENT);
+ if (!pam_error_handler(pamh, pam_error, "session close failed", 0)) {
+ proc_pam_end(pamh);
+ return False;
+ }
+ }
+ return (True);
}
/*
* PAM Externally accessible Session handler
*/
-
-BOOL smb_pam_claim_session(char *user, char *tty, char *rhost)
+BOOL pam_session(BOOL flag, const connection_struct *conn, char *tty)
{
pam_handle_t *pamh = NULL;
- struct pam_conv *pconv = NULL;
-
- /* Ignore PAM if told to. */
-
- if (!lp_obey_pam_restrictions())
- return True;
-
- if ((pconv = smb_setup_pam_conv(smb_pam_conv, user, NULL, NULL)) == NULL)
- return False;
-
- if (!smb_pam_start(&pamh, user, rhost, pconv))
- return False;
+ char * user;
- if (!smb_internal_pam_session(pamh, user, tty, True)) {
- smb_pam_end(pamh, pconv);
+ user = malloc(strlen(conn->user)+1);
+ if ( user == NULL )
+ {
+ DEBUG(0, ("PAM: PAM_session Malloc Failed!\n"));
return False;
}
- return smb_pam_end(pamh, pconv);
-}
-
-/*
- * PAM Externally accessible Session handler
- */
-
-BOOL smb_pam_close_session(char *user, char *tty, char *rhost)
-{
- pam_handle_t *pamh = NULL;
- struct pam_conv *pconv = NULL;
-
- /* Ignore PAM if told to. */
-
- if (!lp_obey_pam_restrictions())
- return True;
-
- if ((pconv = smb_setup_pam_conv(smb_pam_conv, user, NULL, NULL)) == NULL)
- return False;
-
- if (!smb_pam_start(&pamh, user, rhost, pconv))
- return False;
+ /* This is freed by PAM */
+ StrnCpy(user, conn->user, strlen(conn->user)+1);
- if (!smb_internal_pam_session(pamh, user, tty, False)) {
- smb_pam_end(pamh, pconv);
- return False;
+ if (!proc_pam_start(&pamh, user))
+ {
+ proc_pam_end(pamh);
+ return False;
}
- return smb_pam_end(pamh, pconv);
+ if (proc_pam_session(pamh, user, tty, flag))
+ {
+ return proc_pam_end(pamh);
+ }
+ else
+ {
+ proc_pam_end(pamh);
+ return False;
+ }
}
/*
* PAM Externally accessible Account handler
*/
-
-uint32 smb_pam_accountcheck(char * user)
+BOOL pam_accountcheck(char * user)
{
- uint32 nt_status = NT_STATUS_ACCOUNT_DISABLED;
pam_handle_t *pamh = NULL;
- struct pam_conv *pconv = NULL;
-
- /* Ignore PAM if told to. */
-
- if (!lp_obey_pam_restrictions())
- return NT_STATUS_NOPROBLEMO;
-
- if ((pconv = smb_setup_pam_conv(smb_pam_conv, user, NULL, NULL)) == NULL)
- return False;
-
- if (!smb_pam_start(&pamh, user, NULL, pconv))
- return NT_STATUS_ACCOUNT_DISABLED;
- if ((nt_status = smb_pam_account(pamh, user)) != NT_STATUS_NOPROBLEMO)
- DEBUG(0, ("smb_pam_accountcheck: PAM: Account Validation Failed - Rejecting User %s!\n", user));
+ PAM_username = user;
+ PAM_password = NULL;
- smb_pam_end(pamh, pconv);
- return nt_status;
-}
-
-/*
- * PAM Password Validation Suite
- */
-
-uint32 smb_pam_passcheck(char * user, char * password)
-{
- pam_handle_t *pamh = NULL;
- uint32 nt_status = NT_STATUS_LOGON_FAILURE;
- struct pam_conv *pconv = NULL;
-
- /*
- * Note we can't ignore PAM here as this is the only
- * way of doing auths on plaintext passwords when
- * compiled --with-pam.
- */
-
- if ((pconv = smb_setup_pam_conv(smb_pam_conv, user, password, NULL)) == NULL)
- return NT_STATUS_LOGON_FAILURE;
-
- if (!smb_pam_start(&pamh, user, NULL, pconv))
- return NT_STATUS_LOGON_FAILURE;
-
- if ((nt_status = smb_pam_auth(pamh, user)) != NT_STATUS_NOPROBLEMO) {
- DEBUG(0, ("smb_pam_passcheck: PAM: smb_pam_auth failed - Rejecting User %s !\n", user));
- smb_pam_end(pamh, pconv);
- return nt_status;
- }
-
- if ((nt_status = smb_pam_account(pamh, user)) != NT_STATUS_NOPROBLEMO) {
- DEBUG(0, ("smb_pam_passcheck: PAM: smb_pam_account failed - Rejecting User %s !\n", user));
- smb_pam_end(pamh, pconv);
- return nt_status;
- }
-
- if ((nt_status = smb_pam_setcred(pamh, user)) != NT_STATUS_NOPROBLEMO) {
- DEBUG(0, ("smb_pam_passcheck: PAM: smb_pam_setcred failed - Rejecting User %s !\n", user));
- smb_pam_end(pamh, pconv);
- return nt_status;
+ if( proc_pam_start(&pamh, user))
+ {
+ if ( pam_account(pamh, user, NULL))
+ {
+ return( proc_pam_end(pamh));
+ }
}
-
- smb_pam_end(pamh, pconv);
- return nt_status;
+ DEBUG(0, ("PAM: Account Validation Failed - Rejecting User!\n"));
+ return( False );
}
/*
- * PAM Password Change Suite
+ * PAM Password Validation Suite
*/
-
-BOOL smb_pam_passchange(char * user, char * oldpassword, char * newpassword)
+BOOL pam_passcheck(char * user, char * password)
{
- /* Appropriate quantities of root should be obtained BEFORE calling this function */
- struct pam_conv *pconv = NULL;
pam_handle_t *pamh = NULL;
- if ((pconv = smb_setup_pam_conv(smb_pam_passchange_conv, user, oldpassword, newpassword)) == NULL)
- return False;
-
- if(!smb_pam_start(&pamh, user, NULL, pconv))
- return False;
+ PAM_username = user;
+ PAM_password = password;
- if (!smb_pam_chauthtok(pamh, user)) {
- DEBUG(0, ("smb_pam_passchange: PAM: Password Change Failed for user %s!\n", user));
- smb_pam_end(pamh, pconv);
- return False;
+ if( proc_pam_start(&pamh, user))
+ {
+ if ( pam_auth(pamh, user, password))
+ {
+ if ( pam_account(pamh, user, password))
+ {
+ return( proc_pam_end(pamh));
+ }
+ }
}
-
- return smb_pam_end(pamh, pconv);
+ DEBUG(0, ("PAM: System Validation Failed - Rejecting User!\n"));
+ return( False );
}
#else
-/* If PAM not used, no PAM restrictions on accounts. */
- uint32 smb_pam_accountcheck(char * user)
-{
- return NT_STATUS_NOPROBLEMO;
-}
+ /* Do *NOT* make this function static. Doing so breaks the compile on gcc */
-/* If PAM not used, also no PAM restrictions on sessions. */
- BOOL smb_pam_claim_session(char *user, char *tty, char *rhost)
-{
- return True;
-}
+ void pampass_dummy_function( void ) { } /*This stops compiler complaints */
-/* If PAM not used, also no PAM restrictions on sessions. */
- BOOL smb_pam_close_session(char *in_user, char *tty, char *rhost)
-{
- return True;
-}
#endif /* WITH_PAM */
diff --git a/source/passdb/pass_check.c b/source/passdb/pass_check.c
index 9424189b236..236465bc903 100644
--- a/source/passdb/pass_check.c
+++ b/source/passdb/pass_check.c
@@ -599,7 +599,7 @@ static BOOL password_check(char *password)
{
#ifdef WITH_PAM
- return (smb_pam_passcheck(this_user, password) == NT_STATUS_NOPROBLEMO);
+ return (pam_passcheck(this_user, password));
#endif /* WITH_PAM */
#ifdef WITH_AFS
@@ -681,13 +681,12 @@ the function pointer fn() points to a function to call when a successful
match is found and is used to update the encrypted password file
return True on correct match, False otherwise
****************************************************************************/
-
BOOL pass_check(char *user, char *password, int pwlen, struct passwd *pwd,
BOOL (*fn) (char *, char *))
{
pstring pass2;
int level = lp_passwordlevel();
- struct passwd *pass = NULL;
+ struct passwd *pass;
if (password)
password[pwlen] = 0;
@@ -709,20 +708,8 @@ BOOL pass_check(char *user, char *password, int pwlen, struct passwd *pwd,
pass = Get_Pwnam(user, True);
}
-#ifdef WITH_PAM
-
- /*
- * If we're using PAM we want to short-circuit all the
- * checks below and dive straight into the PAM code.
- */
-
- fstrcpy(this_user, user);
-
- DEBUG(4, ("pass_check: Checking (PAM) password for user %s (l=%d)\n", user, pwlen));
-
-#else /* Not using PAM */
- DEBUG(4, ("pass_check: Checking password for user %s (l=%d)\n", user, pwlen));
+ DEBUG(4, ("Checking password for user %s (l=%d)\n", user, pwlen));
if (!pass) {
DEBUG(3, ("Couldn't find user %s\n", user));
@@ -815,8 +802,6 @@ BOOL pass_check(char *user, char *password, int pwlen, struct passwd *pwd,
}
}
-#endif /* WITH_PAM */
-
/* try it as it came to us */
if (password_check(password)) {
if (fn)
diff --git a/source/passdb/passdb.c b/source/passdb/passdb.c
index e1d7dca39a6..9fc280c2580 100644
--- a/source/passdb/passdb.c
+++ b/source/passdb/passdb.c
@@ -897,10 +897,6 @@ BOOL pdb_name_to_rid(char *user_name, uint32 *u_rid, uint32 *g_rid)
return False;
}
-
- /* These parameters where removed. Use the 'domain admins' or 'domain
- guests' instead. --jerry */
-#if 0 /* JERRY */
if (user_in_list(user_name, lp_domain_guest_users()))
{
*u_rid = DOMAIN_USER_RID_GUEST;
@@ -911,11 +907,10 @@ BOOL pdb_name_to_rid(char *user_name, uint32 *u_rid, uint32 *g_rid)
}
else
{
-#endif
-
- /* turn the unix UID into a Domain RID. this is what the posix
- sub-system does (adds 1000 to the uid) */
- *u_rid = pdb_uid_to_user_rid(pw->pw_uid);
+ /* turn the unix UID into a Domain RID. this is what the posix
+ sub-system does (adds 1000 to the uid) */
+ *u_rid = pdb_uid_to_user_rid(pw->pw_uid);
+ }
/* absolutely no idea what to do about the unix GID to Domain RID mapping */
*g_rid = pdb_gid_to_group_rid(pw->pw_gid);
@@ -1240,17 +1235,13 @@ BOOL local_lookup_rid(uint32 rid, char *name, enum SID_NAME_USE *psid_name_use)
if(rid == DOMAIN_USER_RID_ADMIN) {
pstring admin_users;
char *p = admin_users;
-#if 0 /* JERRY */
pstrcpy( admin_users, lp_domain_admin_users());
-#endif
if(!next_token(&p, name, NULL, sizeof(fstring)))
fstrcpy(name, "Administrator");
} else if (rid == DOMAIN_USER_RID_GUEST) {
pstring guest_users;
char *p = guest_users;
-#if 0 /* JERRY */
pstrcpy( guest_users, lp_domain_guest_users());
-#endif
if(!next_token(&p, name, NULL, sizeof(fstring)))
fstrcpy(name, "Guest");
} else {
diff --git a/source/passdb/secrets.c b/source/passdb/secrets.c
index be528abae73..4d42469e3d5 100644
--- a/source/passdb/secrets.c
+++ b/source/passdb/secrets.c
@@ -41,7 +41,7 @@ BOOL secrets_init(void)
*p = 0;
pstrcat(fname,"/secrets.tdb");
- tdb = tdb_open_log(fname, 0, 0, O_RDWR|O_CREAT, 0600);
+ tdb = tdb_open(fname, 0, 0, O_RDWR|O_CREAT, 0600);
if (!tdb) {
DEBUG(0,("Failed to open %s\n", fname));
@@ -183,32 +183,3 @@ BOOL trust_password_delete(char *domain)
{
return secrets_delete(trust_keystr(domain));
}
-
-/*******************************************************************
- Reset the 'done' variables so after a client process is created
- from a fork call these calls will be re-done. This should be
- expanded if more variables need reseting.
- ******************************************************************/
-
-void reset_globals_after_fork(void)
-{
- unsigned char dummy;
-
- /*
- * Increment the global seed value to ensure every smbd starts
- * with a new random seed.
- */
-
- if (tdb) {
- uint32 initial_val = sys_getpid();
- tdb_change_int_atomic(tdb, "INFO/random_seed", (int *)&initial_val, 1);
- set_rand_reseed_data((unsigned char *)&initial_val, sizeof(initial_val));
- }
-
- /*
- * Re-seed the random crypto generator, so all smbd's
- * started from the same parent won't generate the same
- * sequence.
- */
- generate_random_buffer( &dummy, 1, True);
-}
diff --git a/source/passdb/smbpass.c b/source/passdb/smbpass.c
index 8635b6113ff..34f083a0c2d 100644
--- a/source/passdb/smbpass.c
+++ b/source/passdb/smbpass.c
@@ -471,7 +471,10 @@ static struct sam_passwd* build_sampw_from_smbpw (struct smb_passwd *pw_buf)
user.user_rid = pdb_uid_to_user_rid (user.smb_userid);
user.group_rid = pdb_gid_to_group_rid(user.smb_grpid );
- pstrcpy(full_name, pwfile->pw_gecos);
+ if (lp_unix_realname())
+ pstrcpy(full_name, pwfile->pw_gecos);
+ else
+ pstrcpy(full_name , "<Full Name>");
pstrcpy(logon_script , lp_logon_script ());
pstrcpy(profile_path , lp_logon_path ());
pstrcpy(home_drive , lp_logon_drive ());
@@ -1359,7 +1362,7 @@ struct sam_passwd *smbiterate_getsam21pwuid(uid_t uid)
if (smbpw != NULL)
{
pwd = build_sampw_from_smbpw (smbpw);
- DEBUG(10, ("found by user_uid: %u\n", (unsigned int)uid));
+ DEBUG(10, ("found by user_uid: %d\n", uid));
}
return pwd;
diff --git a/source/passdb/tdbpass.c b/source/passdb/tdbpass.c
index 0d9a0f7780b..157a7ee59e7 100644
--- a/source/passdb/tdbpass.c
+++ b/source/passdb/tdbpass.c
@@ -89,10 +89,10 @@ static struct tdb_enum_info tdb_ent;
static void *startsamtdbpwent(BOOL update)
{
/* Open tdb passwd */
- if (!(tdb_ent.passwd_tdb = tdb_open_log(lp_tdb_passwd_file(), 0, 0, update ? O_RDWR : O_RDONLY, 0600)))
+ if (!(tdb_ent.passwd_tdb = tdb_open(lp_tdb_passwd_file(), 0, 0, update ? O_RDWR : O_RDONLY, 0600)))
{
DEBUG(0, ("Unable to open TDB passwd, trying create new!\n"));
- if (!(tdb_ent.passwd_tdb = tdb_open_log(lp_tdb_passwd_file(), 0, 0, O_RDWR | O_CREAT | O_EXCL, 0600)))
+ if (!(tdb_ent.passwd_tdb = tdb_open(lp_tdb_passwd_file(), 0, 0, O_RDWR | O_CREAT | O_EXCL, 0600)))
{
DEBUG(0, ("Unable to creat TDB passwd (smbpasswd.tdb) !!!"));
return NULL;
@@ -177,7 +177,7 @@ static BOOL del_samtdbpwd_entry(const char *name)
TDB_DATA key;
fstring keystr;
- if (!(pwd_tdb = tdb_open_log(lp_tdb_passwd_file(), 0, 0, O_RDWR, 0600)))
+ if (!(pwd_tdb = tdb_open(lp_tdb_passwd_file(), 0, 0, O_RDWR, 0600)))
{
DEBUG(0, ("Unable to open TDB passwd!"));
return False;
@@ -217,7 +217,7 @@ static BOOL mod_samtdb21pwd_entry(struct sam_passwd* newpwd, BOOL override)
int unknown_str_len = (newpwd->unknown_str) ? (strlen (newpwd->unknown_str) + 1) : 0;
int munged_dial_len = (newpwd->munged_dial) ? (strlen (newpwd->munged_dial) + 1) : 0;
- if (!(pwd_tdb = tdb_open_log(lp_tdb_passwd_file(), 0, 0, O_RDWR, 0600)))
+ if (!(pwd_tdb = tdb_open(lp_tdb_passwd_file(), 0, 0, O_RDWR, 0600)))
{
DEBUG(0, ("Unable to open TDB passwd!"));
return False;
@@ -328,7 +328,7 @@ static BOOL add_samtdb21pwd_entry(struct sam_passwd *newpwd)
int unknown_str_len = (newpwd->unknown_str) ? (strlen (newpwd->unknown_str) + 1) : 1;
int munged_dial_len = (newpwd->munged_dial) ? (strlen (newpwd->munged_dial) + 1) : 1;
- if (!(pwd_tdb = tdb_open_log(lp_tdb_passwd_file(), 0, 0, O_RDWR, 0600)))
+ if (!(pwd_tdb = tdb_open(lp_tdb_passwd_file(), 0, 0, O_RDWR, 0600)))
{
DEBUG(0, ("Unable to open TDB passwd!"));
return False;
@@ -456,7 +456,7 @@ static struct sam_passwd *getsamtdb21pwnam(char *name)
TDB_DATA key;
fstring keystr;
- if (!(pwd_tdb = tdb_open_log(lp_tdb_passwd_file(), 0, 0, O_RDONLY, 0600)))
+ if (!(pwd_tdb = tdb_open(lp_tdb_passwd_file(), 0, 0, O_RDONLY, 0600)))
{
DEBUG(0, ("Unable to open TDB passwd!"));
return False;
diff --git a/source/printing/nt_printing.c b/source/printing/nt_printing.c
index 45080f8acc2..0aa3b96cddb 100644
--- a/source/printing/nt_printing.c
+++ b/source/printing/nt_printing.c
@@ -180,7 +180,7 @@ BOOL nt_printing_init(void)
char *vstring = "INFO/version";
if (tdb && local_pid == sys_getpid()) return True;
- tdb = tdb_open_log(lock_path("ntdrivers.tdb"), 0, 0, O_RDWR|O_CREAT, 0600);
+ tdb = tdb_open(lock_path("ntdrivers.tdb"), 0, 0, O_RDWR|O_CREAT, 0600);
if (!tdb) {
DEBUG(0,("Failed to open nt drivers database %s (%s)\n",
lock_path("ntdrivers.tdb"), strerror(errno) ));
@@ -644,7 +644,7 @@ static uint32 get_correct_cversion(fstring architecture, fstring driverpath_in,
DEBUG(10,("get_correct_cversion: Driver file [%s] cversion = %d\n",
driverpath, cversion));
- close_file(fsp, True);
+ fsp->conn->vfs_ops.close(fsp, fsp->fd);
file_free(fsp);
close_cnum(conn, user->vuid);
pop_sec_ctx();
@@ -654,7 +654,7 @@ static uint32 get_correct_cversion(fstring architecture, fstring driverpath_in,
error_exit:
if(fsp) {
if(fsp->fd != -1)
- close_file(fsp, True);
+ fsp->conn->vfs_ops.close(fsp, fsp->fd);
file_free(fsp);
}
@@ -1138,7 +1138,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file,
DEBUGADD(6,("file_version_is_newer: mod time = %ld sec\n", old_create_time));
}
}
- close_file(fsp, True);
+ fsp->conn->vfs_ops.close(fsp, fsp->fd);
file_free(fsp);
@@ -1169,7 +1169,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file,
DEBUGADD(6,("file_version_is_newer: mod time = %ld sec\n", new_create_time));
}
}
- close_file(fsp, True);
+ fsp->conn->vfs_ops.close(fsp, fsp->fd);
file_free(fsp);
if (use_version) {
@@ -1201,7 +1201,7 @@ static int file_version_is_newer(connection_struct *conn, fstring new_file,
if(fsp) {
file_free(fsp);
if(fsp->fd != -1)
- close_file(fsp, True);
+ fsp->conn->vfs_ops.close(fsp, fsp->fd);
}
return -1;
}
@@ -2372,18 +2372,8 @@ static uint32 get_a_printer_2_default(NT_PRINTER_INFO_LEVEL_2 **info_ptr, fstrin
fstrcpy(info.portname, SAMBA_PRINTER_PORT_NAME);
fstrcpy(info.drivername, lp_printerdriver(snum));
-#if 0 /* JERRY */
if (!*info.drivername)
fstrcpy(info.drivername, "NO DRIVER AVAILABLE FOR THIS PRINTER");
-#else
- /* by setting the driver name to an empty string, a local NT admin
- can now run the **local** APW to install a local printer driver
- for a Samba shared printer in 2.2. Without this, drivers **must** be
- installed on the Samba server for NT clients --jerry */
- if (!*info.drivername)
- fstrcpy(info.drivername, "");
-#endif
-
DEBUG(10,("get_a_printer_2_default: driver name set to [%s]\n", info.drivername));
@@ -2844,113 +2834,6 @@ uint32 free_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 level)
return result;
}
-
-/****************************************************************************
- Determine whether or not a particular driver is currently assigned
- to a printer
-****************************************************************************/
-BOOL printer_driver_in_use (char *arch, char *driver)
-{
- TDB_DATA kbuf, newkey, dbuf;
- NT_PRINTER_INFO_LEVEL_2 info;
- int ret;
-
- if (!tdb)
- nt_printing_init();
-
- DEBUG(5,("printer_driver_in_use: Beginning search through printers.tdb...\n"));
-
- /* loop through the printers.tdb and check for the drivername */
- for (kbuf = tdb_firstkey(tdb); kbuf.dptr;
- newkey = tdb_nextkey(tdb, kbuf), safe_free(kbuf.dptr), kbuf=newkey)
- {
-
- dbuf = tdb_fetch(tdb, kbuf);
- if (!dbuf.dptr)
- continue;
-
- if (strncmp(kbuf.dptr, PRINTERS_PREFIX, strlen(PRINTERS_PREFIX)) != 0)
- continue;
-
- ret = tdb_unpack(dbuf.dptr, dbuf.dsize, "dddddddddddfffffPfffff",
- &info.attributes,
- &info.priority,
- &info.default_priority,
- &info.starttime,
- &info.untiltime,
- &info.status,
- &info.cjobs,
- &info.averageppm,
- &info.changeid,
- &info.c_setprinter,
- &info.setuptime,
- info.servername,
- info.printername,
- info.sharename,
- info.portname,
- info.drivername,
- info.comment,
- info.location,
- info.sepfile,
- info.printprocessor,
- info.datatype,
- info.parameters);
-
- safe_free(dbuf.dptr);
-
- if (ret == -1) {
- DEBUG (0,("printer_driver_in_use: tdb_unpack failed for printer %s\n",
- info.printername));
- continue;
- }
-
- DEBUG (10,("printer_driver_in_use: Printer - %s (%s)\n",
- info.printername, info.drivername));
-
- if (strcmp(info.drivername, driver) == 0)
- {
- DEBUG(5,("printer_driver_in_use: Printer %s using %s\n",
- info.printername, driver));
- return True;
- }
- }
- DEBUG(5,("printer_driver_in_use: Completed search through printers.tdb...\n"));
-
-
-
- /* report that the driver is in use by default */
- return False;
-}
-
-/****************************************************************************
- Remove a printer driver from the TDB. This assumes that the the driver was
- previously looked up.
- ***************************************************************************/
-uint32 delete_printer_driver (NT_PRINTER_DRIVER_INFO_LEVEL_3 *i)
-{
- pstring key;
- fstring arch;
- TDB_DATA kbuf;
-
-
- get_short_archi(arch, i->environment);
- slprintf(key, sizeof(key)-1, "%s%s/%d/%s", DRIVERS_PREFIX,
- arch, i->cversion, i->name);
- DEBUG(5,("delete_printer_driver: key = [%s]\n", key));
-
- kbuf.dptr=key;
- kbuf.dsize=strlen(key)+1;
-
- if (tdb_delete(tdb, kbuf) == -1) {
- DEBUG (0,("delete_printer_driver: fail to delete %s!\n", key));
- return NT_STATUS_ACCESS_VIOLATION;
- }
-
- DEBUG(5,("delete_printer_driver: [%s] driver delete successful.\n",
- i->name));
-
- return NT_STATUS_NO_PROBLEMO;
-}
/****************************************************************************
****************************************************************************/
BOOL get_specific_param_by_index(NT_PRINTER_INFO_LEVEL printer, uint32 level, uint32 param_index,
@@ -3146,19 +3029,16 @@ static SEC_DESC_BUF *construct_default_printer_sdb(TALLOC_CTX *ctx)
if (winbind_lookup_name(lp_workgroup(), &owner_sid, &name_type)) {
sid_append_rid(&owner_sid, DOMAIN_USER_RID_ADMIN);
} else {
- uint32 owner_rid;
-
- /* Backup plan - make printer owned by admins or root.
- This should emulate a lanman printer as security
- settings can't be changed. */
- sid_peek_rid(&owner_sid, &owner_rid);
+ /* Backup plan - make printer owned by admins or root. This should
+ emulate a lanman printer as security settings can't be
+ changed. */
- if (owner_rid != BUILTIN_ALIAS_RID_PRINT_OPS &&
- owner_rid != BUILTIN_ALIAS_RID_ADMINS &&
- owner_rid != DOMAIN_USER_RID_ADMIN &&
- !lookup_name("root", &owner_sid, &name_type)) {
- sid_copy(&owner_sid, &global_sid_World);
+ if (!lookup_name( "Printer Administrators", &owner_sid, &name_type) &&
+ !lookup_name( "Administrators", &owner_sid, &name_type) &&
+ !lookup_name( "Administrator", &owner_sid, &name_type) &&
+ !lookup_name("root", &owner_sid, &name_type)) {
+ sid_copy(&owner_sid, &global_sid_World);
}
}
@@ -3265,20 +3145,20 @@ BOOL nt_printing_getsec(TALLOC_CTX *ctx, char *printername, SEC_DESC_BUF **secde
}
if (DEBUGLEVEL >= 10) {
- SEC_ACL *the_acl = (*secdesc_ctr)->sec->dacl;
+ SEC_ACL *acl = (*secdesc_ctr)->sec->dacl;
int i;
DEBUG(10, ("secdesc_ctr for %s has %d aces:\n",
- printername, the_acl->num_aces));
+ printername, acl->num_aces));
- for (i = 0; i < the_acl->num_aces; i++) {
+ for (i = 0; i < acl->num_aces; i++) {
fstring sid_str;
- sid_to_string(sid_str, &the_acl->ace[i].sid);
+ sid_to_string(sid_str, &acl->ace[i].sid);
DEBUG(10, ("%s %d %d 0x%08x\n", sid_str,
- the_acl->ace[i].type, the_acl->ace[i].flags,
- the_acl->ace[i].info.mask));
+ acl->ace[i].type, acl->ace[i].flags,
+ acl->ace[i].info.mask));
}
}
diff --git a/source/printing/printfsp.c b/source/printing/printfsp.c
index 6545dc59c22..6a8e4bea450 100644
--- a/source/printing/printfsp.c
+++ b/source/printing/printfsp.c
@@ -29,7 +29,7 @@ open a print file and setup a fsp for it. This is a wrapper around
print_job_start().
***************************************************************************/
-files_struct *print_fsp_open(connection_struct *conn)
+files_struct *print_fsp_open(connection_struct *conn,char *jobname)
{
int jobid;
SMB_STRUCT_STAT sbuf;
@@ -39,7 +39,7 @@ files_struct *print_fsp_open(connection_struct *conn)
if(!fsp)
return NULL;
- jobid = print_job_start(&current_user, SNUM(conn), "smb.prn");
+ jobid = print_job_start(&current_user, SNUM(conn), jobname);
if (jobid == -1) {
file_free(fsp);
return NULL;
diff --git a/source/printing/printing.c b/source/printing/printing.c
index aab4c2f43f3..f1c5bff275d 100644
--- a/source/printing/printing.c
+++ b/source/printing/printing.c
@@ -55,7 +55,7 @@ BOOL print_backend_init(void)
char *sversion = "INFO/version";
if (tdb && local_pid == sys_getpid()) return True;
- tdb = tdb_open_log(lock_path("printing.tdb"), 0, 0, O_RDWR|O_CREAT, 0600);
+ tdb = tdb_open(lock_path("printing.tdb"), 0, 0, O_RDWR|O_CREAT, 0600);
if (!tdb) {
DEBUG(0,("print_backend_init: Failed to open printing backend database. Error = [%s]\n",
tdb_errorstr(tdb)));
@@ -845,7 +845,6 @@ int print_job_start(struct current_user *user, int snum, char *jobname)
SMB_BIG_UINT dspace, dsize;
if (sys_fsusage(path, &dspace, &dsize) == 0 &&
dspace < 2*(SMB_BIG_UINT)lp_minprintspace(snum)) {
- DEBUG(3, ("print_job_start: disk space check failed.\n"));
errno = ENOSPC;
return -1;
}
@@ -853,23 +852,18 @@ int print_job_start(struct current_user *user, int snum, char *jobname)
/* for autoloaded printers, check that the printcap entry still exists */
if (lp_autoloaded(snum) && !pcap_printername_ok(lp_servicename(snum), NULL)) {
- DEBUG(3, ("print_job_start: printer name %s check failed.\n", lp_servicename(snum) ));
errno = ENOENT;
return -1;
}
/* Insure the maximum queue size is not violated */
if (lp_maxprintjobs(snum) && print_queue_length(snum) > lp_maxprintjobs(snum)) {
- DEBUG(3, ("print_job_start: number of jobs (%d) larger than max printjobs per queue (%d).\n",
- print_queue_length(snum), lp_maxprintjobs(snum) ));
errno = ENOSPC;
return -1;
}
/* Insure the maximum print jobs in the system is not violated */
if (lp_totalprintjobs() && get_total_jobs(snum) > lp_totalprintjobs()) {
- DEBUG(3, ("print_job_start: number of jobs (%d) larger than max printjobs per system (%d).\n",
- print_queue_length(snum), lp_totalprintjobs() ));
errno = ENOSPC;
return -1;
}
@@ -898,27 +892,32 @@ int print_job_start(struct current_user *user, int snum, char *jobname)
/* lock the database */
tdb_lock_bystring(tdb, "INFO/nextjob");
+ next_jobnum:
next_jobid = tdb_fetch_int(tdb, "INFO/nextjob");
- if (next_jobid == -1)
- next_jobid = 1;
+ if (next_jobid == -1) next_jobid = 1;
for (jobid = NEXT_JOBID(next_jobid); jobid != next_jobid; jobid = NEXT_JOBID(jobid)) {
- if (!print_job_exists(jobid))
- break;
+ if (!print_job_exists(jobid)) break;
}
if (jobid == next_jobid || !print_job_store(jobid, &pjob)) {
- DEBUG(3, ("print_job_start: either jobid (%d)==next_jobid(%d) or print_job_store failed.\n",
- jobid, next_jobid ));
jobid = -1;
goto fail;
}
tdb_store_int(tdb, "INFO/nextjob", jobid);
- /* we have a job entry - now create the spool file */
- slprintf(pjob.filename, sizeof(pjob.filename)-1, "%s/%sXXXXXX",
- path, PRINT_SPOOL_PREFIX);
- pjob.fd = smb_mkstemp(pjob.filename);
+ /* we have a job entry - now create the spool file
+
+ we unlink first to cope with old spool files and also to beat
+ a symlink security hole - it allows us to use O_EXCL
+ There may be old spool files owned by other users lying around.
+ */
+ slprintf(pjob.filename, sizeof(pjob.filename)-1, "%s/%s%d",
+ path, PRINT_SPOOL_PREFIX, jobid);
+ if (unlink(pjob.filename) == -1 && errno != ENOENT) {
+ goto next_jobnum;
+ }
+ pjob.fd = sys_open(pjob.filename,O_WRONLY|O_CREAT|O_EXCL,0600);
if (pjob.fd == -1) {
if (errno == EACCES) {
@@ -956,8 +955,6 @@ to open spool file %s.\n", pjob.filename));
}
tdb_unlock_bystring(tdb, "INFO/nextjob");
-
- DEBUG(3, ("print_job_start: returning fail. Error = %s\n", strerror(errno) ));
return -1;
}
@@ -993,7 +990,6 @@ BOOL print_job_end(int jobid, BOOL normal_close)
*/
close(pjob->fd);
pjob->fd = -1;
- DEBUG(3,("print_job_end: failed to stat file for jobid %d\n", jobid ));
goto fail;
}
@@ -1011,8 +1007,7 @@ BOOL print_job_end(int jobid, BOOL normal_close)
ret = (*(current_printif->job_submit))(snum, pjob);
- if (ret)
- goto fail;
+ if (ret) goto fail;
/* The print job has been sucessfully handed over to the back-end */
@@ -1021,13 +1016,11 @@ BOOL print_job_end(int jobid, BOOL normal_close)
print_job_store(jobid, pjob);
/* make sure the database is up to date */
- if (print_cache_expired(snum))
- print_queue_update(snum);
+ if (print_cache_expired(snum)) print_queue_update(snum);
return True;
fail:
-
/* The print job was not succesfully started. Cleanup */
/* Still need to add proper error return propagation! 010122:JRR */
unlink(pjob->filename);
diff --git a/source/profile/profile.c b/source/profile/profile.c
index 20ad8531d88..dce1d78a9b6 100644
--- a/source/profile/profile.c
+++ b/source/profile/profile.c
@@ -22,6 +22,8 @@
#include "includes.h"
+#include <sys/shm.h>
+
extern int DEBUGLEVEL;
#define IPC_PERMS ((SHM_R | SHM_W) | (SHM_R>>3) | (SHM_R>>6))
@@ -83,7 +85,7 @@ void reqprofile_message(int msg_type, pid_t src, void *buf, size_t len)
#else
level = 0;
#endif
- DEBUG(1,("INFO: Received REQ_PROFILELEVEL message from PID %u\n",(unsigned int)src));
+ DEBUG(1,("INFO: Received REQ_PROFILELEVEL message from PID %d\n",src));
message_send_pid(src, MSG_PROFILELEVEL, &level, sizeof(int), True);
}
diff --git a/source/rpc_client/cli_netlogon.c b/source/rpc_client/cli_netlogon.c
index 9c1f7299ea8..cc79425eede 100644
--- a/source/rpc_client/cli_netlogon.c
+++ b/source/rpc_client/cli_netlogon.c
@@ -562,7 +562,7 @@ static BOOL modify_trust_password( char *domain, char *remote_machine,
struct cli_state cli;
ZERO_STRUCT(cli);
- if(!cli_initialise(&cli)) {
+ if(cli_initialise(&cli) == False) {
DEBUG(0,("modify_trust_password: unable to initialize client connection.\n"));
return False;
}
diff --git a/source/rpc_client/cli_pipe.c b/source/rpc_client/cli_pipe.c
index 4bbbac17ed3..1ef8a78ea14 100644
--- a/source/rpc_client/cli_pipe.c
+++ b/source/rpc_client/cli_pipe.c
@@ -1,3 +1,4 @@
+
/*
* Unix SMB/Netbios implementation.
* Version 1.9.
@@ -22,6 +23,11 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+
+#ifdef SYSLOG
+#undef SYSLOG
+#endif
+
#include "includes.h"
extern int DEBUGLEVEL;
@@ -49,6 +55,7 @@ static BOOL rpc_read(struct cli_state *cli, prs_struct *rdata, uint32 data_to_re
int stream_offset = 0;
int num_read;
char *pdata;
+ uint32 err;
int extra_data_size = ((int)*rdata_offset) + ((int)data_to_read) - (int)prs_data_size(rdata);
DEBUG(5,("rpc_read: data_to_read: %u rdata offset: %u extra_data_size: %d\n",
@@ -70,9 +77,6 @@ static BOOL rpc_read(struct cli_state *cli, prs_struct *rdata, uint32 data_to_re
do /* read data using SMBreadX */
{
- uint32 ecode;
- uint8 eclass;
-
if (size > (size_t)data_to_read)
size = (size_t)data_to_read;
@@ -81,10 +85,8 @@ static BOOL rpc_read(struct cli_state *cli, prs_struct *rdata, uint32 data_to_re
DEBUG(5,("rpc_read: num_read = %d, read offset: %d, to read: %d\n",
num_read, stream_offset, data_to_read));
- if (cli_error(cli, &eclass, &ecode, NULL) &&
- (eclass != ERRDOS && ecode != ERRmoredata)) {
- DEBUG(0,("rpc_read: Error %d/%u in cli_read\n",
- eclass, (unsigned int)ecode));
+ if (cli_error(cli, NULL, &err, NULL)) {
+ DEBUG(0,("rpc_read: Error %u in cli_read\n", (unsigned int)err ));
return False;
}
@@ -326,6 +328,7 @@ static BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, prs_struct *data, pr
char *rparam = NULL;
uint32 rparam_len = 0;
uint16 setup[2];
+ uint32 err;
BOOL first = True;
BOOL last = True;
RPC_HDR rhdr;
@@ -335,20 +338,16 @@ static BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, prs_struct *data, pr
uint32 rdata_len = 0;
uint32 current_offset = 0;
- /* Create setup parameters - must be in native byte order. */
-
+ /*
+ * Create setup parameters - must be in native byte order.
+ */
setup[0] = cmd;
setup[1] = cli->nt_pipe_fnum; /* Pipe file handle. */
- DEBUG(5,("rpc_api_pipe: cmd:%x fnum:%x\n", (int)cmd,
- (int)cli->nt_pipe_fnum));
+ DEBUG(5,("rpc_api_pipe: cmd:%x fnum:%x\n", (int)cmd, (int)cli->nt_pipe_fnum));
- /* Send the RPC request and receive a response. For short RPC
- calls (about 1024 bytes or so) the RPC request and response
- appears in a SMBtrans request and response. Larger RPC
- responses are received further on. */
-
- if (!cli_api_pipe(cli, "\\PIPE\\",
+ /* send the data: receive a response. */
+ if (!cli_api_pipe(cli, "\\PIPE\\\0\0\0", 8,
setup, 2, 0, /* Setup, length, max */
NULL, 0, 0, /* Params, length, max */
pdata, data_len, data_len, /* data, length, max */
@@ -359,7 +358,9 @@ static BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, prs_struct *data, pr
return False;
}
- /* Throw away returned params - we know we won't use them. */
+ /*
+ * Throw away returned params - we know we won't use them.
+ */
if(rparam) {
free(rparam);
@@ -373,8 +374,7 @@ static BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, prs_struct *data, pr
}
/*
- * Give this memory as dynamically allocated to the return parse
- * struct.
+ * Give this memory as dynamically allocated to the return parse struct.
*/
prs_give_memory(rdata, prdata, rdata_len, True);
@@ -407,15 +407,13 @@ static BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, prs_struct *data, pr
DEBUG(5,("rpc_api_pipe: len left: %u smbtrans read: %u\n",
(unsigned int)len, (unsigned int)rdata_len ));
- /* check if data to be sent back was too large for one SMBtrans */
- /* err status is only informational: the _real_ check is on the
- length */
-
+ /* check if data to be sent back was too large for one SMB. */
+ /* err status is only informational: the _real_ check is on the length */
if (len > 0) {
/* || err == (0x80000000 | STATUS_BUFFER_OVERFLOW)) */
-
- /* Read the remaining part of the first response fragment */
-
+ /*
+ * Read the rest of the first response PDU.
+ */
if (!rpc_read(cli, rdata, len, &current_offset)) {
prs_mem_free(rdata);
return False;
@@ -448,8 +446,7 @@ static BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, prs_struct *data, pr
}
/*
- * Read more fragments using SMBreadX until we get one with the
- * last bit set.
+ * Read more fragments until we get the last one.
*/
while (!last) {
@@ -457,8 +454,6 @@ static BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, prs_struct *data, pr
int num_read;
char hdr_data[RPC_HEADER_LEN+RPC_HDR_RESP_LEN];
prs_struct hps;
- uint8 eclass;
- uint32 ecode;
/*
* First read the header of the next PDU.
@@ -468,10 +463,8 @@ static BOOL rpc_api_pipe(struct cli_state *cli, uint16 cmd, prs_struct *data, pr
prs_give_memory(&hps, hdr_data, sizeof(hdr_data), False);
num_read = cli_read(cli, cli->nt_pipe_fnum, hdr_data, 0, RPC_HEADER_LEN+RPC_HDR_RESP_LEN);
- if (cli_error(cli, &eclass, &ecode, NULL) &&
- (eclass != ERRDOS && ecode != ERRmoredata)) {
- DEBUG(0,("rpc_api_pipe: cli_read error : %d/%d\n",
- eclass, ecode));
+ if (cli_error(cli, NULL, &err, NULL)) {
+ DEBUG(0,("rpc_api_pipe: cli_read error : %d\n", err ));
return False;
}
@@ -920,7 +913,7 @@ static BOOL rpc_pipe_set_hnd_state(struct cli_state *cli, char *pipe_name, uint1
setup[1] = cli->nt_pipe_fnum; /* pipe file handle. got this from an SMBOpenX. */
/* send the data on \PIPE\ */
- if (cli_api_pipe(cli, "\\PIPE\\",
+ if (cli_api_pipe(cli, "\\PIPE\\\0\0\0", 8,
setup, 2, 0, /* setup, length, max */
param, 2, 0, /* param, length, max */
NULL, 0, 1024, /* data, length, max */
@@ -978,6 +971,9 @@ static BOOL check_bind_response(RPC_HDR_BA *hdr_ba, char *pipe_name, RPC_IFACE *
int i = 0;
while ((pipe_names[i].client_pipe != NULL) && hdr_ba->addr.len > 0) {
+ DEBUG(6,("bind_rpc_pipe: searching pipe name: client:%s server:%s\n",
+ pipe_names[i].client_pipe , pipe_names[i].server_pipe ));
+
if ((strequal(pipe_name, pipe_names[i].client_pipe ))) {
if (strequal(hdr_ba->addr.str, pipe_names[i].server_pipe )) {
DEBUG(5,("bind_rpc_pipe: server pipe_name found: %s\n",
@@ -1196,8 +1192,6 @@ BOOL cli_nt_session_open(struct cli_state *cli, char *pipe_name)
{
int fnum;
- SMB_ASSERT(cli->nt_pipe_fnum == 0);
-
if (cli->capabilities & CAP_NT_SMBS) {
if ((fnum = cli_nt_create(cli, &(pipe_name[5]), DESIRED_ACCESS_PIPE)) == -1) {
DEBUG(0,("cli_nt_session_open: cli_nt_create failed on pipe %s to machine %s. Error was %s\n",
@@ -1259,5 +1253,4 @@ close the session
void cli_nt_session_close(struct cli_state *cli)
{
cli_close(cli, cli->nt_pipe_fnum);
- cli->nt_pipe_fnum = 0;
}
diff --git a/source/rpc_client/cli_spoolss_notify.c b/source/rpc_client/cli_spoolss_notify.c
index 2f712f6adbc..879a4f129fc 100644
--- a/source/rpc_client/cli_spoolss_notify.c
+++ b/source/rpc_client/cli_spoolss_notify.c
@@ -48,7 +48,7 @@ BOOL spoolss_disconnect_from_client( struct cli_state *cli)
BOOL spoolss_connect_to_client( struct cli_state *cli, char *remote_machine)
{
ZERO_STRUCTP(cli);
- if(!cli_initialise(cli)) {
+ if(cli_initialise(cli) == False) {
DEBUG(0,("connect_to_client: unable to initialize client connection.\n"));
return False;
}
diff --git a/source/rpc_client/cli_trust.c b/source/rpc_client/cli_trust.c
deleted file mode 100644
index 440cc5143a2..00000000000
--- a/source/rpc_client/cli_trust.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Unix SMB/Netbios implementation.
- * Version 1.9.
- * RPC Pipe client / server routines
- * Copyright (C) Andrew Tridgell 1992-1997,
- * Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
- * Copyright (C) Paul Ashton 1997.
- * Copyright (C) Jeremy Allison 1998.
- *
- * 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 2 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, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "includes.h"
-
-extern pstring global_myname;
-
-/*********************************************************
- Change the domain password on the PDC.
-**********************************************************/
-
-static BOOL modify_trust_password( char *domain, char *remote_machine,
- unsigned char orig_trust_passwd_hash[16],
- unsigned char new_trust_passwd_hash[16])
-{
- struct cli_state cli;
-
- ZERO_STRUCT(cli);
- if(cli_initialise(&cli) == NULL) {
- DEBUG(0,("modify_trust_password: unable to initialize client connection.\n"));
- return False;
- }
-
- if(!resolve_name( remote_machine, &cli.dest_ip, 0x20)) {
- DEBUG(0,("modify_trust_password: Can't resolve address for %s\n", remote_machine));
- cli_shutdown(&cli);
- return False;
- }
-
- if (ismyip(cli.dest_ip)) {
- DEBUG(0,("modify_trust_password: Machine %s is one of our addresses. Cannot add \
-to ourselves.\n", remote_machine));
- cli_shutdown(&cli);
- return False;
- }
-
- if (!cli_connect(&cli, remote_machine, &cli.dest_ip)) {
- DEBUG(0,("modify_trust_password: unable to connect to SMB server on \
-machine %s. Error was : %s.\n", remote_machine, cli_errstr(&cli) ));
- cli_shutdown(&cli);
- return False;
- }
-
- if (!attempt_netbios_session_request(&cli, global_myname, remote_machine, &cli.dest_ip)) {
- DEBUG(0,("modify_trust_password: machine %s rejected the NetBIOS \
-session request. Error was %s\n", remote_machine, cli_errstr(&cli) ));
- cli_shutdown(&cli);
- return False;
- }
-
- cli.protocol = PROTOCOL_NT1;
-
- if (!cli_negprot(&cli)) {
- DEBUG(0,("modify_trust_password: machine %s rejected the negotiate protocol. \
-Error was : %s.\n", remote_machine, cli_errstr(&cli) ));
- cli_shutdown(&cli);
- return False;
- }
-
- if (cli.protocol != PROTOCOL_NT1) {
- DEBUG(0,("modify_trust_password: machine %s didn't negotiate NT protocol.\n",
- remote_machine));
- cli_shutdown(&cli);
- return False;
- }
-
- /*
- * Do an anonymous session setup.
- */
-
- if (!cli_session_setup(&cli, "", "", 0, "", 0, "")) {
- DEBUG(0,("modify_trust_password: machine %s rejected the session setup. \
-Error was : %s.\n", remote_machine, cli_errstr(&cli) ));
- cli_shutdown(&cli);
- return False;
- }
-
- if (!(cli.sec_mode & 1)) {
- DEBUG(0,("modify_trust_password: machine %s isn't in user level security mode\n",
- remote_machine));
- cli_shutdown(&cli);
- return False;
- }
-
- if (!cli_send_tconX(&cli, "IPC$", "IPC", "", 1)) {
- DEBUG(0,("modify_trust_password: machine %s rejected the tconX on the IPC$ share. \
-Error was : %s.\n", remote_machine, cli_errstr(&cli) ));
- cli_shutdown(&cli);
- return False;
- }
-
- /*
- * Ok - we have an anonymous connection to the IPC$ share.
- * Now start the NT Domain stuff :-).
- */
-
- if(cli_lsa_get_domain_sid(&cli, remote_machine) == False) {
- DEBUG(0,("modify_trust_password: unable to obtain domain sid from %s. Error was : %s.\n", remote_machine, cli_errstr(&cli)));
- cli_ulogoff(&cli);
- cli_shutdown(&cli);
- return False;
- }
-
- if(cli_nt_session_open(&cli, PIPE_NETLOGON) == False) {
- DEBUG(0,("modify_trust_password: unable to open the domain client session to \
-machine %s. Error was : %s.\n", remote_machine, cli_errstr(&cli)));
- cli_nt_session_close(&cli);
- cli_ulogoff(&cli);
- cli_shutdown(&cli);
- return False;
- }
-
- if(cli_nt_setup_creds(&cli, orig_trust_passwd_hash) == False) {
- DEBUG(0,("modify_trust_password: unable to setup the PDC credentials to machine \
-%s. Error was : %s.\n", remote_machine, cli_errstr(&cli)));
- cli_nt_session_close(&cli);
- cli_ulogoff(&cli);
- cli_shutdown(&cli);
- return False;
- }
-
- if( cli_nt_srv_pwset( &cli,new_trust_passwd_hash ) == False) {
- DEBUG(0,("modify_trust_password: unable to change password for machine %s in domain \
-%s to Domain controller %s. Error was %s.\n", global_myname, domain, remote_machine,
- cli_errstr(&cli)));
- cli_close(&cli, cli.nt_pipe_fnum);
- cli_ulogoff(&cli);
- cli_shutdown(&cli);
- return False;
- }
-
- cli_nt_session_close(&cli);
- cli_ulogoff(&cli);
- cli_shutdown(&cli);
-
- return True;
-}
-
-/************************************************************************
- Change the trust account password for a domain.
- The user of this function must have locked the trust password file for
- update.
-************************************************************************/
-
-BOOL change_trust_account_password( char *domain, char *remote_machine_list)
-{
- fstring remote_machine;
- unsigned char old_trust_passwd_hash[16];
- unsigned char new_trust_passwd_hash[16];
- time_t lct;
- BOOL res = False;
-
- if(!secrets_fetch_trust_account_password(domain, old_trust_passwd_hash, &lct)) {
- DEBUG(0,("change_trust_account_password: unable to read the machine \
-account password for domain %s.\n", domain));
- return False;
- }
-
- /*
- * Create the new (random) password.
- */
- generate_random_buffer( new_trust_passwd_hash, 16, True);
-
- while(remote_machine_list &&
- next_token(&remote_machine_list, remote_machine,
- LIST_SEP, sizeof(remote_machine))) {
- strupper(remote_machine);
- if(strequal(remote_machine, "*")) {
-
- /*
- * We have been asked to dynamcially determine the IP addresses of the PDC.
- */
-
- struct in_addr *ip_list = NULL;
- int count = 0;
- int i;
-
- /* Use the PDC *only* for this. */
- if(!get_dc_list(True, domain, &ip_list, &count))
- continue;
-
- /*
- * Try and connect to the PDC/BDC list in turn as an IP
- * address used as a string.
- */
-
- for(i = 0; i < count; i++) {
- fstring dc_name;
- if(!lookup_pdc_name(global_myname, domain, &ip_list[i], dc_name))
- continue;
- if((res = modify_trust_password( domain, dc_name,
- old_trust_passwd_hash, new_trust_passwd_hash)))
- break;
- }
-
- if(ip_list != NULL)
- free((char *)ip_list);
-
- } else {
- res = modify_trust_password( domain, remote_machine,
- old_trust_passwd_hash, new_trust_passwd_hash);
- }
-
- if(res) {
- DEBUG(0,("%s : change_trust_account_password: Changed password for \
-domain %s.\n", timestring(False), domain));
- /*
- * Return the result of trying to write the new password
- * back into the trust account file.
- */
- res = secrets_store_trust_account_password(domain, new_trust_passwd_hash);
- memset(new_trust_passwd_hash, 0, 16);
- memset(old_trust_passwd_hash, 0, 16);
- return res;
- }
- }
-
- memset(new_trust_passwd_hash, 0, 16);
- memset(old_trust_passwd_hash, 0, 16);
-
- DEBUG(0,("%s : change_trust_account_password: Failed to change password for \
-domain %s.\n", timestring(False), domain));
- return False;
-}
diff --git a/source/rpc_parse/parse_lsa.c b/source/rpc_parse/parse_lsa.c
index 5abcfb9eef8..98ef3fd0ee3 100644
--- a/source/rpc_parse/parse_lsa.c
+++ b/source/rpc_parse/parse_lsa.c
@@ -625,6 +625,20 @@ BOOL lsa_io_r_enum_trust_dom(char *desc, LSA_R_ENUM_TRUST_DOM *r_e,
return True;
}
+void lsa_free_r_enum_trust_dom(LSA_R_ENUM_TRUST_DOM * r_e)
+{
+ safe_free(r_e->uni_domain_name);
+ safe_free(r_e->hdr_domain_name);
+ safe_free(r_e->domain_sid);
+
+ r_e->uni_domain_name = NULL;
+ r_e->hdr_domain_name = NULL;
+ r_e->domain_sid = NULL;
+
+ r_e->num_domains = 0;
+ r_e->ptr_enum_domains = 0;
+}
+
/*******************************************************************
reads or writes a dom query structure.
********************************************************************/
@@ -744,7 +758,7 @@ static BOOL lsa_io_dom_query_6(char *desc, DOM_QUERY_6 *d_q, prs_struct *ps, int
}
/*******************************************************************
- Reads or writes an LSA_R_QUERY_INFO structure.
+ Reads or writes an LSA_Q_QUERY_INFO structure.
********************************************************************/
BOOL lsa_io_r_query(char *desc, LSA_R_QUERY_INFO *r_q, prs_struct *ps,
@@ -1281,73 +1295,3 @@ BOOL lsa_io_r_open_secret(char *desc, LSA_R_OPEN_SECRET *r_c, prs_struct *ps, in
return True;
}
-
-/*******************************************************************
- Reads or writes an LSA_Q_UNK_GET_CONNUSER structure.
-********************************************************************/
-
-BOOL lsa_io_q_unk_get_connuser(char *desc, LSA_Q_UNK_GET_CONNUSER *q_c, prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "lsa_io_q_unk_get_connuser");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_srvname", ps, depth, &q_c->ptr_srvname))
- return False;
-
- if(!smb_io_unistr2("uni2_srvname", &q_c->uni2_srvname, q_c->ptr_srvname, ps, depth)) /* server name to be looked up */
- return False;
-
- if(!prs_uint32("unk1", ps, depth, &q_c->unk1))
- return False;
- if(!prs_uint32("unk2", ps, depth, &q_c->unk2))
- return False;
- if(!prs_uint32("unk3", ps, depth, &q_c->unk3))
- return False;
-
- /* Don't bother to read or write at present... */
- return True;
-}
-
-/*******************************************************************
- Reads or writes an LSA_R_UNK_GET_CONNUSER structure.
-********************************************************************/
-
-BOOL lsa_io_r_unk_get_connuser(char *desc, LSA_R_UNK_GET_CONNUSER *r_c, prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "lsa_io_r_unk_get_connuser");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_user_name", ps, depth, &r_c->ptr_user_name))
- return False;
- if(!smb_io_unihdr("hdr_user_name", &r_c->hdr_user_name, ps, depth))
- return False;
- if(!smb_io_unistr2("uni2_user_name", &r_c->uni2_user_name, r_c->ptr_user_name, ps, depth))
- return False;
-
- if (!prs_align(ps))
- return False;
-
- if(!prs_uint32("unk1", ps, depth, &r_c->unk1))
- return False;
-
- if(!prs_uint32("ptr_dom_name", ps, depth, &r_c->ptr_dom_name))
- return False;
- if(!smb_io_unihdr("hdr_dom_name", &r_c->hdr_dom_name, ps, depth))
- return False;
- if(!smb_io_unistr2("uni2_dom_name", &r_c->uni2_dom_name, r_c->ptr_dom_name, ps, depth))
- return False;
-
- if (!prs_align(ps))
- return False;
-
- if(!prs_uint32("status", ps, depth, &r_c->status))
- return False;
-
- return True;
-}
diff --git a/source/rpc_parse/parse_misc.c b/source/rpc_parse/parse_misc.c
index 4b118dd2b45..81602a1dc40 100644
--- a/source/rpc_parse/parse_misc.c
+++ b/source/rpc_parse/parse_misc.c
@@ -1457,37 +1457,6 @@ BOOL smb_io_pol_hnd(char *desc, POLICY_HND *pol, prs_struct *ps, int depth)
}
/*******************************************************************
- Create a UNISTR3.
-********************************************************************/
-
-void init_unistr3(UNISTR3 *str, const char *buf)
-{
- size_t len;
-
- if (buf == NULL) {
- str->uni_str_len=0;
- str->str.buffer = NULL;
- return;
- }
-
- len = strlen(buf) + 1;
-
- str->uni_str_len=len;
-
- if (len < MAX_UNISTRLEN)
- len = MAX_UNISTRLEN;
-
- len *= sizeof(uint16);
-
- str->str.buffer = (uint16 *)talloc_zero(get_talloc_ctx(), len);
- if (str->str.buffer == NULL)
- smb_panic("init_unistr3: malloc fail\n");
-
- /* store the string (null-terminated copy) */
- dos_struni2((char *)str->str.buffer, buf, len);
-}
-
-/*******************************************************************
Reads or writes a UNISTR3 structure.
********************************************************************/
diff --git a/source/rpc_parse/parse_net.c b/source/rpc_parse/parse_net.c
index 587407b3dd3..1fab8ce2971 100644
--- a/source/rpc_parse/parse_net.c
+++ b/source/rpc_parse/parse_net.c
@@ -217,31 +217,14 @@ BOOL net_io_q_logon_ctrl2(char *desc, NET_Q_LOGON_CTRL2 *q_l, prs_struct *ps, in
}
/*******************************************************************
- Inits an NET_Q_LOGON_CTRL2 structure.
-********************************************************************/
-
-void init_net_q_logon_ctrl2(NET_Q_LOGON_CTRL2 *q_l, char *srv_name,
- uint32 query_level)
-{
- DEBUG(5,("init_q_logon_ctrl2\n"));
-
- q_l->function_code = 0x01;
- q_l->query_level = query_level;
- q_l->switch_value = 0x01;
-
- init_unistr2(&q_l->uni_server_name, srv_name, strlen(srv_name) + 1);
-}
-
-/*******************************************************************
Inits an NET_R_LOGON_CTRL2 structure.
********************************************************************/
-void init_net_r_logon_ctrl2(NET_R_LOGON_CTRL2 *r_l, uint32 query_level,
- uint32 flags, uint32 pdc_status,
- uint32 logon_attempts, uint32 tc_status,
- char *trusted_domain_name)
+void init_r_logon_ctrl2(NET_R_LOGON_CTRL2 *r_l, uint32 query_level,
+ uint32 flags, uint32 pdc_status, uint32 logon_attempts,
+ uint32 tc_status, char *trusted_domain_name)
{
- DEBUG(5,("init_r_logon_ctrl2\n"));
+ DEBUG(5,("make_r_logon_ctrl2\n"));
r_l->switch_value = query_level; /* should only be 0x1 */
@@ -318,113 +301,6 @@ BOOL net_io_r_logon_ctrl2(char *desc, NET_R_LOGON_CTRL2 *r_l, prs_struct *ps, in
}
/*******************************************************************
- Reads or writes an NET_Q_LOGON_CTRL structure.
-********************************************************************/
-
-BOOL net_io_q_logon_ctrl(char *desc, NET_Q_LOGON_CTRL *q_l, prs_struct *ps,
- int depth)
-{
- prs_debug(ps, depth, desc, "net_io_q_logon_ctrl");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr ", ps, depth, &q_l->ptr))
- return False;
-
- if(!smb_io_unistr2 ("", &q_l->uni_server_name, q_l->ptr, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("function_code", ps, depth, &q_l->function_code))
- return False;
- if(!prs_uint32("query_level ", ps, depth, &q_l->query_level))
- return False;
-
- return True;
-}
-
-/*******************************************************************
- Inits an NET_Q_LOGON_CTRL structure.
-********************************************************************/
-
-void init_net_q_logon_ctrl(NET_Q_LOGON_CTRL *q_l, char *srv_name,
- uint32 query_level)
-{
- DEBUG(5,("init_q_logon_ctrl\n"));
-
- q_l->function_code = 0x01; /* ??? */
- q_l->query_level = query_level;
-
- init_unistr2(&q_l->uni_server_name, srv_name, strlen(srv_name) + 1);
-}
-
-/*******************************************************************
- Inits an NET_R_LOGON_CTRL structure.
-********************************************************************/
-
-void init_net_r_logon_ctrl(NET_R_LOGON_CTRL *r_l, uint32 query_level,
- uint32 flags, uint32 pdc_status)
-{
- DEBUG(5,("init_r_logon_ctrl\n"));
-
- r_l->switch_value = query_level; /* should only be 0x1 */
-
- switch (query_level) {
- case 1:
- r_l->ptr = 1; /* undocumented pointer */
- init_netinfo_1(&r_l->logon.info1, flags, pdc_status);
- r_l->status = 0;
- break;
- default:
- DEBUG(2,("init_r_logon_ctrl: unsupported switch value %d\n",
- r_l->switch_value));
- r_l->ptr = 0; /* undocumented pointer */
-
- /* take a guess at an error code... */
- r_l->status = NT_STATUS_INVALID_INFO_CLASS;
- break;
- }
-}
-
-/*******************************************************************
- Reads or writes an NET_R_LOGON_CTRL structure.
-********************************************************************/
-
-BOOL net_io_r_logon_ctrl(char *desc, NET_R_LOGON_CTRL *r_l, prs_struct *ps,
- int depth)
-{
- prs_debug(ps, depth, desc, "net_io_r_logon_ctrl");
- depth++;
-
- if(!prs_uint32("switch_value ", ps, depth, &r_l->switch_value))
- return False;
- if(!prs_uint32("ptr ", ps, depth, &r_l->ptr))
- return False;
-
- if (r_l->ptr != 0) {
- switch (r_l->switch_value) {
- case 1:
- if(!net_io_netinfo_1("", &r_l->logon.info1, ps, depth))
- return False;
- break;
- default:
- DEBUG(2,("net_io_r_logon_ctrl: unsupported switch value %d\n",
- r_l->switch_value));
- break;
- }
- }
-
- if(!prs_uint32("status ", ps, depth, &r_l->status))
- return False;
-
- return True;
-}
-
-/*******************************************************************
Inits an NET_R_TRUST_DOM_LIST structure.
********************************************************************/
@@ -433,7 +309,7 @@ void init_r_trust_dom(NET_R_TRUST_DOM_LIST *r_t,
{
int i = 0;
- DEBUG(5,("init_r_trust_dom\n"));
+ DEBUG(5,("make_r_trust_dom\n"));
for (i = 0; i < MAX_TRUST_DOMS; i++) {
r_t->uni_trust_dom_name[i].uni_str_len = 0;
@@ -534,7 +410,7 @@ void init_q_req_chal(NET_Q_REQ_CHAL *q_c,
char *logon_srv, char *logon_clnt,
DOM_CHAL *clnt_chal)
{
- DEBUG(5,("init_q_req_chal: %d\n", __LINE__));
+ DEBUG(5,("make_q_req_chal: %d\n", __LINE__));
q_c->undoc_buffer = 1; /* don't know what this buffer is */
@@ -543,7 +419,7 @@ void init_q_req_chal(NET_Q_REQ_CHAL *q_c,
memcpy(q_c->clnt_chal.data, clnt_chal->data, sizeof(clnt_chal->data));
- DEBUG(5,("init_q_req_chal: %d\n", __LINE__));
+ DEBUG(5,("make_q_req_chal: %d\n", __LINE__));
}
/*******************************************************************
@@ -610,61 +486,6 @@ BOOL net_io_r_req_chal(char *desc, NET_R_REQ_CHAL *r_c, prs_struct *ps, int dept
/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-BOOL net_io_q_auth(char *desc, NET_Q_AUTH *q_a, prs_struct *ps, int depth)
-{
- int old_align;
- if (q_a == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "net_io_q_auth");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!smb_io_log_info ("", &q_a->clnt_id, ps, depth)) /* client identification info */
- return False;
- /* client challenge is _not_ aligned */
- old_align = ps->align;
- ps->align = 0;
- if(!smb_io_chal("", &q_a->clnt_chal, ps, depth)) {
- /* client-calculated credentials */
- ps->align = old_align;
- return False;
- }
- ps->align = old_align;
-
- return True;
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-BOOL net_io_r_auth(char *desc, NET_R_AUTH *r_a, prs_struct *ps, int depth)
-{
- if (r_a == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "net_io_r_auth");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!smb_io_chal("", &r_a->srv_chal, ps, depth)) /* server challenge */
- return False;
-
- if(!prs_uint32("status", ps, depth, &r_a->status))
- return False;
-
- return True;
-}
-
-/*******************************************************************
Inits a NET_Q_AUTH_2 struct.
********************************************************************/
@@ -748,7 +569,7 @@ BOOL net_io_r_auth_2(char *desc, NET_R_AUTH_2 *r_a, prs_struct *ps, int depth)
void init_q_srv_pwset(NET_Q_SRV_PWSET *q_s, char *logon_srv, char *acct_name,
uint16 sec_chan, char *comp_name, DOM_CRED *cred, char nt_cypher[16])
{
- DEBUG(5,("init_q_srv_pwset\n"));
+ DEBUG(5,("make_q_srv_pwset\n"));
init_clnt_info(&q_s->clnt_id, logon_srv, acct_name, sec_chan, comp_name, cred);
@@ -860,7 +681,7 @@ void init_id_info1(NET_ID_INFO_1 *id, char *domain_name,
unsigned char lm_owf[16];
unsigned char nt_owf[16];
- DEBUG(5,("init_id_info1: %d\n", __LINE__));
+ DEBUG(5,("make_id_info1: %d\n", __LINE__));
id->ptr_id_info1 = 1;
@@ -886,9 +707,9 @@ void init_id_info1(NET_ID_INFO_1 *id, char *domain_name,
memcpy(key, sess_key, 8);
memcpy(lm_owf, lm_cypher, 16);
- SamOEMhash(lm_owf, key, 16);
+ SamOEMhash(lm_owf, key, False);
memcpy(nt_owf, nt_cypher, 16);
- SamOEMhash(nt_owf, key, 16);
+ SamOEMhash(nt_owf, key, False);
#ifdef DEBUG_PASSWORD
DEBUG(100,("encrypt of lm owf password:"));
diff --git a/source/rpc_parse/parse_samr.c b/source/rpc_parse/parse_samr.c
index f6f55de762e..20536c91b47 100644
--- a/source/rpc_parse/parse_samr.c
+++ b/source/rpc_parse/parse_samr.c
@@ -23,6 +23,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+
#include "includes.h"
#include "rpc_parse.h"
#include "nterr.h"
@@ -1386,7 +1387,7 @@ BOOL samr_io_q_query_dispinfo(char *desc, SAMR_Q_QUERY_DISPINFO * q_e,
inits a SAM_DISPINFO_1 structure.
********************************************************************/
-uint32 init_sam_dispinfo_1(TALLOC_CTX *ctx, SAM_DISPINFO_1 *sam, uint32 *num_entries,
+void init_sam_dispinfo_1(SAM_DISPINFO_1 * sam, uint32 *num_entries,
uint32 *data_size, uint32 start_idx,
SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES])
{
@@ -1403,19 +1404,7 @@ uint32 init_sam_dispinfo_1(TALLOC_CTX *ctx, SAM_DISPINFO_1 *sam, uint32 *num_ent
DEBUG(5, ("init_sam_dispinfo_1: max_entries: %d max_dsize: 0x%x\n",
max_entries, max_data_size));
- sam->sam=(SAM_ENTRY1 *)talloc(ctx, max_entries*sizeof(SAM_ENTRY1));
- if (!sam->sam)
- return NT_STATUS_NO_MEMORY;
-
- sam->str=(SAM_STR1 *)talloc(ctx, max_entries*sizeof(SAM_STR1));
- if (!sam->str)
- return NT_STATUS_NO_MEMORY;
-
- ZERO_STRUCTP(sam->sam);
- ZERO_STRUCTP(sam->str);
-
for (i = 0; (i < max_entries) && (dsize < max_data_size); i++) {
- DEBUG(5, ("init_sam_dispinfo_1: entry: %d\n",i));
len_sam_name = pass[i].uni_user_name.uni_str_len;
len_sam_full = pass[i].uni_full_name.uni_str_len;
len_sam_desc = pass[i].uni_acct_desc.uni_str_len;
@@ -1424,10 +1413,6 @@ uint32 init_sam_dispinfo_1(TALLOC_CTX *ctx, SAM_DISPINFO_1 *sam, uint32 *num_ent
len_sam_name, len_sam_full, len_sam_desc,
pass[i].user_rid, pass[i].acb_info);
- ZERO_STRUCTP(&sam->str[i].uni_acct_name);
- ZERO_STRUCTP(&sam->str[i].uni_full_name);
- ZERO_STRUCTP(&sam->str[i].uni_acct_desc);
-
copy_unistr2(&sam->str[i].uni_acct_name, &pass[i].uni_user_name);
copy_unistr2(&sam->str[i].uni_full_name, &pass[i].uni_full_name);
copy_unistr2(&sam->str[i].uni_acct_desc, &pass[i].uni_acct_desc);
@@ -1438,8 +1423,6 @@ uint32 init_sam_dispinfo_1(TALLOC_CTX *ctx, SAM_DISPINFO_1 *sam, uint32 *num_ent
*num_entries = i;
*data_size = dsize;
-
- return NT_STATUS_NO_PROBLEMO;
}
/*******************************************************************
@@ -1452,28 +1435,16 @@ static BOOL sam_io_sam_dispinfo_1(char *desc, SAM_DISPINFO_1 * sam,
{
uint32 i;
+ if (sam == NULL)
+ return False;
+
prs_debug(ps, depth, desc, "sam_io_sam_dispinfo_1");
depth++;
if(!prs_align(ps))
return False;
- if (UNMARSHALLING(ps) && num_entries > 0) {
-
- if ((sam->sam = (SAM_ENTRY1 *)
- prs_alloc_mem(ps, sizeof(SAM_ENTRY1) *
- num_entries)) == NULL) {
- DEBUG(0, ("out of memory allocating SAM_ENTRY1\n"));
- return False;
- }
-
- if ((sam->str = (SAM_STR1 *)
- prs_alloc_mem(ps, sizeof(SAM_STR1) *
- num_entries)) == NULL) {
- DEBUG(0, ("out of memory allocating SAM_STR1\n"));
- return False;
- }
- }
+ SMB_ASSERT_ARRAY(sam->sam, num_entries);
for (i = 0; i < num_entries; i++) {
if(!sam_io_sam_entry1("", &sam->sam[i], ps, depth))
@@ -1495,7 +1466,7 @@ static BOOL sam_io_sam_dispinfo_1(char *desc, SAM_DISPINFO_1 * sam,
inits a SAM_DISPINFO_2 structure.
********************************************************************/
-uint32 init_sam_dispinfo_2(TALLOC_CTX *ctx, SAM_DISPINFO_2 *sam, uint32 *num_entries,
+void init_sam_dispinfo_2(SAM_DISPINFO_2 * sam, uint32 *num_entries,
uint32 *data_size, uint32 start_idx,
SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES])
{
@@ -1511,15 +1482,6 @@ uint32 init_sam_dispinfo_2(TALLOC_CTX *ctx, SAM_DISPINFO_2 *sam, uint32 *num_ent
max_entries = *num_entries;
max_data_size = *data_size;
- if (!(sam->sam=(SAM_ENTRY2 *)talloc(ctx, max_entries*sizeof(SAM_ENTRY2))))
- return NT_STATUS_NO_MEMORY;
-
- if (!(sam->str=(SAM_STR2 *)talloc(ctx, max_entries*sizeof(SAM_STR2))))
- return NT_STATUS_NO_MEMORY;
-
- ZERO_STRUCTP(sam->sam);
- ZERO_STRUCTP(sam->str);
-
for (i = 0; (i < max_entries) && (dsize < max_data_size); i++) {
len_sam_name = pass[i].uni_user_name.uni_str_len;
len_sam_desc = pass[i].uni_acct_desc.uni_str_len;
@@ -1528,11 +1490,10 @@ uint32 init_sam_dispinfo_2(TALLOC_CTX *ctx, SAM_DISPINFO_2 *sam, uint32 *num_ent
len_sam_name, len_sam_desc,
pass[i].user_rid, pass[i].acb_info);
- ZERO_STRUCTP(&sam->str[i].uni_srv_name);
- ZERO_STRUCTP(&sam->str[i].uni_srv_desc);
-
- copy_unistr2(&sam->str[i].uni_srv_name, &pass[i].uni_user_name);
- copy_unistr2(&sam->str[i].uni_srv_desc, &pass[i].uni_acct_desc);
+ copy_unistr2(&sam->str[i].uni_srv_name,
+ &pass[i].uni_user_name);
+ copy_unistr2(&sam->str[i].uni_srv_desc,
+ &pass[i].uni_acct_desc);
dsize += sizeof(SAM_ENTRY2);
dsize += len_sam_name + len_sam_desc;
@@ -1540,8 +1501,6 @@ uint32 init_sam_dispinfo_2(TALLOC_CTX *ctx, SAM_DISPINFO_2 *sam, uint32 *num_ent
*num_entries = i;
*data_size = dsize;
-
- return NT_STATUS_NO_PROBLEMO;
}
/*******************************************************************
@@ -1584,7 +1543,7 @@ static BOOL sam_io_sam_dispinfo_2(char *desc, SAM_DISPINFO_2 * sam,
inits a SAM_DISPINFO_3 structure.
********************************************************************/
-uint32 init_sam_dispinfo_3(TALLOC_CTX *ctx, SAM_DISPINFO_3 *sam, uint32 *num_entries,
+void init_sam_dispinfo_3(SAM_DISPINFO_3 * sam, uint32 *num_entries,
uint32 *data_size, uint32 start_idx,
DOMAIN_GRP * grp)
{
@@ -1600,15 +1559,6 @@ uint32 init_sam_dispinfo_3(TALLOC_CTX *ctx, SAM_DISPINFO_3 *sam, uint32 *num_ent
max_entries = *num_entries;
max_data_size = *data_size;
- if (!(sam->sam=(SAM_ENTRY3 *)talloc(ctx, max_entries*sizeof(SAM_ENTRY3))))
- return NT_STATUS_NO_MEMORY;
-
- if (!(sam->str=(SAM_STR3 *)talloc(ctx, max_entries*sizeof(SAM_STR3))))
- return NT_STATUS_NO_MEMORY;
-
- ZERO_STRUCTP(sam->sam);
- ZERO_STRUCTP(sam->str);
-
for (i = 0; (i < max_entries) && (dsize < max_data_size); i++) {
len_sam_name = strlen(grp[i].name);
len_sam_desc = strlen(grp[i].comment);
@@ -1625,8 +1575,6 @@ uint32 init_sam_dispinfo_3(TALLOC_CTX *ctx, SAM_DISPINFO_3 *sam, uint32 *num_ent
*num_entries = i;
*data_size = dsize;
-
- return NT_STATUS_NO_PROBLEMO;
}
/*******************************************************************
@@ -1669,7 +1617,7 @@ static BOOL sam_io_sam_dispinfo_3(char *desc, SAM_DISPINFO_3 * sam,
inits a SAM_DISPINFO_4 structure.
********************************************************************/
-uint32 init_sam_dispinfo_4(TALLOC_CTX *ctx, SAM_DISPINFO_4 *sam, uint32 *num_entries,
+void init_sam_dispinfo_4(SAM_DISPINFO_4 * sam, uint32 *num_entries,
uint32 *data_size, uint32 start_idx,
SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES])
{
@@ -1686,22 +1634,16 @@ uint32 init_sam_dispinfo_4(TALLOC_CTX *ctx, SAM_DISPINFO_4 *sam, uint32 *num_ent
max_entries = *num_entries;
max_data_size = *data_size;
- if (!(sam->sam=(SAM_ENTRY4 *)talloc(ctx, max_entries*sizeof(SAM_ENTRY4))))
- return NT_STATUS_NO_MEMORY;
-
- if (!(sam->str=(SAM_STR4 *)talloc(ctx, max_entries*sizeof(SAM_STR4))))
- return NT_STATUS_NO_MEMORY;
-
- ZERO_STRUCTP(sam->sam);
- ZERO_STRUCTP(sam->str);
-
for (i = 0; (i < max_entries) && (dsize < max_data_size); i++) {
len_sam_name = pass[i].uni_user_name.uni_str_len;
- init_sam_entry4(&sam->sam[i], start_idx + i + 1, len_sam_name);
-
- unistr2_to_ascii(sam_name, &pass[i].uni_user_name, sizeof(sam_name));
- init_string2(&sam->str[i].acct_name, sam_name, len_sam_name);
+ init_sam_entry4(&sam->sam[i], start_idx + i + 1,
+ len_sam_name);
+
+ unistr2_to_ascii(sam_name, &pass[i].uni_user_name,
+ sizeof(sam_name));
+ init_string2(&sam->str[i].acct_name, sam_name,
+ len_sam_name);
dsize += sizeof(SAM_ENTRY4);
dsize += len_sam_name;
@@ -1709,8 +1651,6 @@ uint32 init_sam_dispinfo_4(TALLOC_CTX *ctx, SAM_DISPINFO_4 *sam, uint32 *num_ent
*num_entries = i;
*data_size = dsize;
-
- return NT_STATUS_NO_PROBLEMO;
}
/*******************************************************************
@@ -1754,7 +1694,7 @@ static BOOL sam_io_sam_dispinfo_4(char *desc, SAM_DISPINFO_4 * sam,
inits a SAM_DISPINFO_5 structure.
********************************************************************/
-uint32 init_sam_dispinfo_5(TALLOC_CTX *ctx, SAM_DISPINFO_5 *sam, uint32 *num_entries,
+void init_sam_dispinfo_5(SAM_DISPINFO_5 * sam, uint32 *num_entries,
uint32 *data_size, uint32 start_idx,
DOMAIN_GRP * grp)
{
@@ -1770,20 +1710,14 @@ uint32 init_sam_dispinfo_5(TALLOC_CTX *ctx, SAM_DISPINFO_5 *sam, uint32 *num_ent
max_entries = *num_entries;
max_data_size = *data_size;
- if (!(sam->sam=(SAM_ENTRY5 *)talloc(ctx, max_entries*sizeof(SAM_ENTRY5))))
- return NT_STATUS_NO_MEMORY;
-
- if (!(sam->str=(SAM_STR5 *)talloc(ctx, max_entries*sizeof(SAM_STR5))))
- return NT_STATUS_NO_MEMORY;
-
- ZERO_STRUCTP(sam->sam);
- ZERO_STRUCTP(sam->str);
-
for (i = 0; (i < max_entries) && (dsize < max_data_size); i++) {
len_sam_name = strlen(grp[i].name);
- init_sam_entry5(&sam->sam[i], start_idx + i + 1, len_sam_name);
- init_string2(&sam->str[i].grp_name, grp[i].name, len_sam_name);
+ init_sam_entry5(&sam->sam[i], start_idx + i + 1,
+ len_sam_name);
+
+ init_string2(&sam->str[i].grp_name, grp[i].name,
+ len_sam_name);
dsize += sizeof(SAM_ENTRY5);
dsize += len_sam_name;
@@ -1791,8 +1725,6 @@ uint32 init_sam_dispinfo_5(TALLOC_CTX *ctx, SAM_DISPINFO_5 *sam, uint32 *num_ent
*num_entries = i;
*data_size = dsize;
-
- return NT_STATUS_NO_PROBLEMO;
}
/*******************************************************************
@@ -2115,32 +2047,29 @@ BOOL samr_io_group_info4(char *desc, GROUP_INFO4 * gr4,
reads or writes a structure.
********************************************************************/
-static BOOL samr_group_info_ctr(char *desc, GROUP_INFO_CTR **ctr,
+static BOOL samr_group_info_ctr(char *desc, GROUP_INFO_CTR * ctr,
prs_struct *ps, int depth)
{
- if (UNMARSHALLING(ps))
- *ctr = (GROUP_INFO_CTR *)prs_alloc_mem(ps,sizeof(GROUP_INFO_CTR));
-
- if (*ctr == NULL)
+ if (ctr == NULL)
return False;
prs_debug(ps, depth, desc, "samr_group_info_ctr");
depth++;
- if(!prs_uint16("switch_value1", ps, depth, &(*ctr)->switch_value1))
+ if(!prs_uint16("switch_value1", ps, depth, &ctr->switch_value1))
return False;
- if(!prs_uint16("switch_value2", ps, depth, &(*ctr)->switch_value2))
+ if(!prs_uint16("switch_value2", ps, depth, &ctr->switch_value2))
return False;
- switch ((*ctr)->switch_value1) {
+ switch (ctr->switch_value1) {
case 1:
if(!samr_io_group_info1("group_info1",
- &(*ctr)->group.info1, ps, depth))
+ &ctr->group.info1, ps, depth))
return False;
break;
case 4:
if(!samr_io_group_info4("group_info4",
- &(*ctr)->group.info4, ps, depth))
+ &ctr->group.info4, ps, depth))
return False;
break;
default:
@@ -2466,7 +2395,7 @@ BOOL samr_io_q_set_groupinfo(char *desc, SAMR_Q_SET_GROUPINFO * q_e,
if(!smb_io_pol_hnd("pol", &q_e->pol, ps, depth))
return False;
- if(!samr_group_info_ctr("ctr", &q_e->ctr, ps, depth))
+ if(!samr_group_info_ctr("ctr", q_e->ctr, ps, depth))
return False;
return True;
@@ -2578,7 +2507,7 @@ BOOL samr_io_r_query_groupinfo(char *desc, SAMR_R_QUERY_GROUPINFO * r_u,
return False;
if (r_u->ptr != 0) {
- if(!samr_group_info_ctr("ctr", &r_u->ctr, ps, depth))
+ if(!samr_group_info_ctr("ctr", r_u->ctr, ps, depth))
return False;
}
@@ -3665,12 +3594,15 @@ inits a SAMR_Q_OPEN_ALIAS structure.
********************************************************************/
void init_samr_q_open_alias(SAMR_Q_OPEN_ALIAS * q_u, POLICY_HND *pol,
- uint32 access_mask, uint32 rid)
+ uint32 unknown_0, uint32 rid)
{
DEBUG(5, ("init_samr_q_open_alias\n"));
q_u->dom_pol = *pol;
- q_u->access_mask = access_mask;
+
+ /* example values: 0x0000 0008 */
+ q_u->unknown_0 = unknown_0;
+
q_u->rid_alias = rid;
}
@@ -3693,7 +3625,7 @@ BOOL samr_io_q_open_alias(char *desc, SAMR_Q_OPEN_ALIAS * q_u,
if(!smb_io_pol_hnd("domain_pol", &q_u->dom_pol, ps, depth))
return False;
- if(!prs_uint32("access_mask", ps, depth, &q_u->access_mask))
+ if(!prs_uint32("unknown_0", ps, depth, &q_u->unknown_0))
return False;
if(!prs_uint32("rid_alias", ps, depth, &q_u->rid_alias))
return False;
@@ -3746,8 +3678,6 @@ void init_samr_q_lookup_rids(TALLOC_CTX *ctx, SAMR_Q_LOOKUP_RIDS * q_u,
if (q_u->rid == NULL) {
q_u->num_rids1 = 0;
q_u->num_rids2 = 0;
- } else {
- memcpy(q_u->rid, rid, num_rids * sizeof(q_u->rid[0]));
}
}
@@ -4359,7 +4289,7 @@ BOOL samr_io_r_query_aliasmem(char *desc, SAMR_R_QUERY_ALIASMEM * r_u,
inits a SAMR_Q_LOOKUP_NAMES structure.
********************************************************************/
-uint32 init_samr_q_lookup_names(TALLOC_CTX *ctx, SAMR_Q_LOOKUP_NAMES * q_u,
+void init_samr_q_lookup_names(SAMR_Q_LOOKUP_NAMES * q_u,
POLICY_HND *pol, uint32 flags,
uint32 num_names, char **name)
{
@@ -4374,19 +4304,11 @@ uint32 init_samr_q_lookup_names(TALLOC_CTX *ctx, SAMR_Q_LOOKUP_NAMES * q_u,
q_u->ptr = 0;
q_u->num_names2 = num_names;
- if (!(q_u->hdr_name = (UNIHDR *)talloc_zero(ctx, num_names * sizeof(UNIHDR))))
- return NT_STATUS_NO_MEMORY;
-
- if (!(q_u->uni_name = (UNISTR2 *)talloc_zero(ctx, num_names * sizeof(UNISTR2))))
- return NT_STATUS_NO_MEMORY;
-
for (i = 0; i < num_names; i++) {
int len_name = name[i] != NULL ? strlen(name[i]) : 0;
init_uni_hdr(&q_u->hdr_name[i], len_name); /* unicode header for user_name */
init_unistr2(&q_u->uni_name[i], name[i], len_name); /* unicode string for machine account */
}
-
- return NT_STATUS_NO_PROBLEMO;
}
/*******************************************************************
@@ -4422,14 +4344,7 @@ BOOL samr_io_q_lookup_names(char *desc, SAMR_Q_LOOKUP_NAMES * q_u,
if(!prs_uint32("num_names2", ps, depth, &q_u->num_names2))
return False;
- if (UNMARSHALLING(ps) && (q_u->num_names2 != 0)) {
- q_u->hdr_name = (UNIHDR *)prs_alloc_mem(ps, sizeof(UNIHDR) *
- q_u->num_names2);
- q_u->uni_name = (UNISTR2 *)prs_alloc_mem(ps, sizeof(UNISTR2) *
- q_u->num_names2);
- if (!q_u->hdr_name || !q_u->uni_name)
- return False;
- }
+ SMB_ASSERT_ARRAY(q_u->hdr_name, q_u->num_names2);
for (i = 0; i < q_u->num_names2; i++) {
if(!smb_io_unihdr("", &q_u->hdr_name[i], ps, depth))
@@ -4448,7 +4363,7 @@ BOOL samr_io_q_lookup_names(char *desc, SAMR_Q_LOOKUP_NAMES * q_u,
inits a SAMR_R_LOOKUP_NAMES structure.
********************************************************************/
-uint32 init_samr_r_lookup_names(TALLOC_CTX *ctx, SAMR_R_LOOKUP_NAMES * r_u,
+void init_samr_r_lookup_names(TALLOC_CTX *ctx, SAMR_R_LOOKUP_NAMES * r_u,
uint32 num_rids,
uint32 *rid, uint32 *type,
uint32 status)
@@ -4466,10 +4381,8 @@ uint32 init_samr_r_lookup_names(TALLOC_CTX *ctx, SAMR_R_LOOKUP_NAMES * r_u,
r_u->ptr_rids = 1;
r_u->num_rids2 = num_rids;
- if (!(r_u->rids = (uint32 *)talloc_zero(ctx, sizeof(uint32)*num_rids)))
- return NT_STATUS_NO_MEMORY;
- if (!(r_u->types = (uint32 *)talloc_zero(ctx, sizeof(uint32)*num_rids)))
- return NT_STATUS_NO_MEMORY;
+ r_u->rids = (uint32 *)talloc_zero(ctx, sizeof(uint32)*num_rids);
+ r_u->types = (uint32 *)talloc_zero(ctx, sizeof(uint32)*num_rids);
if (!r_u->rids || !r_u->types)
goto empty;
@@ -4494,8 +4407,6 @@ uint32 init_samr_r_lookup_names(TALLOC_CTX *ctx, SAMR_R_LOOKUP_NAMES * r_u,
}
r_u->status = status;
-
- return NT_STATUS_NO_PROBLEMO;
}
/*******************************************************************
@@ -5074,9 +4985,10 @@ static BOOL sam_io_user_info11(char *desc, SAM_USER_INFO_11 * usr,
*************************************************************************/
-void init_sam_user_info24(SAM_USER_INFO_24 * usr, char newpass[516])
+void init_sam_user_info24(SAM_USER_INFO_24 * usr,
+ char newpass[516], uint16 passlen)
{
- DEBUG(10, ("init_sam_user_info24:\n"));
+ DEBUG(10, ("init_sam_user_info24: passlen: %d\n", passlen));
memcpy(usr->pass, newpass, sizeof(usr->pass));
}
@@ -5099,9 +5011,6 @@ static BOOL sam_io_user_info24(char *desc, SAM_USER_INFO_24 * usr,
if(!prs_uint8s(False, "password", ps, depth, usr->pass, sizeof(usr->pass)))
return False;
- if(!prs_align(ps))
- return False;
-
return True;
}
@@ -5416,126 +5325,6 @@ static BOOL sam_io_user_info23(char *desc, SAM_USER_INFO_23 * usr,
return True;
}
-/*******************************************************************
- reads or writes a structure.
- NB. This structure is *definately* incorrect. It's my best guess
- currently for W2K SP2. The password field is encrypted in a different
- way than normal... And there are definately other problems. JRA.
-********************************************************************/
-
-static BOOL sam_io_user_info25(char *desc, SAM_USER_INFO_25 * usr, prs_struct *ps, int depth)
-{
- if (usr == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "sam_io_user_info23");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!smb_io_time("logon_time ", &usr->logon_time, ps, depth))
- return False;
- if(!smb_io_time("logoff_time ", &usr->logoff_time, ps, depth))
- return False;
- if(!smb_io_time("kickoff_time ", &usr->kickoff_time, ps, depth))
- return False;
- if(!smb_io_time("pass_last_set_time ", &usr->pass_last_set_time, ps, depth))
- return False;
- if(!smb_io_time("pass_can_change_time ", &usr->pass_can_change_time, ps, depth))
- return False;
- if(!smb_io_time("pass_must_change_time", &usr->pass_must_change_time, ps, depth))
- return False;
-
- if(!smb_io_unihdr("hdr_user_name ", &usr->hdr_user_name, ps, depth)) /* username unicode string header */
- return False;
- if(!smb_io_unihdr("hdr_full_name ", &usr->hdr_full_name, ps, depth)) /* user's full name unicode string header */
- return False;
- if(!smb_io_unihdr("hdr_home_dir ", &usr->hdr_home_dir, ps, depth)) /* home directory unicode string header */
- return False;
- if(!smb_io_unihdr("hdr_dir_drive ", &usr->hdr_dir_drive, ps, depth)) /* home directory drive */
- return False;
- if(!smb_io_unihdr("hdr_logon_script", &usr->hdr_logon_script, ps, depth)) /* logon script unicode string header */
- return False;
- if(!smb_io_unihdr("hdr_profile_path", &usr->hdr_profile_path, ps, depth)) /* profile path unicode string header */
- return False;
- if(!smb_io_unihdr("hdr_acct_desc ", &usr->hdr_acct_desc, ps, depth)) /* account desc */
- return False;
- if(!smb_io_unihdr("hdr_workstations", &usr->hdr_workstations, ps, depth)) /* wkstas user can log on from */
- return False;
- if(!smb_io_unihdr("hdr_unknown_str ", &usr->hdr_unknown_str, ps, depth)) /* unknown string */
- return False;
- if(!smb_io_unihdr("hdr_munged_dial ", &usr->hdr_munged_dial, ps, depth)) /* wkstas user can log on from */
- return False;
-
- if(!prs_uint8s(False, "lm_pwd ", ps, depth, usr->lm_pwd, sizeof(usr->lm_pwd)))
- return False;
- if(!prs_uint8s(False, "nt_pwd ", ps, depth, usr->nt_pwd, sizeof(usr->nt_pwd)))
- return False;
-
- if(!prs_uint32("user_rid ", ps, depth, &usr->user_rid)) /* User ID */
- return False;
- if(!prs_uint32("group_rid ", ps, depth, &usr->group_rid)) /* Group ID */
- return False;
- if(!prs_uint32("acb_info ", ps, depth, &usr->acb_info))
- return False;
-
- if(!prs_uint32s(False, "unknown_6 ", ps, depth, usr->unknown_6, 6))
- return False;
-
- if(!prs_uint8s(False, "password ", ps, depth, usr->pass, sizeof(usr->pass)))
- return False;
-
- /* here begins pointed-to data */
-
- if(!smb_io_unistr2("uni_user_name ", &usr->uni_user_name, usr->hdr_user_name.buffer, ps, depth)) /* username unicode string */
- return False;
-
- if(!smb_io_unistr2("uni_full_name ", &usr->uni_full_name, usr->hdr_full_name.buffer, ps, depth)) /* user's full name unicode string */
- return False;
-
- if(!smb_io_unistr2("uni_home_dir ", &usr->uni_home_dir, usr->hdr_home_dir.buffer, ps, depth)) /* home directory unicode string */
- return False;
-
- if(!smb_io_unistr2("uni_dir_drive ", &usr->uni_dir_drive, usr->hdr_dir_drive.buffer, ps, depth)) /* home directory drive unicode string */
- return False;
-
- if(!smb_io_unistr2("uni_logon_script", &usr->uni_logon_script, usr->hdr_logon_script.buffer, ps, depth)) /* logon script unicode string */
- return False;
-
- if(!smb_io_unistr2("uni_profile_path", &usr->uni_profile_path, usr->hdr_profile_path.buffer, ps, depth)) /* profile path unicode string */
- return False;
-
- if(!smb_io_unistr2("uni_acct_desc ", &usr->uni_acct_desc, usr->hdr_acct_desc.buffer, ps, depth)) /* user desc unicode string */
- return False;
-
- if(!smb_io_unistr2("uni_workstations", &usr->uni_workstations, usr->hdr_workstations.buffer, ps, depth)) /* worksations user can log on from */
- return False;
-
- if(!smb_io_unistr2("uni_unknown_str ", &usr->uni_unknown_str, usr->hdr_unknown_str.buffer, ps, depth)) /* unknown string */
- return False;
-
- if(!smb_io_unistr2("uni_munged_dial ", &usr->uni_munged_dial, usr->hdr_munged_dial.buffer, ps, depth))
- return False;
-
-#if 0 /* JRA - unknown... */
- /* ok, this is only guess-work (as usual) */
- if (usr->ptr_logon_hrs) {
- if(!prs_uint32("unknown_6 ", ps, depth, &usr->unknown_6))
- return False;
- if(!prs_uint32("padding4 ", ps, depth, &usr->padding4))
- return False;
- if(!sam_io_logon_hrs("logon_hrs", &usr->logon_hrs, ps, depth))
- return False;
- } else if (UNMARSHALLING(ps)) {
- usr->unknown_6 = 0;
- usr->padding4 = 0;
- }
-#endif
-
- return True;
-}
-
/*************************************************************************
init_sam_user_info21W
@@ -5926,12 +5715,12 @@ void init_samr_userinfo_ctr(SAM_USERINFO_CTR * ctr, uchar * sess_key,
switch (switch_value) {
case 0x18:
- SamOEMhash(ctr->info.id24->pass, sess_key, 516);
+ SamOEMhash(ctr->info.id24->pass, sess_key, 1);
dump_data(100, (char *)sess_key, 16);
dump_data(100, (char *)ctr->info.id24->pass, 516);
break;
case 0x17:
- SamOEMhash(ctr->info.id23->pass, sess_key, 516);
+ SamOEMhash(ctr->info.id23->pass, sess_key, 1);
dump_data(100, (char *)sess_key, 16);
dump_data(100, (char *)ctr->info.id23->pass, 516);
break;
@@ -6031,16 +5820,6 @@ static BOOL samr_io_userinfo_ctr(char *desc, SAM_USERINFO_CTR **ppctr,
}
ret = sam_io_user_info24("", ctr->info.id24, ps, depth);
break;
- case 25:
- if (UNMARSHALLING(ps))
- ctr->info.id25 = (SAM_USER_INFO_25 *)prs_alloc_mem(ps,sizeof(SAM_USER_INFO_25));
-
- if (ctr->info.id25 == NULL) {
- DEBUG(2,("samr_io_userinfo_ctr: info pointer not initialised\n"));
- return False;
- }
- ret = sam_io_user_info25("", ctr->info.id25, ps, depth);
- break;
default:
DEBUG(2, ("samr_io_userinfo_ctr: unknown switch level 0x%x\n", ctr->switch_value));
ret = False;
@@ -6195,8 +5974,8 @@ void init_samr_q_set_userinfo2(SAMR_Q_SET_USERINFO2 * q_u,
switch (switch_value) {
case 0x12:
- SamOEMhash(ctr->info.id12->lm_pwd, sess_key, 16);
- SamOEMhash(ctr->info.id12->nt_pwd, sess_key, 16);
+ SamOEMhash(ctr->info.id12->lm_pwd, sess_key, 0);
+ SamOEMhash(ctr->info.id12->nt_pwd, sess_key, 0);
dump_data(100, (char *)sess_key, 16);
dump_data(100, (char *)ctr->info.id12->lm_pwd, 16);
dump_data(100, (char *)ctr->info.id12->nt_pwd, 16);
diff --git a/source/rpc_parse/parse_sec.c b/source/rpc_parse/parse_sec.c
index b202c2a3566..e5d3a6ce43c 100644
--- a/source/rpc_parse/parse_sec.c
+++ b/source/rpc_parse/parse_sec.c
@@ -135,14 +135,7 @@ SEC_ACL *make_sec_acl(TALLOC_CTX *ctx, uint16 revision, int num_aces, SEC_ACE *a
dst->num_aces = num_aces;
dst->size = 8;
- /* Now we need to return a non-NULL address for the ace list even
- if the number of aces required is zero. This is because there
- is a distinct difference between a NULL ace and an ace with zero
- entries in it. This is achieved by always making the number of
- bytes allocated by talloc() positive. Heh. */
-
- if((dst->ace = (SEC_ACE *)talloc(ctx, sizeof(SEC_ACE) * num_aces + 1))
- == NULL) {
+ if((dst->ace = (SEC_ACE *)talloc(ctx, sizeof(SEC_ACE) * num_aces )) == NULL) {
return NULL;
}
@@ -211,13 +204,9 @@ BOOL sec_io_acl(char *desc, SEC_ACL **ppsa, prs_struct *ps, int depth)
if(!prs_uint32("num_aces ", ps, depth, &psa->num_aces))
return False;
- if (UNMARSHALLING(ps)) {
- /*
- * Even if the num_aces is zero, allocate memory as there's a difference
- * between a non-present DACL (allow all access) and a DACL with no ACE's
- * (allow no access).
- */
- if((psa->ace = (SEC_ACE *)prs_alloc_mem(ps,sizeof(psa->ace[0]) * (psa->num_aces+1))) == NULL)
+ if (UNMARSHALLING(ps) && psa->num_aces != 0) {
+ /* reading */
+ if((psa->ace = (SEC_ACE *)prs_alloc_mem(ps,sizeof(psa->ace[0]) * psa->num_aces)) == NULL)
return False;
}
diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c
index 2b81a7708c0..ff3e53273a0 100644
--- a/source/rpc_parse/parse_spoolss.c
+++ b/source/rpc_parse/parse_spoolss.c
@@ -761,7 +761,6 @@ BOOL make_spoolss_q_open_printer_ex(SPOOL_Q_OPEN_PRINTER_EX *q_u,
* init a structure.
********************************************************************/
BOOL make_spoolss_q_addprinterex(
- TALLOC_CTX *mem_ctx,
SPOOL_Q_ADDPRINTEREX *q_u,
const char *srv_name,
const char* clientname,
@@ -784,7 +783,7 @@ BOOL make_spoolss_q_addprinterex(
{
case 2:
/* init q_u->info.info2 from *info */
- if (!make_spoolss_printer_info_2(mem_ctx, &q_u->info.info_2, ctr->printers_2))
+ if (!make_spoolss_printer_info_2(&q_u->info.info_2, ctr->printers_2))
{
DEBUG(0,("make_spoolss_q_addprinterex: Unable to fill SPOOL_Q_ADDPRINTEREX struct!\n"));
return False;
@@ -819,7 +818,6 @@ create a SPOOL_PRINTER_INFO_2 stuct from a PRINTER_INFO_2 struct
*******************************************************************/
BOOL make_spoolss_printer_info_2(
- TALLOC_CTX *mem_ctx,
SPOOL_PRINTER_INFO_LEVEL_2 **spool_info2,
PRINTER_INFO_2 *info
)
@@ -828,7 +826,8 @@ BOOL make_spoolss_printer_info_2(
SPOOL_PRINTER_INFO_LEVEL_2 *inf;
/* allocate the necessary memory */
- if (!(inf=(SPOOL_PRINTER_INFO_LEVEL_2*)talloc(mem_ctx, sizeof(SPOOL_PRINTER_INFO_LEVEL_2))))
+ inf = (SPOOL_PRINTER_INFO_LEVEL_2*)malloc(sizeof(SPOOL_PRINTER_INFO_LEVEL_2));
+ if (!spool_info2)
{
DEBUG(0,("make_spoolss_printer_info_2: Unable to allocate SPOOL_PRINTER_INFO_LEVEL_2 sruct!\n"));
return False;
@@ -909,31 +908,6 @@ BOOL spoolss_io_q_open_printer_ex(char *desc, SPOOL_Q_OPEN_PRINTER_EX *q_u, prs_
}
/*******************************************************************
- * init a structure.
- ********************************************************************/
-BOOL make_spoolss_q_deleteprinterdriver(
- TALLOC_CTX *mem_ctx,
- SPOOL_Q_DELETEPRINTERDRIVER *q_u,
- const char *server,
- const char* arch,
- const char* driver
-)
-{
- DEBUG(5,("make_spoolss_q_deleteprinterdriver\n"));
-
- q_u->server_ptr = (server!=NULL)?1:0;
-
- /* these must be NULL terminated or else NT4 will
- complain about invalid parameters --jerry */
- init_unistr2(&q_u->server, server, strlen(server)+1);
- init_unistr2(&q_u->arch, arch, strlen(arch)+1);
- init_unistr2(&q_u->driver, driver, strlen(driver)+1);
-
-
- return True;
-}
-
-/*******************************************************************
* write a structure.
* called from static spoolss_r_open_printer_ex (srv_spoolss.c)
* called from spoolss_open_printer_ex (cli_spoolss.c)
@@ -1176,58 +1150,6 @@ BOOL spoolss_io_r_deleteprinter(char *desc, SPOOL_R_DELETEPRINTER *r_u, prs_stru
return True;
}
-
-/*******************************************************************
- * read a structure.
- * called from api_spoolss_deleteprinterdriver (srv_spoolss.c)
- * called from spoolss_deleteprinterdriver (cli_spoolss.c)
- ********************************************************************/
-
-BOOL spoolss_io_q_deleteprinterdriver(char *desc, SPOOL_Q_DELETEPRINTERDRIVER *q_u, prs_struct *ps, int depth)
-{
- if (q_u == NULL) return False;
-
- prs_debug(ps, depth, desc, "spoolss_io_q_deleteprinterdriver");
- depth++;
-
- if (!prs_align(ps))
- return False;
-
- if(!prs_uint32("server_ptr", ps, depth, &q_u->server_ptr))
- return False;
- if(!smb_io_unistr2("server", &q_u->server, q_u->server_ptr, ps, depth))
- return False;
- if(!smb_io_unistr2("arch", &q_u->arch, True, ps, depth))
- return False;
- if(!smb_io_unistr2("driver", &q_u->driver, True, ps, depth))
- return False;
-
-
- return True;
-}
-
-
-/*******************************************************************
- * write a structure.
- ********************************************************************/
-BOOL spoolss_io_r_deleteprinterdriver(char *desc, SPOOL_R_DELETEPRINTERDRIVER *r_u, prs_struct *ps, int depth)
-{
- if (r_u == NULL) return False;
-
- prs_debug(ps, depth, desc, "spoolss_io_r_deleteprinterdriver");
- depth++;
-
- if (!prs_align(ps))
- return False;
-
- if (!prs_uint32("status", ps, depth, &r_u->status))
- return False;
-
- return True;
-}
-
-
-
/*******************************************************************
* read a structure.
* called from static spoolss_q_closeprinter (srv_spoolss.c)
@@ -3334,14 +3256,9 @@ BOOL spoolss_io_r_getprinterdriver2(char *desc, SPOOL_R_GETPRINTERDRIVER2 *r_u,
* init a structure.
********************************************************************/
-BOOL make_spoolss_q_enumprinters(
- SPOOL_Q_ENUMPRINTERS *q_u,
- uint32 flags,
- fstring servername,
- uint32 level,
- NEW_BUFFER *buffer,
- uint32 offered
-)
+BOOL make_spoolss_q_enumprinters(SPOOL_Q_ENUMPRINTERS *q_u, uint32 flags,
+ fstring servername, uint32 level,
+ NEW_BUFFER *buffer, uint32 offered)
{
q_u->flags=flags;
@@ -3503,7 +3420,6 @@ BOOL spoolss_io_q_getprinter(char *desc, SPOOL_Q_GETPRINTER *q_u, prs_struct *ps
********************************************************************/
BOOL make_spoolss_q_getprinter(
- TALLOC_CTX *mem_ctx,
SPOOL_Q_GETPRINTER *q_u,
const POLICY_HND *hnd,
uint32 level,
@@ -3528,7 +3444,6 @@ BOOL make_spoolss_q_getprinter(
* init a structure.
********************************************************************/
BOOL make_spoolss_q_setprinter(
- TALLOC_CTX *mem_ctx,
SPOOL_Q_SETPRINTER *q_u,
const POLICY_HND *hnd,
uint32 level,
@@ -3559,7 +3474,7 @@ BOOL make_spoolss_q_setprinter(
info->printers_2->devmode = NULL;
info->printers_2->secdesc = NULL;
- make_spoolss_printer_info_2 (mem_ctx, &q_u->info.info_2, info->printers_2);
+ make_spoolss_printer_info_2 (&q_u->info.info_2, info->printers_2);
#if 0 /* JERRY TEST */
q_u->secdesc_ctr = (SEC_DESC_BUF*)malloc(sizeof(SEC_DESC_BUF));
if (!q_u->secdesc_ctr)
@@ -3568,13 +3483,13 @@ BOOL make_spoolss_q_setprinter(
q_u->secdesc_ctr->max_len = (secdesc) ? sizeof(SEC_DESC) + (2*sizeof(uint32)) : 0;
q_u->secdesc_ctr->len = (secdesc) ? sizeof(SEC_DESC) + (2*sizeof(uint32)) : 0;
q_u->secdesc_ctr->sec = secdesc;
-
+
q_u->devmode_ctr.devmode_ptr = (devmode != NULL) ? 1 : 0;
q_u->devmode_ctr.size = sizeof(DEVICEMODE) + (3*sizeof(uint32));
q_u->devmode_ctr.devmode = devmode;
#else
q_u->secdesc_ctr = NULL;
-
+
q_u->devmode_ctr.devmode_ptr = 0;
q_u->devmode_ctr.size = 0;
q_u->devmode_ctr.devmode = NULL;
@@ -4785,7 +4700,6 @@ BOOL spool_io_printer_driver_info_level(char *desc, SPOOL_PRINTER_DRIVER_INFO_LE
******************************************************************/
BOOL make_spoolss_q_addprinterdriver(
- TALLOC_CTX *mem_ctx,
SPOOL_Q_ADDPRINTERDRIVER *q_u,
const char* srv_name,
uint32 level,
@@ -4804,7 +4718,7 @@ BOOL make_spoolss_q_addprinterdriver(
{
/* info level 3 is supported by Windows 95/98, WinNT and Win2k */
case 3 :
- make_spoolss_driver_info_3(mem_ctx, &q_u->info.info_3, info->info3);
+ make_spoolss_driver_info_3(&q_u->info.info_3, info->info3);
break;
/* info level 6 is supported by WinME and Win2k */
@@ -4821,7 +4735,6 @@ BOOL make_spoolss_q_addprinterdriver(
}
BOOL make_spoolss_driver_info_3(
- TALLOC_CTX *mem_ctx,
SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **spool_drv_info,
DRIVER_INFO_3 *info3
)
@@ -4832,8 +4745,11 @@ BOOL make_spoolss_driver_info_3(
BOOL null_char = False;
SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *inf;
- if (!(inf=(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3*)talloc_zero(mem_ctx, sizeof(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3))))
+ inf = (SPOOL_PRINTER_DRIVER_INFO_LEVEL_3*)
+ malloc(sizeof(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3));
+ if (!inf)
return False;
+ memset (inf, 0x0, sizeof(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3));
inf->cversion = info3->version;
inf->name_ptr = (info3->name.buffer!=NULL)?1:0;
@@ -4877,7 +4793,7 @@ BOOL make_spoolss_driver_info_3(
}
inf->dependentfiles_ptr = (info3->dependentfiles != NULL) ? 1 : 0;
inf->dependentfilessize = len;
- if(!make_spoolss_buffer5(mem_ctx, &inf->dependentfiles, len, info3->dependentfiles))
+ if(!make_spoolss_buffer5(&inf->dependentfiles, len, info3->dependentfiles))
{
safe_free (inf);
return False;
@@ -4892,21 +4808,18 @@ BOOL make_spoolss_driver_info_3(
make a BUFFER5 struct from a uint16*
******************************************************************/
-BOOL make_spoolss_buffer5(
- TALLOC_CTX *mem_ctx,
- BUFFER5 *buf5,
- uint32 len,
- uint16 *src
-)
+BOOL make_spoolss_buffer5(BUFFER5 *buf5, uint32 len, uint16 *src)
{
buf5->buf_len = len;
- if((buf5->buffer=(uint16*)talloc_memdup(mem_ctx, src, sizeof(uint16)*len)) == NULL)
+ if((buf5->buffer=(uint16*)malloc(sizeof(uint16)*len)) == NULL)
{
DEBUG(0,("make_spoolss_buffer5: Unable to malloc memory for buffer!\n"));
return False;
}
+ memcpy(buf5->buffer, src, sizeof(uint16)*len);
+
return True;
}
@@ -5255,57 +5168,6 @@ BOOL spoolss_io_q_enumprintprocessors(char *desc, SPOOL_Q_ENUMPRINTPROCESSORS *q
/*******************************************************************
********************************************************************/
-BOOL spoolss_io_q_addprintprocessor(char *desc, SPOOL_Q_ADDPRINTPROCESSOR *q_u, prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "spoolss_io_q_addprintprocessor");
- depth++;
-
- if (!prs_align(ps))
- return False;
-
- if (!prs_uint32("server_ptr", ps, depth, &q_u->server_ptr))
- return False;
- if (!smb_io_unistr2("server", &q_u->server, q_u->server_ptr, ps, depth))
- return False;
-
- if (!prs_align(ps))
- return False;
- if (!smb_io_unistr2("environment", &q_u->environment, True, ps, depth))
- return False;
-
- if (!prs_align(ps))
- return False;
- if (!smb_io_unistr2("path", &q_u->path, True, ps, depth))
- return False;
-
- if (!prs_align(ps))
- return False;
- if (!smb_io_unistr2("name", &q_u->name, True, ps, depth))
- return False;
-
- return True;
-}
-
-/*******************************************************************
-********************************************************************/
-
-BOOL spoolss_io_r_addprintprocessor(char *desc, SPOOL_R_ADDPRINTPROCESSOR *r_u, prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "spoolss_io_r_addprintproicessor");
- depth++;
-
- if (!prs_align(ps))
- return False;
-
- if (!prs_uint32("status", ps, depth, &r_u->status))
- return False;
-
- return True;
-}
-
-/*******************************************************************
-********************************************************************/
-
BOOL spoolss_io_r_enumprintprocdatatypes(char *desc, SPOOL_R_ENUMPRINTPROCDATATYPES *r_u, prs_struct *ps, int depth)
{
prs_debug(ps, depth, desc, "spoolss_io_r_enumprintprocdatatypes");
@@ -5545,14 +5407,12 @@ BOOL spoolss_io_q_setprinterdata(char *desc, SPOOL_Q_SETPRINTERDATA *q_u, prs_st
case 0x3:
case 0x4:
case 0x7:
- if (q_u->max_len) {
- if (UNMARSHALLING(ps))
- q_u->data=(uint8 *)prs_alloc_mem(ps, q_u->max_len * sizeof(uint8));
- if(q_u->data == NULL)
- return False;
- if(!prs_uint8s(False,"data", ps, depth, q_u->data, q_u->max_len))
- return False;
- }
+ if (UNMARSHALLING(ps))
+ q_u->data=(uint8 *)prs_alloc_mem(ps, q_u->max_len * sizeof(uint8));
+ if(q_u->data == NULL)
+ return False;
+ if(!prs_uint8s(False,"data", ps, depth, q_u->data, q_u->max_len))
+ return False;
if(!prs_align(ps))
return False;
break;
diff --git a/source/rpc_parse/parse_srv.c b/source/rpc_parse/parse_srv.c
index 6d24617f363..61d2ff7ba2a 100644
--- a/source/rpc_parse/parse_srv.c
+++ b/source/rpc_parse/parse_srv.c
@@ -1,3 +1,4 @@
+
/*
* Unix SMB/Netbios implementation.
* Version 1.9.
@@ -279,27 +280,18 @@ static BOOL srv_io_share_info502(char *desc, SH_INFO_502 *sh502, prs_struct *ps,
Inits a SH_INFO_502_STR structure
********************************************************************/
-void init_srv_share_info502_str(SH_INFO_502_STR *sh502str,
- SH_INFO_502 *ptrs,
+void init_srv_share_info502_str(SH_INFO_502_STR *sh502,
char *net_name, char *remark,
char *path, char *passwd, SEC_DESC *psd, size_t sd_size)
{
DEBUG(5,("init_srv_share_info502_str\n"));
- sh502str->ptrs = ptrs;
-
- if(sh502str->ptrs->ptr_netname)
- init_unistr2(&sh502str->uni_netname, net_name, strlen(net_name)+1);
- if(sh502str->ptrs->ptr_remark)
- init_unistr2(&sh502str->uni_remark, remark, strlen(remark)+1);
- if(sh502str->ptrs->ptr_path)
- init_unistr2(&sh502str->uni_path, path, strlen(path)+1);
- if(sh502str->ptrs->ptr_passwd)
- init_unistr2(&sh502str->uni_passwd, passwd, strlen(passwd)+1);
- if(sh502str->ptrs->ptr_sd) {
- sh502str->sd = psd;
- sh502str->sd_size = sd_size;
- }
+ init_unistr2(&sh502->uni_netname, net_name, strlen(net_name)+1);
+ init_unistr2(&sh502->uni_remark, remark, strlen(remark)+1);
+ init_unistr2(&sh502->uni_path, path, strlen(path)+1);
+ init_unistr2(&sh502->uni_passwd, passwd, strlen(passwd)+1);
+ sh502->sd = psd;
+ sh502->sd_size = sd_size;
}
/*******************************************************************
@@ -316,45 +308,31 @@ static BOOL srv_io_share_info502_str(char *desc, SH_INFO_502_STR *sh502, prs_str
if(!prs_align(ps))
return False;
-
- if(sh502->ptrs->ptr_netname) {
- if(!smb_io_unistr2("", &sh502->uni_netname, True, ps, depth))
- return False;
- }
+ if(!smb_io_unistr2("", &sh502->uni_netname, True, ps, depth))
+ return False;
if(!prs_align(ps))
return False;
-
- if(sh502->ptrs->ptr_remark) {
- if(!smb_io_unistr2("", &sh502->uni_remark, True, ps, depth))
- return False;
- }
+ if(!smb_io_unistr2("", &sh502->uni_remark, True, ps, depth))
+ return False;
if(!prs_align(ps))
return False;
-
- if(sh502->ptrs->ptr_path) {
- if(!smb_io_unistr2("", &sh502->uni_path, True, ps, depth))
- return False;
- }
+ if(!smb_io_unistr2("", &sh502->uni_path, True, ps, depth))
+ return False;
if(!prs_align(ps))
return False;
-
- if(sh502->ptrs->ptr_passwd) {
- if(!smb_io_unistr2("", &sh502->uni_passwd, True, ps, depth))
- return False;
- }
+ if(!smb_io_unistr2("", &sh502->uni_passwd, True, ps, depth))
+ return False;
if(!prs_align(ps))
return False;
- if(sh502->ptrs->ptr_sd) {
- if(!prs_uint32("sd_size ", ps, depth, &sh502->sd_size))
- return False;
- if (!sec_io_desc(desc, &sh502->sd, ps, depth))
- return False;
- }
+ if(!prs_uint32("sd_size ", ps, depth, &sh502->sd_size))
+ return False;
+ if (!sec_io_desc(desc, &sh502->sd, ps, depth))
+ return False;
return True;
}
@@ -523,7 +501,6 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
}
for (i = 0; i < num_entries; i++) {
- info502[i].info_502_str.ptrs = &info502[i].info_502;
if(!srv_io_share_info502_str("", &info502[i].info_502_str, ps, depth))
return False;
}
@@ -698,9 +675,6 @@ static BOOL srv_io_srv_share_info(char *desc, prs_struct *ps, int depth, SRV_SHA
if(!srv_io_share_info502("", &r_n->share.info502.info_502, ps, depth))
return False;
- /*allow access to pointers in the str part. */
- r_n->share.info502.info_502_str.ptrs = &r_n->share.info502.info_502;
-
if(!srv_io_share_info502_str("", &r_n->share.info502.info_502_str, ps, depth))
return False;
break;
@@ -2258,57 +2232,6 @@ void init_srv_r_net_srv_get_info(SRV_R_NET_SRV_GET_INFO *srv,
}
/*******************************************************************
- Inits a SRV_R_NET_SRV_SET_INFO structure.
- ********************************************************************/
-
-void init_srv_r_net_srv_set_info(SRV_R_NET_SRV_SET_INFO *srv,
- uint32 switch_value, uint32 status)
-{
- DEBUG(5,("init_srv_r_net_srv_set_info\n"));
-
- srv->switch_value = switch_value;
- srv->status = status;
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-BOOL srv_io_q_net_srv_set_info(char *desc, SRV_Q_NET_SRV_SET_INFO *q_n,
- prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "srv_io_q_net_srv_set_info");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_srv_name ", ps, depth, &q_n->ptr_srv_name))
- return False;
- if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("switch_value ", ps, depth, &q_n->switch_value))
- return False;
-
- if (UNMARSHALLING(ps)) {
- q_n->ctr = (SRV_INFO_CTR *)
- prs_alloc_mem(ps, sizeof(SRV_INFO_CTR));
-
- if (!q_n->ctr)
- return False;
- }
-
- if(!srv_io_info_ctr("ctr", q_n->ctr, ps, depth))
- return False;
-
- return True;
-}
-
-/*******************************************************************
Reads or writes a structure.
********************************************************************/
@@ -2332,27 +2255,6 @@ BOOL srv_io_r_net_srv_get_info(char *desc, SRV_R_NET_SRV_GET_INFO *r_n, prs_stru
return True;
}
-/*******************************************************************
- Reads or writes a structure.
- ********************************************************************/
-
-BOOL srv_io_r_net_srv_set_info(char *desc, SRV_R_NET_SRV_SET_INFO *r_n,
- prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "srv_io_r_net_srv_set_info");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("switch_value ", ps, depth, &r_n->switch_value))
- return False;
-
- if(!prs_uint32("status ", ps, depth, &r_n->status))
- return False;
-
- return True;
-}
/*******************************************************************
Reads or writes a structure.
@@ -2472,324 +2374,3 @@ BOOL srv_io_r_net_remote_tod(char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *
return True;
}
-
-/*******************************************************************
- Reads or writes a structure.
- ********************************************************************/
-
-BOOL srv_io_q_net_disk_enum(char *desc, SRV_Q_NET_DISK_ENUM *q_n, prs_struct *ps, int depth)
-{
- if (q_n == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "srv_io_q_net_disk_enum");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
- return False;
-
- if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("level", ps, depth, &q_n->disk_enum_ctr.level))
- return False;
-
- if(!prs_uint32("entries_read", ps, depth, &q_n->disk_enum_ctr.entries_read))
- return False;
-
- if(!prs_uint32("buffer", ps, depth, &q_n->disk_enum_ctr.disk_info_ptr))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("preferred_len", ps, depth, &q_n->preferred_len))
- return False;
- if(!smb_io_enum_hnd("enum_hnd", &q_n->enum_hnd, ps, depth))
- return False;
-
- return True;
-}
-
-/*******************************************************************
- Reads or writes a structure.
- ********************************************************************/
-
-BOOL srv_io_r_net_disk_enum(char *desc, SRV_R_NET_DISK_ENUM *r_n, prs_struct *ps, int depth)
-{
- int i;
-
- if (r_n == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "srv_io_r_net_disk_enum");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("entries_read", ps, depth, &r_n->disk_enum_ctr.entries_read))
- return False;
- if(!prs_uint32("ptr_disk_info", ps, depth, &r_n->disk_enum_ctr.disk_info_ptr))
- return False;
-
- /*this may be max, unknown, actual?*/
-
- if(!prs_uint32("max_elements", ps, depth, &r_n->disk_enum_ctr.entries_read))
- return False;
- if(!prs_uint32("unknown", ps, depth, &r_n->disk_enum_ctr.unknown))
- return False;
- if(!prs_uint32("actual_elements", ps, depth, &r_n->disk_enum_ctr.entries_read))
- return False;
-
- for(i=0; i < r_n->disk_enum_ctr.entries_read; i++) {
-
- if(!prs_uint32("unknown", ps, depth, &r_n->disk_enum_ctr.disk_info[i].unknown))
- return False;
-
- if(!smb_io_unistr3("disk_name", &r_n->disk_enum_ctr.disk_info[i].disk_name, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
- }
-
- if(!prs_uint32("total_entries", ps, depth, &r_n->total_entries))
- return False;
-
- if(!smb_io_enum_hnd("enum_hnd", &r_n->enum_hnd, ps, depth))
- return False;
-
- if(!prs_uint32("status", ps, depth, &r_n->status))
- return False;
-
- return True;
-}
-
-/*******************************************************************
- Reads or writes a structure.
- ********************************************************************/
-
-BOOL srv_io_q_net_name_validate(char *desc, SRV_Q_NET_NAME_VALIDATE *q_n, prs_struct *ps, int depth)
-{
- if (q_n == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "srv_io_q_net_name_validate");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
- return False;
-
- if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!smb_io_unistr2("", &q_n->uni_name, True, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("type", ps, depth, &q_n->type))
- return False;
-
- if(!prs_uint32("flags", ps, depth, &q_n->flags))
- return False;
-
- return True;
-}
-
-/*******************************************************************
- Reads or writes a structure.
- ********************************************************************/
-
-BOOL srv_io_r_net_name_validate(char *desc, SRV_R_NET_NAME_VALIDATE *r_n, prs_struct *ps, int depth)
-{
- if (r_n == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "srv_io_r_net_name_validate");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("status", ps, depth, &r_n->status))
- return False;
-
- return True;
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-BOOL srv_io_q_net_file_query_secdesc(char *desc, SRV_Q_NET_FILE_QUERY_SECDESC *q_n, prs_struct *ps, int depth)
-{
- if (q_n == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "srv_io_q_net_file_query_secdesc");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
- return False;
-
- if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
- return False;
-
- if(!smb_io_unistr2("", &q_n->uni_qual_name, True, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!smb_io_unistr2("", &q_n->uni_file_name, True, ps, depth))
- return False;
-
- if(!prs_uint32("unknown1", ps, depth, &q_n->unknown1))
- return False;
-
- if(!prs_uint32("unknown2", ps, depth, &q_n->unknown2))
- return False;
-
- if(!prs_uint32("unknown3", ps, depth, &q_n->unknown3))
- return False;
-
- return True;
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-BOOL srv_io_r_net_file_query_secdesc(char *desc, SRV_R_NET_FILE_QUERY_SECDESC *r_n, prs_struct *ps, int depth)
-{
- if (r_n == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "srv_io_r_net_file_query_secdesc");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_response", ps, depth, &r_n->ptr_response))
- return False;
-
- if(!prs_uint32("size_response", ps, depth, &r_n->size_response))
- return False;
-
- if(!prs_uint32("ptr_secdesc", ps, depth, &r_n->ptr_secdesc))
- return False;
-
- if(!prs_uint32("size_secdesc", ps, depth, &r_n->size_secdesc))
- return False;
-
- if(!sec_io_desc("sec_desc", &r_n->sec_desc, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("status", ps, depth, &r_n->status))
- return False;
-
- return True;
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-BOOL srv_io_q_net_file_set_secdesc(char *desc, SRV_Q_NET_FILE_SET_SECDESC *q_n, prs_struct *ps, int depth)
-{
- if (q_n == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "srv_io_q_net_file_set_secdesc");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_srv_name", ps, depth, &q_n->ptr_srv_name))
- return False;
-
- if(!smb_io_unistr2("", &q_n->uni_srv_name, True, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("ptr_qual_name", ps, depth, &q_n->ptr_qual_name))
- return False;
-
- if(!smb_io_unistr2("", &q_n->uni_qual_name, True, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
-
- if(!smb_io_unistr2("", &q_n->uni_file_name, True, ps, depth))
- return False;
-
- if(!prs_uint32("sec_info", ps, depth, &q_n->sec_info))
- return False;
-
- if(!prs_uint32("size_set", ps, depth, &q_n->size_set))
- return False;
-
- if(!prs_uint32("ptr_secdesc", ps, depth, &q_n->ptr_secdesc))
- return False;
-
- if(!prs_uint32("size_secdesc", ps, depth, &q_n->size_secdesc))
- return False;
-
- if(!sec_io_desc("sec_desc", &q_n->sec_desc, ps, depth))
- return False;
-
- return True;
-}
-
-/*******************************************************************
- Reads or writes a structure.
-********************************************************************/
-
-BOOL srv_io_r_net_file_set_secdesc(char *desc, SRV_R_NET_FILE_SET_SECDESC *r_n, prs_struct *ps, int depth)
-{
- if (r_n == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "srv_io_r_net_file_set_secdesc");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("status", ps, depth, &r_n->status))
- return False;
-
- return True;
-}
diff --git a/source/rpc_server/srv_dfs_nt.c b/source/rpc_server/srv_dfs_nt.c
index 54c3fbf324c..c01ab8f2d9d 100644
--- a/source/rpc_server/srv_dfs_nt.c
+++ b/source/rpc_server/srv_dfs_nt.c
@@ -121,7 +121,7 @@ uint32 _dfs_remove(pipes_struct *p, DFS_Q_DFS_REMOVE *q_u, DFS_R_DFS_REMOVE *r_u
get_current_user(&user,p);
if (user.uid != 0) {
- DEBUG(10,("_dfs_remove: uid != 0. Access denied.\n"));
+ DEBUG(10,("_dfs_add: uid != 0. Access denied.\n"));
return ERROR_ACCESS_DENIED;
}
diff --git a/source/rpc_server/srv_lsa.c b/source/rpc_server/srv_lsa.c
index 005398924ee..b6a8c745a45 100644
--- a/source/rpc_server/srv_lsa.c
+++ b/source/rpc_server/srv_lsa.c
@@ -269,37 +269,6 @@ static BOOL api_lsa_open_secret(pipes_struct *p)
}
/***************************************************************************
- api_lsa_UNK_GET_CONNUSER
- ***************************************************************************/
-
-static BOOL api_lsa_unk_get_connuser(pipes_struct *p)
-{
- LSA_Q_UNK_GET_CONNUSER q_u;
- LSA_R_UNK_GET_CONNUSER r_u;
-
- prs_struct *data = &p->in_data.data;
- prs_struct *rdata = &p->out_data.rdata;
-
- ZERO_STRUCT(q_u);
- ZERO_STRUCT(r_u);
-
- if(!lsa_io_q_unk_get_connuser("", &q_u, data, 0)) {
- DEBUG(0,("api_lsa_unk_get_connuser: failed to unmarshall LSA_Q_UNK_GET_CONNUSER.\n"));
- return False;
- }
-
- r_u.status = _lsa_unk_get_connuser(p, &q_u, &r_u);
-
- /* store the response in the SMB stream */
- if(!lsa_io_r_unk_get_connuser("", &r_u, rdata, 0)) {
- DEBUG(0,("api_lsa_unk_get_connuser: Failed to marshall LSA_R_UNK_GET_CONNUSER.\n"));
- return False;
- }
-
- return True;
-}
-
-/***************************************************************************
\PIPE\ntlsa commands
***************************************************************************/
@@ -313,7 +282,6 @@ static struct api_struct api_lsa_cmds[] =
{ "LSA_OPENSECRET" , LSA_OPENSECRET , api_lsa_open_secret },
{ "LSA_LOOKUPSIDS" , LSA_LOOKUPSIDS , api_lsa_lookup_sids },
{ "LSA_LOOKUPNAMES" , LSA_LOOKUPNAMES , api_lsa_lookup_names },
- { "LSA_UNK_GET_CONNUSER", LSA_UNK_GET_CONNUSER, api_lsa_unk_get_connuser},
{ NULL , 0 , NULL }
};
diff --git a/source/rpc_server/srv_lsa_nt.c b/source/rpc_server/srv_lsa_nt.c
index afcace3f9c8..73626b038c9 100644
--- a/source/rpc_server/srv_lsa_nt.c
+++ b/source/rpc_server/srv_lsa_nt.c
@@ -108,7 +108,7 @@ static int init_dom_ref(DOM_R_REF *ref, char *dom_name, DOM_SID *dom_sid)
***************************************************************************/
static void init_lsa_rid2s(DOM_R_REF *ref, DOM_RID2 *rid2,
- int num_entries, UNISTR2 *name,
+ int num_entries, UNISTR2 name[MAX_LOOKUP_SIDS],
uint32 *mapped_count, BOOL endian)
{
int i;
@@ -238,11 +238,6 @@ static void init_lsa_trans_names(TALLOC_CTX *ctx, DOM_R_REF *ref, LSA_TRANS_NAME
sid_split_rid(&find_sid, &rid);
}
- /* unistr routines take dos codepage strings */
-
- unix_to_dos(dom_name, True);
- unix_to_dos(name, True);
-
dom_idx = init_dom_ref(ref, dom_name, &find_sid);
DEBUG(10,("init_lsa_trans_names: added user '%s\\%s' to "
@@ -337,7 +332,6 @@ uint32 _lsa_query_info(pipes_struct *p, LSA_Q_QUERY_INFO *q_u, LSA_R_QUERY_INFO
{
LSA_INFO_UNION *info = &r_u->dom;
DOM_SID domain_sid;
- fstring dos_domain;
char *name = NULL;
DOM_SID *sid = NULL;
@@ -346,9 +340,6 @@ uint32 _lsa_query_info(pipes_struct *p, LSA_Q_QUERY_INFO *q_u, LSA_R_QUERY_INFO
if (!find_policy_by_hnd(p, &q_u->pol, NULL))
return NT_STATUS_INVALID_HANDLE;
- fstrcpy(dos_domain, global_myworkgroup);
- unix_to_dos(dos_domain, True);
-
switch (q_u->info_class) {
case 0x02:
{
@@ -364,25 +355,24 @@ uint32 _lsa_query_info(pipes_struct *p, LSA_Q_QUERY_INFO *q_u, LSA_R_QUERY_INFO
break;
}
case 0x03:
- /* Request PolicyPrimaryDomainInformation. */
- switch (lp_server_role()) {
+ switch (lp_server_role())
+ {
case ROLE_DOMAIN_PDC:
case ROLE_DOMAIN_BDC:
- name = dos_domain;
+ name = global_myworkgroup;
sid = &global_sam_sid;
break;
case ROLE_DOMAIN_MEMBER:
- name = dos_domain;
- /* We need to return the Domain SID here. */
- if (secrets_fetch_domain_sid(dos_domain,
- &domain_sid))
- sid = &domain_sid;
+ name = global_myname;
+ if (secrets_fetch_domain_sid(global_myworkgroup,
+ &domain_sid))
+ sid = &domain_sid;
else
- return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
+ sid = &global_sam_sid;
break;
case ROLE_STANDALONE:
- name = dos_domain;
- sid = NULL; /* Tell it we're not in a domain. */
+ name = global_myname;
+ sid = NULL;
break;
default:
return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
@@ -390,19 +380,24 @@ uint32 _lsa_query_info(pipes_struct *p, LSA_Q_QUERY_INFO *q_u, LSA_R_QUERY_INFO
init_dom_query(&r_u->dom.id3, name, sid);
break;
case 0x05:
- /* Request PolicyAccountDomainInformation. */
- switch (lp_server_role()) {
+ /* AS/U shows this needs to be the same as level 3. JRA. */
+ switch (lp_server_role())
+ {
case ROLE_DOMAIN_PDC:
case ROLE_DOMAIN_BDC:
- name = dos_domain;
+ name = global_myworkgroup;
sid = &global_sam_sid;
break;
case ROLE_DOMAIN_MEMBER:
- name = dos_domain;
- sid = &global_sam_sid;
+ name = global_myname;
+ if (secrets_fetch_domain_sid(global_myworkgroup,
+ &domain_sid))
+ sid = &domain_sid;
+ else
+ sid = &global_sam_sid;
break;
case ROLE_STANDALONE:
- name = dos_domain;
+ name = global_myname;
sid = &global_sam_sid;
break;
default:
@@ -411,7 +406,8 @@ uint32 _lsa_query_info(pipes_struct *p, LSA_Q_QUERY_INFO *q_u, LSA_R_QUERY_INFO
init_dom_query(&r_u->dom.id5, name, sid);
break;
case 0x06:
- switch (lp_server_role()) {
+ switch (lp_server_role())
+ {
case ROLE_DOMAIN_BDC:
/*
* only a BDC is a backup controller
@@ -519,33 +515,3 @@ uint32 _lsa_open_secret(pipes_struct *p, LSA_Q_OPEN_SECRET *q_u, LSA_R_OPEN_SECR
{
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
-
-uint32 _lsa_unk_get_connuser(pipes_struct *p, LSA_Q_UNK_GET_CONNUSER *q_u, LSA_R_UNK_GET_CONNUSER *r_u)
-{
- fstring username, domname;
- int ulen, dlen;
- user_struct *vuser = get_valid_user_struct(p->vuid);
-
- if (vuser == NULL)
- return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
-
- fstrcpy(username, vuser->user.smb_name);
- fstrcpy(domname, vuser->user.domain);
-
- ulen = strlen(username);
- dlen = strlen(domname);
-
- init_uni_hdr(&r_u->hdr_user_name, ulen);
- r_u->ptr_user_name = 1;
- init_unistr2(&r_u->uni2_user_name, username, ulen);
-
- r_u->unk1 = 1;
-
- init_uni_hdr(&r_u->hdr_dom_name, dlen);
- r_u->ptr_dom_name = 1;
- init_unistr2(&r_u->uni2_dom_name, domname, dlen);
-
- r_u->status = NT_STATUS_NO_PROBLEMO;
-
- return r_u->status;
-}
diff --git a/source/rpc_server/srv_netlog.c b/source/rpc_server/srv_netlog.c
index 4c13ad0c670..01d646bf576 100644
--- a/source/rpc_server/srv_netlog.c
+++ b/source/rpc_server/srv_netlog.c
@@ -60,37 +60,6 @@ static BOOL api_net_req_chal(pipes_struct *p)
}
/*************************************************************************
- api_net_auth:
- *************************************************************************/
-
-static BOOL api_net_auth(pipes_struct *p)
-{
- NET_Q_AUTH q_u;
- NET_R_AUTH r_u;
- prs_struct *data = &p->in_data.data;
- prs_struct *rdata = &p->out_data.rdata;
-
- ZERO_STRUCT(q_u);
- ZERO_STRUCT(r_u);
-
- /* grab the challenge... */
- if(!net_io_q_auth("", &q_u, data, 0)) {
- DEBUG(0,("api_net_auth: Failed to unmarshall NET_Q_AUTH.\n"));
- return False;
- }
-
- r_u.status = _net_auth(p, &q_u, &r_u);
-
- /* store the response in the SMB stream */
- if(!net_io_r_auth("", &r_u, rdata, 0)) {
- DEBUG(0,("api_net_auth: Failed to marshall NET_R_AUTH.\n"));
- return False;
- }
-
- return True;
-}
-
-/*************************************************************************
api_net_auth_2:
*************************************************************************/
@@ -288,7 +257,6 @@ static BOOL api_net_logon_ctrl2(pipes_struct *p)
static struct api_struct api_net_cmds [] =
{
{ "NET_REQCHAL" , NET_REQCHAL , api_net_req_chal },
- { "NET_AUTH" , NET_AUTH , api_net_auth },
{ "NET_AUTH2" , NET_AUTH2 , api_net_auth_2 },
{ "NET_SRVPWSET" , NET_SRVPWSET , api_net_srv_pwset },
{ "NET_SAMLOGON" , NET_SAMLOGON , api_net_sam_logon },
diff --git a/source/rpc_server/srv_netlog_nt.c b/source/rpc_server/srv_netlog_nt.c
index 5a7505869c5..d3d14901ecf 100644
--- a/source/rpc_server/srv_netlog_nt.c
+++ b/source/rpc_server/srv_netlog_nt.c
@@ -68,7 +68,7 @@ uint32 _net_logon_ctrl2(pipes_struct *p, NET_Q_LOGON_CTRL2 *q_u, NET_R_LOGON_CTR
DEBUG(6,("_net_logon_ctrl2: %d\n", __LINE__));
/* set up the Logon Control2 response */
- init_net_r_logon_ctrl2(r_u, q_u->query_level,
+ init_r_logon_ctrl2(r_u, q_u->query_level,
flags, pdc_connection_status, logon_attempts,
tc_status, trusted_domain);
@@ -96,6 +96,18 @@ uint32 _net_trust_dom_list(pipes_struct *p, NET_Q_TRUST_DOM_LIST *q_u, NET_R_TRU
return r_u->status;
}
+/*************************************************************************
+ init_net_r_auth_2:
+ *************************************************************************/
+
+static void init_net_r_auth_2(NET_R_AUTH_2 *r_a,
+ DOM_CHAL *resp_cred, NEG_FLAGS *flgs, int status)
+{
+ memcpy(r_a->srv_chal.data, resp_cred->data, sizeof(resp_cred->data));
+ memcpy(&r_a->srv_flgs, flgs, sizeof(r_a->srv_flgs));
+ r_a->status = status;
+}
+
/***********************************************************************************
init_net_r_srv_pwset:
***********************************************************************************/
@@ -205,62 +217,6 @@ uint32 _net_req_chal(pipes_struct *p, NET_Q_REQ_CHAL *q_u, NET_R_REQ_CHAL *r_u)
}
/*************************************************************************
- init_net_r_auth:
- *************************************************************************/
-
-static void init_net_r_auth(NET_R_AUTH *r_a, DOM_CHAL *resp_cred, int status)
-{
- memcpy(r_a->srv_chal.data, resp_cred->data, sizeof(resp_cred->data));
- r_a->status = status;
-}
-
-/*************************************************************************
- _net_auth
- *************************************************************************/
-
-uint32 _net_auth(pipes_struct *p, NET_Q_AUTH *q_u, NET_R_AUTH *r_u)
-{
- uint32 status = NT_STATUS_NOPROBLEMO;
- DOM_CHAL srv_cred;
- UTIME srv_time;
-
- if (!get_valid_user_struct(p->vuid))
- return NT_STATUS_NO_SUCH_USER;
-
- srv_time.time = 0;
-
- /* check that the client credentials are valid */
- if (cred_assert(&q_u->clnt_chal, p->dc.sess_key, &p->dc.clnt_cred.challenge, srv_time)) {
-
- /* create server challenge for inclusion in the reply */
- cred_create(p->dc.sess_key, &p->dc.srv_cred.challenge, srv_time, &srv_cred);
-
- /* copy the received client credentials for use next time */
- memcpy(p->dc.clnt_cred.challenge.data, q_u->clnt_chal.data, sizeof(q_u->clnt_chal.data));
- memcpy(p->dc.srv_cred .challenge.data, q_u->clnt_chal.data, sizeof(q_u->clnt_chal.data));
- } else {
- status = NT_STATUS_ACCESS_DENIED;
- }
-
- /* set up the LSA AUTH 2 response */
- init_net_r_auth(r_u, &srv_cred, status);
-
- return r_u->status;
-}
-
-/*************************************************************************
- init_net_r_auth_2:
- *************************************************************************/
-
-static void init_net_r_auth_2(NET_R_AUTH_2 *r_a,
- DOM_CHAL *resp_cred, NEG_FLAGS *flgs, int status)
-{
- memcpy(r_a->srv_chal.data, resp_cred->data, sizeof(resp_cred->data));
- memcpy(&r_a->srv_flgs, flgs, sizeof(r_a->srv_flgs));
- r_a->status = status;
-}
-
-/*************************************************************************
_net_auth_2
*************************************************************************/
@@ -426,8 +382,8 @@ static uint32 net_login_interactive(NET_ID_INFO_1 *id1, struct smb_passwd *smb_p
dump_data(100, nt_pwd, 16);
#endif
- SamOEMhash((uchar *)lm_pwd, key, 16);
- SamOEMhash((uchar *)nt_pwd, key, 16);
+ SamOEMhash((uchar *)lm_pwd, key, False);
+ SamOEMhash((uchar *)nt_pwd, key, False);
#ifdef DEBUG_PASSWORD
DEBUG(100,("decrypt of lm owf password:"));
@@ -500,26 +456,26 @@ static uint32 net_login_network(NET_ID_INFO_2 *id2, struct smb_passwd *smb_pass)
uint32 _net_sam_logon(pipes_struct *p, NET_Q_SAM_LOGON *q_u, NET_R_SAM_LOGON *r_u)
{
uint32 status = NT_STATUS_NOPROBLEMO;
- NET_USER_INFO_3 *usr_info = NULL;
- DOM_CRED srv_cred;
- struct smb_passwd *smb_pass = NULL;
- struct sam_passwd *sam_pass = NULL;
- UNISTR2 *uni_samlogon_user = NULL;
- fstring nt_username;
+ NET_USER_INFO_3 *usr_info = NULL;
+ DOM_CRED srv_cred;
+ struct smb_passwd *smb_pass = NULL;
+ struct sam_passwd *sam_pass = NULL;
+ UNISTR2 *uni_samlogon_user = NULL;
+ fstring nt_username;
usr_info = (NET_USER_INFO_3 *)talloc(p->mem_ctx, sizeof(NET_USER_INFO_3));
if (!usr_info)
return NT_STATUS_NO_MEMORY;
ZERO_STRUCTP(usr_info);
- if (!get_valid_user_struct(p->vuid))
- return NT_STATUS_NO_SUCH_USER;
+ if (!get_valid_user_struct(p->vuid))
+ return NT_STATUS_NO_SUCH_USER;
- /* checks and updates credentials. creates reply credentials */
- if (!deal_with_creds(p->dc.sess_key, &p->dc.clnt_cred, &q_u->sam_id.client.cred, &srv_cred))
- return NT_STATUS_INVALID_HANDLE;
- else
- memcpy(&p->dc.srv_cred, &p->dc.clnt_cred, sizeof(p->dc.clnt_cred));
+ /* checks and updates credentials. creates reply credentials */
+ if (!deal_with_creds(p->dc.sess_key, &p->dc.clnt_cred, &q_u->sam_id.client.cred, &srv_cred))
+ return NT_STATUS_INVALID_HANDLE;
+ else
+ memcpy(&p->dc.srv_cred, &p->dc.clnt_cred, sizeof(p->dc.clnt_cred));
r_u->buffer_creds = 1; /* yes, we have valid server credentials */
memcpy(&r_u->srv_creds, &srv_cred, sizeof(r_u->srv_creds));
@@ -530,7 +486,7 @@ uint32 _net_sam_logon(pipes_struct *p, NET_Q_SAM_LOGON *q_u, NET_R_SAM_LOGON *r_
r_u->auth_resp = 1; /* authoritative response */
r_u->switch_value = 3; /* indicates type of validation user info */
- /* find the username */
+ /* find the username */
switch (q_u->sam_id.logon_level) {
case INTERACTIVE_LOGON_TYPE:
@@ -594,15 +550,9 @@ uint32 _net_sam_logon(pipes_struct *p, NET_Q_SAM_LOGON *q_u, NET_R_SAM_LOGON *r_
}
#ifdef WITH_PAM
- become_root();
-#if 0 /* JERRY */
- status = smb_pam_accountcheck(nt_username);
-#else
- status = smb_pam_accountcheck(sam_pass->smb_name);
-#endif
- unbecome_root();
- if (status != NT_STATUS_NOPROBLEMO)
- return status;
+ if (!pam_accountcheck(nt_username)) {
+ return NT_STATUS_ACCOUNT_DISABLED;
+ }
#endif
if (!(smb_pass->acct_ctrl & ACB_PWNOTREQ)) {
diff --git a/source/rpc_server/srv_pipe.c b/source/rpc_server/srv_pipe.c
index d16290985ec..07e4e73142e 100644
--- a/source/rpc_server/srv_pipe.c
+++ b/source/rpc_server/srv_pipe.c
@@ -93,7 +93,7 @@ BOOL create_next_pdu(pipes_struct *p)
*/
if(p->fault_state) {
- setup_fault_pdu(p, 0x1c010002);
+ setup_fault_pdu(p);
return True;
}
@@ -626,7 +626,7 @@ static BOOL setup_bind_nak(pipes_struct *p)
Marshall a fault pdu.
*******************************************************************/
-BOOL setup_fault_pdu(pipes_struct *p, uint32 status)
+BOOL setup_fault_pdu(pipes_struct *p)
{
prs_struct outgoing_pdu;
RPC_HDR fault_hdr;
@@ -658,7 +658,7 @@ BOOL setup_fault_pdu(pipes_struct *p, uint32 status)
memset((char *)&hdr_resp, '\0', sizeof(hdr_resp));
- fault_resp.status = status;
+ fault_resp.status = 0x1c010002;
fault_resp.reserved = 0;
/*
@@ -1204,7 +1204,7 @@ BOOL api_rpcTNP(pipes_struct *p, char *rpc_name,
* and not put the pipe into fault state. JRA.
*/
DEBUG(4, ("unknown\n"));
- setup_fault_pdu(p, 0x1c010002);
+ setup_fault_pdu(p);
return True;
}
diff --git a/source/rpc_server/srv_pipe_hnd.c b/source/rpc_server/srv_pipe_hnd.c
index f91df7c4ef4..893bc8cb884 100644
--- a/source/rpc_server/srv_pipe_hnd.c
+++ b/source/rpc_server/srv_pipe_hnd.c
@@ -570,7 +570,7 @@ static ssize_t process_complete_pdu(pipes_struct *p)
DEBUG(10,("process_complete_pdu: pipe %s in fault state.\n",
p->name ));
set_incoming_fault(p);
- setup_fault_pdu(p, 0x1c010002);
+ setup_fault_pdu(p);
return (ssize_t)data_len;
}
@@ -619,7 +619,7 @@ static ssize_t process_complete_pdu(pipes_struct *p)
if (!reply) {
DEBUG(3,("process_complete_pdu: DCE/RPC fault sent on pipe %s\n", p->pipe_srv_name));
set_incoming_fault(p);
- setup_fault_pdu(p, 0x1c010002);
+ setup_fault_pdu(p);
prs_mem_free(&rpc_in);
} else {
/*
diff --git a/source/rpc_server/srv_samr.c b/source/rpc_server/srv_samr.c
index cd1cc6926fc..63150573139 100644
--- a/source/rpc_server/srv_samr.c
+++ b/source/rpc_server/srv_samr.c
@@ -670,11 +670,6 @@ static BOOL api_samr_set_userinfo(pipes_struct *p)
if (!samr_io_q_set_userinfo("", &q_u, data, 0)) {
DEBUG(0,("api_samr_set_userinfo: Unable to unmarshall SAMR_Q_SET_USERINFO.\n"));
- /* Fix for W2K SP2 */
- if (q_u.switch_value == 0x1a) {
- setup_fault_pdu(p, 0x1c000006);
- return True;
- }
return False;
}
diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c
index 62513c9c134..929a14afeb3 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/rpc_server/srv_samr_nt.c
@@ -775,41 +775,34 @@ static BOOL get_group_alias_entries(DOMAIN_GRP *d_grp, DOM_SID *sid, uint32 star
/* well-known aliases */
if (strequal(sid_str, "S-1-5-32")) {
- char *alias_name;
+ char *name;
while (!lp_hide_local_users() &&
num_entries < max_entries &&
- ((alias_name = builtin_alias_rids[num_entries].name) != NULL)) {
+ ((name = builtin_alias_rids[num_entries].name) != NULL)) {
- fstrcpy(d_grp[num_entries].name, alias_name);
+ fstrcpy(d_grp[num_entries].name, name);
d_grp[num_entries].rid = builtin_alias_rids[num_entries].rid;
num_entries++;
}
} else if (strequal(sid_str, sam_sid_str) && !lp_hide_local_users()) {
- fstring name;
+ char *name;
char *sep;
- struct sys_grent *glist;
- struct sys_grent *grp;
+ struct group *grp;
sep = lp_winbind_separator();
/* local aliases */
/* we return the UNIX groups here. This seems to be the right */
/* thing to do, since NT member servers return their local */
- /* groups in the same situation. */
-
- /* use getgrent_list() to retrieve the list of groups to avoid
- * problems with getgrent possible infinite loop by internal
- * libc grent structures overwrites by called functions */
- grp = glist = getgrent_list();
- if (grp == NULL)
- return False;
+ /* groups in the same situation. */
+ setgrent();
- for (;(num_entries < max_entries) && (grp != NULL); grp = grp->next) {
+ while (num_entries < max_entries && ((grp = getgrent()) != NULL)) {
int i;
uint32 trid;
+ name = grp->gr_name;
- fstrcpy(name,grp->gr_name);
DEBUG(10,("get_group_alias_entries: got group %s\n", name ));
/* Don't return winbind groups as they are not local! */
@@ -827,8 +820,7 @@ static BOOL get_group_alias_entries(DOMAIN_GRP *d_grp, DOM_SID *sid, uint32 star
trid = pdb_gid_to_group_rid(grp->gr_gid);
for( i = 0; i < num_entries; i++)
- if ( d_grp[i].rid == trid )
- break;
+ if ( d_grp[i].rid == trid ) break;
if ( i < num_entries )
continue; /* rid was there, dup! */
@@ -848,7 +840,7 @@ static BOOL get_group_alias_entries(DOMAIN_GRP *d_grp, DOM_SID *sid, uint32 star
num_entries++;
}
- grent_free(glist);
+ endgrent();
}
*p_num_entries = num_entries;
@@ -1039,44 +1031,34 @@ uint32 _samr_query_dispinfo(pipes_struct *p, SAMR_Q_QUERY_DISPINFO *q_u, SAMR_R_
orig_num_entries = num_entries;
ctr = (SAM_DISPINFO_CTR *)talloc(p->mem_ctx,sizeof(SAM_DISPINFO_CTR));
- if (!ctr)
- return NT_STATUS_NO_MEMORY;
/* Now create reply structure */
switch (q_u->switch_level) {
case 0x1:
- if (!(ctr->sam.info1 = (SAM_DISPINFO_1 *)talloc(p->mem_ctx,num_entries*sizeof(SAM_DISPINFO_1))))
- return NT_STATUS_NO_MEMORY;
- r_u->status= init_sam_dispinfo_1(p->mem_ctx,ctr->sam.info1, &num_entries, &data_size, q_u->start_idx, pass);
+ ctr->sam.info1 = (SAM_DISPINFO_1 *)talloc(p->mem_ctx,num_entries*sizeof(SAM_DISPINFO_1));
+ init_sam_dispinfo_1(ctr->sam.info1, &num_entries, &data_size, q_u->start_idx, pass);
break;
case 0x2:
- if (!(ctr->sam.info2 = (SAM_DISPINFO_2 *)talloc(p->mem_ctx,num_entries*sizeof(SAM_DISPINFO_2))))
- return NT_STATUS_NO_MEMORY;
- r_u->status = init_sam_dispinfo_2(p->mem_ctx,ctr->sam.info2, &num_entries, &data_size, q_u->start_idx, pass);
+ ctr->sam.info2 = (SAM_DISPINFO_2 *)talloc(p->mem_ctx,num_entries*sizeof(SAM_DISPINFO_2));
+ init_sam_dispinfo_2(ctr->sam.info2, &num_entries, &data_size, q_u->start_idx, pass);
break;
case 0x3:
- if (!(ctr->sam.info3 = (SAM_DISPINFO_3 *)talloc(p->mem_ctx,num_entries*sizeof(SAM_DISPINFO_3))))
- return NT_STATUS_NO_MEMORY;
- r_u->status = init_sam_dispinfo_3(p->mem_ctx,ctr->sam.info3, &num_entries, &data_size, q_u->start_idx, grps);
+ ctr->sam.info3 = (SAM_DISPINFO_3 *)talloc(p->mem_ctx,num_entries*sizeof(SAM_DISPINFO_3));
+ init_sam_dispinfo_3(ctr->sam.info3, &num_entries, &data_size, q_u->start_idx, grps);
break;
case 0x4:
- if (!(ctr->sam.info4 = (SAM_DISPINFO_4 *)talloc(p->mem_ctx,num_entries*sizeof(SAM_DISPINFO_4))))
- return NT_STATUS_NO_MEMORY;
- r_u->status = init_sam_dispinfo_4(p->mem_ctx,ctr->sam.info4, &num_entries, &data_size, q_u->start_idx, pass);
+ ctr->sam.info4 = (SAM_DISPINFO_4 *)talloc(p->mem_ctx,num_entries*sizeof(SAM_DISPINFO_4));
+ init_sam_dispinfo_4(ctr->sam.info4, &num_entries, &data_size, q_u->start_idx, pass);
break;
case 0x5:
- if (!(ctr->sam.info5 = (SAM_DISPINFO_5 *)talloc(p->mem_ctx,num_entries*sizeof(SAM_DISPINFO_5))))
- return NT_STATUS_NO_MEMORY;
- r_u->status = init_sam_dispinfo_5(p->mem_ctx,ctr->sam.info5, &num_entries, &data_size, q_u->start_idx, grps);
+ ctr->sam.info5 = (SAM_DISPINFO_5 *)talloc(p->mem_ctx,num_entries*sizeof(SAM_DISPINFO_5));
+ init_sam_dispinfo_5(ctr->sam.info5, &num_entries, &data_size, q_u->start_idx, grps);
break;
default:
ctr->sam.info = NULL;
return NT_STATUS_INVALID_INFO_CLASS;
}
- if (r_u->status != NT_STATUS_NO_PROBLEMO)
- return r_u->status;
-
DEBUG(5, ("_samr_query_dispinfo: %d\n", __LINE__));
init_samr_r_query_dispinfo(r_u, num_entries, data_size, q_u->switch_level, ctr, r_u->status);
@@ -1199,7 +1181,7 @@ uint32 _samr_lookup_names(pipes_struct *p, SAMR_Q_LOOKUP_NAMES *q_u, SAMR_R_LOOK
uint32 rid[MAX_SAM_ENTRIES];
enum SID_NAME_USE type[MAX_SAM_ENTRIES];
int i;
- int num_rids = q_u->num_names2;
+ int num_rids = q_u->num_names1;
DOM_SID pol_sid;
r_u->status = NT_STATUS_NOPROBLEMO;
@@ -1219,6 +1201,8 @@ uint32 _samr_lookup_names(pipes_struct *p, SAMR_Q_LOOKUP_NAMES *q_u, SAMR_R_LOOK
DEBUG(5,("_samr_lookup_names: truncating entries to %d\n", num_rids));
}
+ SMB_ASSERT_ARRAY(q_u->uni_name, num_rids);
+
for (i = 0; i < num_rids; i++) {
fstring name;
@@ -1772,7 +1756,7 @@ uint32 _samr_query_dom_info(pipes_struct *p, SAMR_Q_QUERY_DOMAIN_INFO *q_u, SAMR
uint32 _api_samr_create_user(pipes_struct *p, SAMR_Q_CREATE_USER *q_u, SAMR_R_CREATE_USER *r_u)
{
- struct sam_passwd *sam_pass = NULL;
+ struct sam_passwd *sam_pass;
fstring mach_acct;
pstring err_str;
pstring msg_str;
@@ -1837,6 +1821,7 @@ uint32 _api_samr_create_user(pipes_struct *p, SAMR_Q_CREATE_USER *q_u, SAMR_R_CR
sizeof(err_str), msg_str, sizeof(msg_str)))
{
DEBUG(0, ("%s\n", err_str));
+ close_policy_hnd(p, user_pol);
return NT_STATUS_ACCESS_DENIED;
}
@@ -1845,16 +1830,19 @@ uint32 _api_samr_create_user(pipes_struct *p, SAMR_Q_CREATE_USER *q_u, SAMR_R_CR
unbecome_root();
if (sam_pass == NULL) {
/* account doesn't exist: say so */
+ close_policy_hnd(p, user_pol);
return NT_STATUS_ACCESS_DENIED;
}
/* Get the domain SID stored in the domain policy */
if(!get_lsa_policy_samr_sid(p, &dom_pol, &sid)) {
+ close_policy_hnd(p, user_pol);
return NT_STATUS_INVALID_HANDLE;
}
/* append the user's RID to it */
if(!sid_append_rid(&sid, sam_pass->user_rid)) {
+ close_policy_hnd(p, user_pol);
return NT_STATUS_NO_SUCH_USER;
}
@@ -2210,10 +2198,10 @@ static BOOL set_user_info_23(SAM_USER_INFO_23 *id23, uint32 rid)
}
/*******************************************************************
- set_user_info_pw
+ set_user_info_24
********************************************************************/
-static BOOL set_user_info_pw(char *pass, uint32 rid)
+static BOOL set_user_info_24(SAM_USER_INFO_24 *id24, uint32 rid)
{
struct sam_passwd *pwd = getsam21pwrid(rid);
struct sam_passwd new_pwd;
@@ -2230,7 +2218,7 @@ static BOOL set_user_info_pw(char *pass, uint32 rid)
memset(buf, 0, sizeof(pstring));
- if (!decode_pw_buffer(pass, buf, 256, &len, nt_hash, lm_hash))
+ if (!decode_pw_buffer((char*)id24->pass, buf, 256, &len, nt_hash, lm_hash))
return False;
new_pwd.smb_passwd = lm_hash;
@@ -2251,7 +2239,7 @@ static BOOL set_user_info_pw(char *pass, uint32 rid)
memset(buf, 0, sizeof(buf));
- DEBUG(5,("set_user_info_pw: pdb_update_sam_account()\n"));
+ DEBUG(5,("set_user_info_24: pdb_update_sam_account()\n"));
/* update the SAMBA password */
if(!mod_sam21pwd_entry(&new_pwd, True))
@@ -2325,39 +2313,13 @@ uint32 _samr_set_userinfo(pipes_struct *p, SAMR_Q_SET_USERINFO *q_u, SAMR_R_SET_
break;
case 24:
- SamOEMhash(ctr->info.id24->pass, sess_key, 516);
-
- dump_data(100, (char *)ctr->info.id24->pass, 516);
-
- if (!set_user_info_pw((char *)(ctr->info.id24->pass), rid))
+ SamOEMhash(ctr->info.id24->pass, sess_key, 1);
+ if (!set_user_info_24(ctr->info.id24, rid))
return NT_STATUS_ACCESS_DENIED;
break;
- case 25:
-#if 0
- /*
- * Currently we don't really know how to unmarshall
- * the level 25 struct, and the password encryption
- * is different. This is a placeholder for when we
- * do understand it. In the meantime just return INVALID
- * info level and W2K SP2 drops down to level 23... JRA.
- */
-
- SamOEMhash(ctr->info.id25->pass, sess_key, 532);
-
- dump_data(100, (char *)ctr->info.id25->pass, 532);
-
- if (!set_user_info_pw(ctr->info.id25->pass, rid))
- return NT_STATUS_ACCESS_DENIED;
- break;
-#endif
- return NT_STATUS_INVALID_INFO_CLASS;
-
case 23:
- SamOEMhash(ctr->info.id23->pass, sess_key, 516);
-
- dump_data(100, (char *)ctr->info.id23->pass, 516);
-
+ SamOEMhash(ctr->info.id23->pass, sess_key, 1);
if (!set_user_info_23(ctr->info.id23, rid))
return NT_STATUS_ACCESS_DENIED;
break;
diff --git a/source/rpc_server/srv_spoolss.c b/source/rpc_server/srv_spoolss.c
index 63bbc5f87b7..ddd8255139a 100755
--- a/source/rpc_server/srv_spoolss.c
+++ b/source/rpc_server/srv_spoolss.c
@@ -214,38 +214,6 @@ static BOOL api_spoolss_deleteprinter(pipes_struct *p)
/********************************************************************
- * api_spoolss_deleteprinterdriver
- *
- * called from the spoolss dispatcher
- ********************************************************************/
-
-static BOOL api_spoolss_deleteprinterdriver(pipes_struct *p)
-{
- SPOOL_Q_DELETEPRINTERDRIVER q_u;
- SPOOL_R_DELETEPRINTERDRIVER r_u;
- prs_struct *data = &p->in_data.data;
- prs_struct *rdata = &p->out_data.rdata;
-
- ZERO_STRUCT(q_u);
- ZERO_STRUCT(r_u);
-
- if (!spoolss_io_q_deleteprinterdriver("", &q_u, data, 0)) {
- DEBUG(0,("spoolss_io_q_deleteprinterdriver: unable to unmarshall SPOOL_Q_DELETEPRINTERDRIVER.\n"));
- return False;
- }
-
- r_u.status = _spoolss_deleteprinterdriver(p, &q_u, &r_u);
-
- if (!spoolss_io_r_deleteprinterdriver("",&r_u,rdata,0)) {
- DEBUG(0,("spoolss_io_r_deleteprinter: unable to marshall SPOOL_R_DELETEPRINTER.\n"));
- return False;
- }
-
- return True;
-}
-
-
-/********************************************************************
* api_spoolss_rffpcnex
* ReplyFindFirstPrinterChangeNotifyEx
********************************************************************/
@@ -1091,38 +1059,6 @@ static BOOL api_spoolss_enumprintprocessors(pipes_struct *p)
/****************************************************************************
****************************************************************************/
-static BOOL api_spoolss_addprintprocessor(pipes_struct *p)
-{
- SPOOL_Q_ADDPRINTPROCESSOR q_u;
- SPOOL_R_ADDPRINTPROCESSOR r_u;
- prs_struct *data = &p->in_data.data;
- prs_struct *rdata = &p->out_data.rdata;
-
- ZERO_STRUCT(q_u);
- ZERO_STRUCT(r_u);
-
- if(!spoolss_io_q_addprintprocessor("", &q_u, data, 0)) {
- DEBUG(0,("spoolss_io_q_addprintprocessor: unable to unmarshall SPOOL_Q_ADDPRINTPROCESSOR.\n"));
- return False;
- }
-
- /* for now, just indicate success and ignore the add. We'll
- automatically set the winprint processor for printer
- entries later. Used to debug the LexMark Optra S 1855 PCL
- driver --jerry */
- r_u.status = NT_STATUS_NO_PROBLEMO;
-
- if(!spoolss_io_r_addprintprocessor("", &r_u, rdata, 0)) {
- DEBUG(0,("spoolss_io_r_addprintprocessor: unable to marshall SPOOL_R_ADDPRINTPROCESSOR.\n"));
- return False;
- }
-
- return True;
-}
-
-/****************************************************************************
-****************************************************************************/
-
static BOOL api_spoolss_enumprintprocdatatypes(pipes_struct *p)
{
SPOOL_Q_ENUMPRINTPROCDATATYPES q_u;
@@ -1233,7 +1169,6 @@ struct api_struct api_spoolss_cmds[] =
{"SPOOLSS_ENUMPRINTERDRIVERS", SPOOLSS_ENUMPRINTERDRIVERS, api_spoolss_enumprinterdrivers },
{"SPOOLSS_ADDPRINTEREX", SPOOLSS_ADDPRINTEREX, api_spoolss_addprinterex },
{"SPOOLSS_ADDPRINTERDRIVER", SPOOLSS_ADDPRINTERDRIVER, api_spoolss_addprinterdriver },
- {"SPOOLSS_DELETEPRINTERDRIVER", SPOOLSS_DELETEPRINTERDRIVER, api_spoolss_deleteprinterdriver },
{"SPOOLSS_GETPRINTERDRIVERDIRECTORY", SPOOLSS_GETPRINTERDRIVERDIRECTORY, api_spoolss_getprinterdriverdirectory },
{"SPOOLSS_ENUMPRINTERDATA", SPOOLSS_ENUMPRINTERDATA, api_spoolss_enumprinterdata },
{"SPOOLSS_SETPRINTERDATA", SPOOLSS_SETPRINTERDATA, api_spoolss_setprinterdata },
@@ -1242,7 +1177,6 @@ struct api_struct api_spoolss_cmds[] =
{"SPOOLSS_DELETEFORM", SPOOLSS_DELETEFORM, api_spoolss_deleteform },
{"SPOOLSS_GETFORM", SPOOLSS_GETFORM, api_spoolss_getform },
{"SPOOLSS_SETFORM", SPOOLSS_SETFORM, api_spoolss_setform },
- {"SPOOLSS_ADDPRINTPROCESSOR", SPOOLSS_ADDPRINTPROCESSOR, api_spoolss_addprintprocessor },
{"SPOOLSS_ENUMPRINTPROCESSORS", SPOOLSS_ENUMPRINTPROCESSORS, api_spoolss_enumprintprocessors },
{"SPOOLSS_ENUMMONITORS", SPOOLSS_ENUMMONITORS, api_spoolss_enumprintmonitors },
{"SPOOLSS_GETJOB", SPOOLSS_GETJOB, api_spoolss_getjob },
diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c
index 3fcb08891df..aa943996307 100644
--- a/source/rpc_server/srv_spoolss_nt.c
+++ b/source/rpc_server/srv_spoolss_nt.c
@@ -34,13 +34,6 @@ extern pstring global_myname;
#define PRINTER_HANDLE_IS_PRINTER 0
#define PRINTER_HANDLE_IS_PRINTSERVER 1
-struct table_node {
- char *long_archi;
- char *short_archi;
- int version;
-};
-
-
/* structure to store the printer handles */
/* and a reference to what it's pointing to */
/* and the notify info asked about */
@@ -378,7 +371,7 @@ static BOOL set_printer_hnd_printertype(Printer_entry *Printer, char *handlename
}
/* it's a print server */
- if (*handlename=='\\' && *(handlename+1)=='\\' && !strchr(handlename+2, '\\')) {
+ if (!strchr(handlename+2, '\\')) {
DEBUGADD(4,("Printer is a print server\n"));
Printer->printer_type = PRINTER_HANDLE_IS_PRINTSERVER;
}
@@ -414,13 +407,8 @@ static BOOL set_printer_hnd_name(Printer_entry *Printer, char *handlename)
if (Printer->printer_type!=PRINTER_HANDLE_IS_PRINTER)
return False;
- if (*handlename=='\\') {
- aprinter=strchr(handlename+2, '\\');
- aprinter++;
- }
- else {
- aprinter=handlename;
- }
+ aprinter=strchr(handlename+2, '\\');
+ aprinter++;
DEBUGADD(5,("searching for [%s] (len=%d)\n", aprinter, strlen(aprinter)));
@@ -612,7 +600,7 @@ static BOOL alloc_buffer_size(NEW_BUFFER *buffer, uint32 buffer_size)
receive the notify message
****************************************************************************/
-static void srv_spoolss_receive_message(int msg_type, pid_t src, void *buf, size_t len)
+void srv_spoolss_receive_message(int msg_type, pid_t src, void *buf, size_t len)
{
fstring printer;
uint32 status;
@@ -1065,81 +1053,6 @@ uint32 _spoolss_deleteprinter(pipes_struct *p, SPOOL_Q_DELETEPRINTER *q_u, SPOOL
return result;
}
-/*******************************************************************
- * static function to lookup the version id corresponding to an
- * long architecture string
- ******************************************************************/
-static int get_version_id (char * arch)
-{
- int i;
- struct table_node archi_table[]= {
-
- {"Windows 4.0", "WIN40", 0 },
- {"Windows NT x86", "W32X86", 2 },
- {"Windows NT R4000", "W32MIPS", 2 },
- {"Windows NT Alpha_AXP", "W32ALPHA", 2 },
- {"Windows NT PowerPC", "W32PPC", 2 },
- {NULL, "", -1 }
- };
-
- for (i=0; archi_table[i].long_archi != NULL; i++)
- {
- if (strcmp(arch, archi_table[i].long_archi) == 0)
- return (archi_table[i].version);
- }
-
- return -1;
-}
-
-/********************************************************************
- * _spoolss_deleteprinterdriver
- *
- * We currently delete the driver for the architecture only.
- * This can leave the driver for other archtectures. However,
- * since every printer associates a "Windows NT x86" driver name
- * and we cannot delete that one while it is in use, **and** since
- * it is impossible to assign a driver to a Samba printer without
- * having the "Windows NT x86" driver installed,...
- *
- * ....we should not get into trouble here.
- *
- * --jerry
- ********************************************************************/
-
-uint32 _spoolss_deleteprinterdriver(pipes_struct *p, SPOOL_Q_DELETEPRINTERDRIVER *q_u,
- SPOOL_R_DELETEPRINTERDRIVER *r_u)
-{
- fstring driver;
- fstring arch;
- NT_PRINTER_DRIVER_INFO_LEVEL info;
- int version;
-
- unistr2_to_ascii(driver, &q_u->driver, sizeof(driver)-1 );
- unistr2_to_ascii(arch, &q_u->arch, sizeof(arch)-1 );
-
- /* check that we have a valid driver name first */
- if ((version=get_version_id(arch)) == -1) {
- /* this is what NT returns */
- return ERROR_INVALID_ENVIRONMENT;
- }
-
- ZERO_STRUCT(info);
- if (get_a_printer_driver (&info, 3, driver, arch, version) != 0) {
- /* this is what NT returns */
- return ERROR_UNKNOWN_PRINTER_DRIVER;
- }
-
-
- if (printer_driver_in_use(arch, driver))
- {
- /* this is what NT returns */
- return ERROR_PRINTER_DRIVER_IN_USE;
- }
-
- return delete_printer_driver(info.info_3);
-}
-
-
/********************************************************************
GetPrinterData on a printer server Handle.
********************************************************************/
@@ -1353,12 +1266,7 @@ static BOOL srv_spoolss_replyopenprinter(char *printer, uint32 localprinter, uin
* and connect to the IPC$ share anonumously
*/
if (smb_connections==0) {
- fstring unix_printer;
-
- fstrcpy(unix_printer, printer+2); /* the +2 is to strip the leading 2 backslashs */
- dos_to_unix(unix_printer, True);
-
- if(!spoolss_connect_to_client(&cli, unix_printer))
+ if(!spoolss_connect_to_client(&cli, printer+2)) /* the +2 is to strip the leading 2 backslashs */
return False;
message_register(MSG_PRINTER_NOTIFY, srv_spoolss_receive_message);
@@ -4121,35 +4029,35 @@ static uint32 update_printer_sec(POLICY_HND *handle, uint32 level,
nt_printing_getsec(p->mem_ctx, Printer->dev.handlename, &old_secdesc_ctr);
if (DEBUGLEVEL >= 10) {
- SEC_ACL *the_acl;
+ SEC_ACL *acl;
int i;
- the_acl = old_secdesc_ctr->sec->dacl;
+ acl = old_secdesc_ctr->sec->dacl;
DEBUG(10, ("old_secdesc_ctr for %s has %d aces:\n",
- PRINTERNAME(snum), the_acl->num_aces));
+ PRINTERNAME(snum), acl->num_aces));
- for (i = 0; i < the_acl->num_aces; i++) {
+ for (i = 0; i < acl->num_aces; i++) {
fstring sid_str;
- sid_to_string(sid_str, &the_acl->ace[i].sid);
+ sid_to_string(sid_str, &acl->ace[i].sid);
DEBUG(10, ("%s 0x%08x\n", sid_str,
- the_acl->ace[i].info.mask));
+ acl->ace[i].info.mask));
}
- the_acl = secdesc_ctr->sec->dacl;
+ acl = secdesc_ctr->sec->dacl;
- if (the_acl) {
+ if (acl) {
DEBUG(10, ("secdesc_ctr for %s has %d aces:\n",
- PRINTERNAME(snum), the_acl->num_aces));
+ PRINTERNAME(snum), acl->num_aces));
- for (i = 0; i < the_acl->num_aces; i++) {
+ for (i = 0; i < acl->num_aces; i++) {
fstring sid_str;
- sid_to_string(sid_str, &the_acl->ace[i].sid);
+ sid_to_string(sid_str, &acl->ace[i].sid);
DEBUG(10, ("%s 0x%08x\n", sid_str,
- the_acl->ace[i].info.mask));
+ acl->ace[i].info.mask));
}
} else {
DEBUG(10, ("dacl for secdesc_ctr is NULL\n"));
@@ -4213,6 +4121,7 @@ static BOOL check_printer_ok(NT_PRINTER_INFO_LEVEL_2 *info, int snum)
static BOOL add_printer_hook(NT_PRINTER_INFO_LEVEL *printer)
{
char *cmd = lp_addprinter_cmd();
+ char *path;
char **qlines;
pstring command;
pstring driverlocation;
@@ -4220,6 +4129,11 @@ static BOOL add_printer_hook(NT_PRINTER_INFO_LEVEL *printer)
int ret;
int fd;
+ if (*lp_pathname(lp_servicenumber(PRINTERS_NAME)))
+ path = lp_pathname(lp_servicenumber(PRINTERS_NAME));
+ else
+ path = lp_lockdir();
+
/* build driver path... only 9X architecture is needed for legacy reasons */
slprintf(driverlocation, sizeof(driverlocation)-1, "\\\\%s\\print$\\WIN40\\0",
global_myname);
@@ -5391,7 +5305,7 @@ uint32 _spoolss_getform(pipes_struct *p, SPOOL_Q_GETFORM *q_u, SPOOL_R_GETFORM *
FORM_1 form_1;
fstring form_name;
int buffer_size=0;
- int numofforms=0, i=0;
+ int numofforms=0, i = -1;
/* that's an [in out] buffer */
spoolss_move_buffer(q_u->buffer, &r_u->buffer);
@@ -5488,12 +5402,18 @@ static uint32 enumports_level_1(NEW_BUFFER *buffer, uint32 offered, uint32 *need
if (*lp_enumports_cmd()) {
char *cmd = lp_enumports_cmd();
+ char *path;
char **qlines;
pstring command;
int numlines;
int ret;
int fd;
+ if (*lp_pathname(lp_servicenumber(PRINTERS_NAME)))
+ path = lp_pathname(lp_servicenumber(PRINTERS_NAME));
+ else
+ path = lp_lockdir();
+
slprintf(command, sizeof(command)-1, "%s \"%d\"", cmd, 1);
DEBUG(10,("Running [%s]\n", command));
@@ -5590,7 +5510,7 @@ static uint32 enumports_level_2(NEW_BUFFER *buffer, uint32 offered, uint32 *need
else
path = lp_lockdir();
- slprintf(tmp_file, sizeof(tmp_file)-1, "%s/smbcmd.%u.", path, (unsigned int)sys_getpid());
+ slprintf(tmp_file, sizeof(tmp_file)-1, "%s/smbcmd.%d.", path, sys_getpid());
slprintf(command, sizeof(command)-1, "%s \"%d\"", cmd, 2);
unlink(tmp_file);
diff --git a/source/rpc_server/srv_srvsvc.c b/source/rpc_server/srv_srvsvc.c
index fe008d0dde8..d4d5e1bfe86 100644
--- a/source/rpc_server/srv_srvsvc.c
+++ b/source/rpc_server/srv_srvsvc.c
@@ -56,33 +56,6 @@ static BOOL api_srv_net_srv_get_info(pipes_struct *p)
}
/*******************************************************************
- api_srv_net_srv_get_info
-********************************************************************/
-
-static BOOL api_srv_net_srv_set_info(pipes_struct *p)
-{
- SRV_Q_NET_SRV_SET_INFO q_u;
- SRV_R_NET_SRV_SET_INFO r_u;
- prs_struct *data = &p->in_data.data;
- prs_struct *rdata = &p->out_data.rdata;
-
- ZERO_STRUCT(q_u);
- ZERO_STRUCT(r_u);
-
- /* grab the net server set info */
- if (!srv_io_q_net_srv_set_info("", &q_u, data, 0))
- return False;
-
- r_u.status = _srv_net_srv_set_info(p, &q_u, &r_u);
-
- /* store the response in the SMB stream */
- if (!srv_io_r_net_srv_set_info("", &r_u, rdata, 0))
- return False;
-
- return True;
-}
-
-/*******************************************************************
api_srv_net_file_enum
********************************************************************/
@@ -372,126 +345,6 @@ static BOOL api_srv_net_remote_tod(pipes_struct *p)
}
/*******************************************************************
- RPC to enumerate disks available on a server e.g. C:, D: ...
-*******************************************************************/
-
-static BOOL api_srv_net_disk_enum(pipes_struct *p)
-{
- SRV_Q_NET_DISK_ENUM q_u;
- SRV_R_NET_DISK_ENUM r_u;
- prs_struct *data = &p->in_data.data;
- prs_struct *rdata = &p->out_data.rdata;
-
- ZERO_STRUCT(q_u);
- ZERO_STRUCT(r_u);
-
- /* Unmarshall the net server disk enum. */
- if(!srv_io_q_net_disk_enum("", &q_u, data, 0)) {
- DEBUG(0,("api_srv_net_disk_enum: Failed to unmarshall SRV_Q_NET_DISK_ENUM.\n"));
- return False;
- }
-
- r_u.status = _srv_net_disk_enum(p, &q_u, &r_u);
-
- if(!srv_io_r_net_disk_enum("", &r_u, rdata, 0)) {
- DEBUG(0,("api_srv_net_disk_enum: Failed to marshall SRV_R_NET_DISK_ENUM.\n"));
- return False;
- }
-
- return True;
-}
-
-/*******************************************************************
- NetValidateName (opnum 0x21)
-*******************************************************************/
-
-static BOOL api_srv_net_name_validate(pipes_struct *p)
-{
- SRV_Q_NET_NAME_VALIDATE q_u;
- SRV_R_NET_NAME_VALIDATE r_u;
- prs_struct *data = &p->in_data.data;
- prs_struct *rdata = &p->out_data.rdata;
-
- ZERO_STRUCT(q_u);
- ZERO_STRUCT(r_u);
-
- /* Unmarshall the net server disk enum. */
- if(!srv_io_q_net_name_validate("", &q_u, data, 0)) {
- DEBUG(0,("api_srv_net_name_validate: Failed to unmarshall SRV_Q_NET_NAME_VALIDATE.\n"));
- return False;
- }
-
- r_u.status = _srv_net_name_validate(p, &q_u, &r_u);
-
- if(!srv_io_r_net_name_validate("", &r_u, rdata, 0)) {
- DEBUG(0,("api_srv_net_name_validate: Failed to marshall SRV_R_NET_NAME_VALIDATE.\n"));
- return False;
- }
-
- return True;
-}
-
-/*******************************************************************
- NetFileQuerySecdesc (opnum 0x27)
-*******************************************************************/
-
-static BOOL api_srv_net_file_query_secdesc(pipes_struct *p)
-{
- SRV_Q_NET_FILE_QUERY_SECDESC q_u;
- SRV_R_NET_FILE_QUERY_SECDESC r_u;
- prs_struct *data = &p->in_data.data;
- prs_struct *rdata = &p->out_data.rdata;
-
- ZERO_STRUCT(q_u);
- ZERO_STRUCT(r_u);
-
- /* Unmarshall the net file get info from Win9x */
- if(!srv_io_q_net_file_query_secdesc("", &q_u, data, 0)) {
- DEBUG(0,("api_srv_net_file_query_secdesc: Failed to unmarshall SRV_Q_NET_FILE_QUERY_SECDESC.\n"));
- return False;
- }
-
- r_u.status = _srv_net_file_query_secdesc(p, &q_u, &r_u);
-
- if(!srv_io_r_net_file_query_secdesc("", &r_u, rdata, 0)) {
- DEBUG(0,("api_srv_net_file_query_secdesc: Failed to marshall SRV_R_NET_FILE_QUERY_SECDESC.\n"));
- return False;
- }
-
- return True;
-}
-
-/*******************************************************************
- NetFileSetSecdesc (opnum 0x28)
-*******************************************************************/
-
-static BOOL api_srv_net_file_set_secdesc(pipes_struct *p)
-{
- SRV_Q_NET_FILE_SET_SECDESC q_u;
- SRV_R_NET_FILE_SET_SECDESC r_u;
- prs_struct *data = &p->in_data.data;
- prs_struct *rdata = &p->out_data.rdata;
-
- ZERO_STRUCT(q_u);
- ZERO_STRUCT(r_u);
-
- /* Unmarshall the net file set info from Win9x */
- if(!srv_io_q_net_file_set_secdesc("", &q_u, data, 0)) {
- DEBUG(0,("api_srv_net_file_set_secdesc: Failed to unmarshall SRV_Q_NET_FILE_SET_SECDESC.\n"));
- return False;
- }
-
- r_u.status = _srv_net_file_set_secdesc(p, &q_u, &r_u);
-
- if(!srv_io_r_net_file_set_secdesc("", &r_u, rdata, 0)) {
- DEBUG(0,("api_srv_net_file_set_secdesc: Failed to marshall SRV_R_NET_FILE_SET_SECDESC.\n"));
- return False;
- }
-
- return True;
-}
-
-/*******************************************************************
\PIPE\srvsvc commands
********************************************************************/
@@ -507,12 +360,7 @@ struct api_struct api_srv_cmds[] =
{ "SRV_NET_SHARE_SET_INFO", SRV_NET_SHARE_SET_INFO, api_srv_net_share_set_info },
{ "SRV_NETFILEENUM" , SRV_NETFILEENUM , api_srv_net_file_enum },
{ "SRV_NET_SRV_GET_INFO" , SRV_NET_SRV_GET_INFO , api_srv_net_srv_get_info },
- { "SRV_NET_SRV_SET_INFO" , SRV_NET_SRV_SET_INFO , api_srv_net_srv_set_info },
{ "SRV_NET_REMOTE_TOD" , SRV_NET_REMOTE_TOD , api_srv_net_remote_tod },
- { "SRV_NET_DISK_ENUM" , SRV_NET_DISK_ENUM , api_srv_net_disk_enum },
- { "SRV_NET_NAME_VALIDATE" , SRV_NET_NAME_VALIDATE , api_srv_net_name_validate},
- { "SRV_NETFILEQUERYSECDESC",SRV_NETFILEQUERYSECDESC,api_srv_net_file_query_secdesc},
- { "SRV_NETFILESETSECDESC" , SRV_NETFILESETSECDESC , api_srv_net_file_set_secdesc},
{ NULL , 0 , NULL }
};
diff --git a/source/rpc_server/srv_srvsvc_nt.c b/source/rpc_server/srv_srvsvc_nt.c
index 39e482dc3cb..887c100d577 100644
--- a/source/rpc_server/srv_srvsvc_nt.c
+++ b/source/rpc_server/srv_srvsvc_nt.c
@@ -77,14 +77,6 @@ static void init_srv_share_info_2(SRV_SHARE_INFO_2 *sh2, int snum)
pstring_sub(remark,"%S",lp_servicename(snum));
pstrcpy(path, "C:");
pstrcat(path, lp_pathname(snum));
-
- /*
- * Change / to \\ so that win2k will see it as a valid path. This was added to
- * enable use of browsing in win2k add share dialog.
- */
-
- string_replace(path, '/', '\\');
-
pstrcpy(passwd, "");
len_net_name = strlen(net_name);
@@ -125,7 +117,7 @@ BOOL share_info_db_init(void)
char *vstring = "INFO/version";
if (share_tdb && local_pid == sys_getpid()) return True;
- share_tdb = tdb_open_log(lock_path("share_info.tdb"), 0, 0, O_RDWR|O_CREAT, 0600);
+ share_tdb = tdb_open(lock_path("share_info.tdb"), 0, 0, O_RDWR|O_CREAT, 0600);
if (!share_tdb) {
DEBUG(0,("Failed to open share info database %s (%s)\n",
lock_path("share_info.tdb"), strerror(errno) ));
@@ -371,14 +363,6 @@ static void init_srv_share_info_502(TALLOC_CTX *ctx, SRV_SHARE_INFO_502 *sh502,
pstring_sub(remark,"%S",lp_servicename(snum));
pstrcpy(path, "C:");
pstrcat(path, lp_pathname(snum));
-
- /*
- * Change / to \\ so that win2k will see it as a valid path. This was added to
- * enable use of browsing in win2k add share dialog.
- */
-
- string_replace(path, '/', '\\');
-
pstrcpy(passwd, "");
len_net_name = strlen(net_name);
@@ -395,7 +379,7 @@ static void init_srv_share_info_502(TALLOC_CTX *ctx, SRV_SHARE_INFO_502 *sh502,
sd = get_share_security(ctx, snum, &sd_size);
init_srv_share_info502(&sh502->info_502, net_name, type, remark, 0, 0xffffffff, 1, path, passwd, sd, sd_size);
- init_srv_share_info502_str(&sh502->info_502_str, &sh502->info_502, net_name, remark, path, passwd, sd, sd_size);
+ init_srv_share_info502_str(&sh502->info_502_str, net_name, remark, path, passwd, sd, sd_size);
}
/***************************************************************************
@@ -1048,28 +1032,6 @@ uint32 _srv_net_srv_get_info(pipes_struct *p, SRV_Q_NET_SRV_GET_INFO *q_u, SRV_R
}
/*******************************************************************
-net server set info
-********************************************************************/
-
-uint32 _srv_net_srv_set_info(pipes_struct *p, SRV_Q_NET_SRV_SET_INFO *q_u, SRV_R_NET_SRV_SET_INFO *r_u)
-{
- /* NT gives "Windows NT error 0xc00000022" if we return
- NT_STATUS_ACCESS_DENIED here so just pretend everything is OK. */
-
- uint32 status = NT_STATUS_NOPROBLEMO;
-
- DEBUG(5,("srv_net_srv_set_info: %d\n", __LINE__));
-
- /* Set up the net server set info structure. */
-
- init_srv_r_net_srv_set_info(r_u, 0x0, status);
-
- DEBUG(5,("srv_net_srv_set_info: %d\n", __LINE__));
-
- return r_u->status;
-}
-
-/*******************************************************************
net file enum
********************************************************************/
@@ -1584,297 +1546,3 @@ uint32 _srv_net_remote_tod(pipes_struct *p, SRV_Q_NET_REMOTE_TOD *q_u, SRV_R_NET
return r_u->status;
}
-
-/***********************************************************************************
- Win9x NT tools get security descriptor.
-***********************************************************************************/
-
-uint32 _srv_net_file_query_secdesc(pipes_struct *p, SRV_Q_NET_FILE_QUERY_SECDESC *q_u,
- SRV_R_NET_FILE_QUERY_SECDESC *r_u)
-{
- SEC_DESC *psd = NULL;
- size_t sd_size;
- fstring null_pw;
- pstring filename;
- pstring qualname;
- files_struct *fsp = NULL;
- SMB_STRUCT_STAT st;
- BOOL bad_path;
- int access_mode;
- int action;
- int ecode;
- struct current_user user;
- fstring user_name;
- connection_struct *conn = NULL;
-
- ZERO_STRUCT(st);
-
- r_u->status = NT_STATUS_NOPROBLEMO;
-
- unistr2_to_ascii(qualname, &q_u->uni_qual_name, sizeof(qualname));
-
- /* Null password is ok - we are already an authenticated user... */
- *null_pw = '\0';
-
- get_current_user(&user, p);
- fstrcpy(user_name, uidtoname(user.uid));
-
- conn = make_connection(qualname, user_name, null_pw, 0, "A:", user.vuid, &ecode);
-
- if (conn == NULL) {
- DEBUG(3,("_srv_net_file_query_secdesc: Unable to connect to %s\n", qualname));
- r_u->status = (uint32)ecode;
- goto error_exit;
- }
-
- unistr2_to_ascii(filename, &q_u->uni_file_name, sizeof(filename));
- unix_convert(filename, conn, NULL, &bad_path, &st);
- fsp = open_file_shared(conn, filename, &st, SET_OPEN_MODE(DOS_OPEN_RDONLY),
- (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), 0, 0, &access_mode, &action);
-
- if (!fsp) {
- /* Perhaps it is a directory */
- if (errno == EISDIR)
- fsp = open_directory(conn, filename, &st,
- (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), 0, &action);
-
- if (!fsp) {
- DEBUG(3,("_srv_net_file_query_secdesc: Unable to open file %s\n", filename));
- r_u->status = ERROR_ACCESS_DENIED;
- goto error_exit;
- }
- }
-
- sd_size = conn->vfs_ops.get_nt_acl(fsp, fsp->fsp_name, &psd);
-
- if (sd_size == 0) {
- DEBUG(3,("_srv_net_file_query_secdesc: Unable to get NT ACL for file %s\n", filename));
- r_u->status = ERROR_ACCESS_DENIED;
- goto error_exit;
- }
-
- r_u->ptr_response = 1;
- r_u->size_response = sd_size;
- r_u->ptr_secdesc = 1;
- r_u->size_secdesc = sd_size;
- r_u->sec_desc = psd;
-
- psd->dacl->revision = (uint16) NT4_ACL_REVISION;
-
- close_file(fsp, True);
- file_free(fsp);
-
- close_cnum(conn, user.vuid);
- return r_u->status;
-
- error_exit:
-
- if(fsp) {
- close_file(fsp, True);
- file_free(fsp);
- }
-
- if (conn)
- close_cnum(conn, user.vuid);
-
- return r_u->status;
-}
-
-/***********************************************************************************
- Win9x NT tools set security descriptor.
-***********************************************************************************/
-
-uint32 _srv_net_file_set_secdesc(pipes_struct *p, SRV_Q_NET_FILE_SET_SECDESC *q_u,
- SRV_R_NET_FILE_SET_SECDESC *r_u)
-{
- BOOL ret;
- pstring filename;
- pstring qualname;
- fstring null_pw;
- files_struct *fsp = NULL;
- SMB_STRUCT_STAT st;
- BOOL bad_path;
- int access_mode;
- int action;
- int ecode;
- struct current_user user;
- fstring user_name;
- connection_struct *conn = NULL;
-
- ZERO_STRUCT(st);
-
- r_u->status = NT_STATUS_NOPROBLEMO;
-
- unistr2_to_ascii(qualname, &q_u->uni_qual_name, sizeof(qualname));
-
- /* Null password is ok - we are already an authenticated user... */
- *null_pw = '\0';
-
- get_current_user(&user, p);
- fstrcpy(user_name, uidtoname(user.uid));
-
- conn = make_connection(qualname, user_name, null_pw, 0, "A:", user.vuid, &ecode);
-
- if (conn == NULL) {
- DEBUG(3,("_srv_net_file_set_secdesc: Unable to connect to %s\n", qualname));
- r_u->status = (uint32)ecode;
- goto error_exit;
- }
-
- unistr2_to_ascii(filename, &q_u->uni_file_name, sizeof(filename));
- unix_convert(filename, conn, NULL, &bad_path, &st);
-
- fsp = open_file_shared(conn, filename, &st, SET_OPEN_MODE(DOS_OPEN_RDWR),
- (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), 0, 0, &access_mode, &action);
-
- if (!fsp) {
- /* Perhaps it is a directory */
- if (errno == EISDIR)
- fsp = open_directory(conn, filename, &st,
- (FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), 0, &action);
-
- if (!fsp) {
- DEBUG(3,("_srv_net_file_set_secdesc: Unable to open file %s\n", filename));
- r_u->status = ERROR_ACCESS_DENIED;
- goto error_exit;
- }
- }
-
- ret = conn->vfs_ops.set_nt_acl(fsp, fsp->fsp_name, q_u->sec_info, q_u->sec_desc);
-
- if (ret == False) {
- DEBUG(3,("_srv_net_file_set_secdesc: Unable to set NT ACL on file %s\n", filename));
- r_u->status = ERROR_ACCESS_DENIED;
- goto error_exit;
- }
-
- close_file(fsp, True);
- file_free(fsp);
- close_cnum(conn, user.vuid);
- return r_u->status;
-
- error_exit:
-
- if(fsp) {
- close_file(fsp, True);
- file_free(fsp);
- }
-
- if (conn)
- close_cnum(conn, user.vuid);
-
- return r_u->status;
-}
-
-/***********************************************************************************
- It may be that we want to limit users to creating shares on certain areas of the UNIX file area.
- We could define areas by mapping Windows style disks to points on the UNIX directory hierarchy.
- These disks would the disks listed by this function.
- Users could then create shares relative to these disks. Watch out for moving these disks around.
- "Nigel Williams" <nigel@veritas.com>.
-***********************************************************************************/
-
-const char *server_disks[] = {"C:"};
-
-static uint32 get_server_disk_count(void)
-{
- return sizeof(server_disks)/sizeof(server_disks[0]);
-}
-
-static uint32 init_server_disk_enum(uint32 *resume)
-{
- uint32 server_disk_count = get_server_disk_count();
-
- /*resume can be an offset into the list for now*/
-
- if(*resume & 0x80000000)
- *resume = 0;
-
- if(*resume > server_disk_count)
- *resume = server_disk_count;
-
- return server_disk_count - *resume;
-}
-
-static const char *next_server_disk_enum(uint32 *resume)
-{
- const char *disk;
-
- if(init_server_disk_enum(resume) == 0)
- return NULL;
-
- disk = server_disks[*resume];
-
- (*resume)++;
-
- DEBUG(10, ("next_server_disk_enum: reporting disk %s. resume handle %d.\n", disk, *resume));
-
- return disk;
-}
-
-uint32 _srv_net_disk_enum(pipes_struct *p, SRV_Q_NET_DISK_ENUM *q_u, SRV_R_NET_DISK_ENUM *r_u)
-{
- uint32 i;
- const char *disk_name;
- uint32 resume=get_enum_hnd(&q_u->enum_hnd);
-
- r_u->status=NT_STATUS_NOPROBLEMO;
-
- r_u->total_entries = init_server_disk_enum(&resume);
-
- r_u->disk_enum_ctr.unknown = 0;
-
- r_u->disk_enum_ctr.disk_info_ptr = (uint32) r_u->disk_enum_ctr.disk_info;
-
- /*allow one DISK_INFO for null terminator*/
-
- for(i = 0; i < MAX_SERVER_DISK_ENTRIES -1 && (disk_name = next_server_disk_enum(&resume)); i++) {
-
- r_u->disk_enum_ctr.entries_read++;
-
- /*copy disk name into a unicode string*/
-
- init_unistr3(&r_u->disk_enum_ctr.disk_info[i].disk_name, disk_name);
- }
-
- /*add a terminating null string. Is this there if there is more data to come?*/
-
- r_u->disk_enum_ctr.entries_read++;
-
- init_unistr3(&r_u->disk_enum_ctr.disk_info[i].disk_name, "");
-
- init_enum_hnd(&r_u->enum_hnd, resume);
-
- return r_u->status;
-}
-
-uint32 _srv_net_name_validate(pipes_struct *p, SRV_Q_NET_NAME_VALIDATE *q_u, SRV_R_NET_NAME_VALIDATE *r_u)
-{
- int snum;
- fstring share_name;
-
- r_u->status=NT_STATUS_NOPROBLEMO;
-
- switch(q_u->type) {
-
- case 0x9:
-
- /*check if share name is ok*/
- /*also check if we already have a share with this name*/
-
- unistr2_to_ascii(share_name, &q_u->uni_name, sizeof(share_name));
- snum = find_service(share_name);
-
- /* Share already exists. */
- if (snum >= 0)
- r_u->status = NT_STATUS_OBJECT_NAME_INVALID;
- break;
-
- default:
- /*unsupported type*/
- r_u->status = ERROR_INVALID_LEVEL;
- break;
- }
-
- return r_u->status;
-}
diff --git a/source/rpc_server/srv_util.c b/source/rpc_server/srv_util.c
index 8f15b7f117b..f107f1f2af9 100644
--- a/source/rpc_server/srv_util.c
+++ b/source/rpc_server/srv_util.c
@@ -162,12 +162,8 @@ void get_domain_user_groups(char *domain_groups, char *user)
if (domain_groups == NULL || user == NULL) return;
-#if 0 /* removed by --jerry */
/* any additional groups this user is in. e.g power users */
pstrcpy(domain_groups, lp_domain_groups());
-#else
- *domain_groups = '\0';
-#endif
/* can only be a user or a guest. cannot be guest _and_ admin */
if (user_in_list(user, lp_domain_guest_group()))
diff --git a/source/rpcclient/cmd_lsarpc.c b/source/rpcclient/cmd_lsarpc.c
index 153d5366e00..a574f2e128a 100644
--- a/source/rpcclient/cmd_lsarpc.c
+++ b/source/rpcclient/cmd_lsarpc.c
@@ -34,19 +34,12 @@ static uint32 cmd_lsa_query_info_policy(struct cli_state *cli, int argc, char **
DOM_SID dom_sid;
fstring sid_str, domain_name;
uint32 info_class = 3;
- TALLOC_CTX *mem_ctx;
if (argc > 2) {
printf("Usage: %s [info_class]\n", argv[0]);
return 0;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_lsa_query_info_poicy: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
if (argc == 2) {
info_class = atoi(argv[1]);
}
@@ -57,7 +50,7 @@ static uint32 cmd_lsa_query_info_policy(struct cli_state *cli, int argc, char **
return NT_STATUS_UNSUCCESSFUL;
}
- if ((result = cli_lsa_open_policy(cli, mem_ctx, True,
+ if ((result = cli_lsa_open_policy(cli, True,
SEC_RIGHTS_MAXIMUM_ALLOWED,
&pol)) != NT_STATUS_NOPROBLEMO) {
goto done;
@@ -67,7 +60,7 @@ static uint32 cmd_lsa_query_info_policy(struct cli_state *cli, int argc, char **
/* Lookup info policy */
- if ((result = cli_lsa_query_info_policy(cli, mem_ctx, &pol, info_class,
+ if ((result = cli_lsa_query_info_policy(cli, &pol, info_class,
domain_name, &dom_sid))
!= NT_STATUS_NOPROBLEMO) {
goto done;
@@ -80,11 +73,10 @@ static uint32 cmd_lsa_query_info_policy(struct cli_state *cli, int argc, char **
done:
if (got_policy_hnd) {
- cli_lsa_close(cli, mem_ctx, &pol);
+ cli_lsa_close(cli, &pol);
}
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
@@ -99,19 +91,12 @@ static uint32 cmd_lsa_lookup_names(struct cli_state *cli, int argc, char **argv)
DOM_SID *sids;
uint32 *types;
int num_names, i;
- TALLOC_CTX *mem_ctx;
if (argc == 1) {
printf("Usage: %s [name1 [name2 [...]]]\n", argv[0]);
return 0;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_lsa_lookup_names: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_LSARPC)) {
fprintf (stderr, "Could not initialize samr pipe!\n");
@@ -119,7 +104,7 @@ static uint32 cmd_lsa_lookup_names(struct cli_state *cli, int argc, char **argv)
}
- if ((result = cli_lsa_open_policy(cli, mem_ctx, True,
+ if ((result = cli_lsa_open_policy(cli, True,
SEC_RIGHTS_MAXIMUM_ALLOWED,
&pol)) != NT_STATUS_NOPROBLEMO) {
goto done;
@@ -129,8 +114,8 @@ static uint32 cmd_lsa_lookup_names(struct cli_state *cli, int argc, char **argv)
/* Lookup the names */
- if ((result = cli_lsa_lookup_names(cli, mem_ctx, &pol, argc - 1,
- &argv[1], &sids, &types, &num_names) !=
+ if ((result = cli_lsa_lookup_names(
+ cli, &pol, argc - 1, &argv[1], &sids, &types, &num_names) !=
NT_STATUS_NOPROBLEMO)) {
goto done;
}
@@ -145,19 +130,16 @@ static uint32 cmd_lsa_lookup_names(struct cli_state *cli, int argc, char **argv)
types[i]);
}
-#if 0 /* JERRY */
safe_free(sids);
safe_free(types);
-#endif
done:
if (got_policy_hnd) {
- cli_lsa_close(cli, mem_ctx, &pol);
+ cli_lsa_close(cli, &pol);
}
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
@@ -173,26 +155,19 @@ static uint32 cmd_lsa_lookup_sids(struct cli_state *cli, int argc, char **argv)
char **names;
uint32 *types;
int num_names, i;
- TALLOC_CTX *mem_ctx;
if (argc == 1) {
printf("Usage: %s [sid1 [sid2 [...]]]\n", argv[0]);
return 0;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_lsa_lookup_sids: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_LSARPC)) {
fprintf (stderr, "Could not initialize samr pipe!\n");
return NT_STATUS_UNSUCCESSFUL;
}
- if ((result = cli_lsa_open_policy(cli, mem_ctx, True,
+ if ((result = cli_lsa_open_policy(cli, True,
SEC_RIGHTS_MAXIMUM_ALLOWED,
&pol)) != NT_STATUS_NOPROBLEMO) {
goto done;
@@ -202,7 +177,7 @@ static uint32 cmd_lsa_lookup_sids(struct cli_state *cli, int argc, char **argv)
/* Convert arguments to sids */
- sids = (DOM_SID *)talloc(mem_ctx, sizeof(DOM_SID) * (argc - 1));
+ sids = (DOM_SID *)malloc(sizeof(DOM_SID) * (argc - 1));
if (!sids) {
printf("out of memory\n");
@@ -215,7 +190,7 @@ static uint32 cmd_lsa_lookup_sids(struct cli_state *cli, int argc, char **argv)
/* Lookup the SIDs */
- if ((result = cli_lsa_lookup_sids(cli, mem_ctx, &pol, argc - 1, sids,
+ if ((result = cli_lsa_lookup_sids(cli, &pol, argc - 1, sids,
&names, &types, &num_names) !=
NT_STATUS_NOPROBLEMO)) {
goto done;
@@ -231,7 +206,6 @@ static uint32 cmd_lsa_lookup_sids(struct cli_state *cli, int argc, char **argv)
"*unknown*", types[i]);
}
-#if 0 /* JERRY */
safe_free(sids);
safe_free(types);
@@ -240,16 +214,14 @@ static uint32 cmd_lsa_lookup_sids(struct cli_state *cli, int argc, char **argv)
}
safe_free(names);
-#endif
done:
if (got_policy_hnd) {
- cli_lsa_close(cli, mem_ctx, &pol);
+ cli_lsa_close(cli, &pol);
}
cli_nt_session_close(cli);
- talloc_destroy (mem_ctx);
return result;
}
@@ -266,26 +238,19 @@ static uint32 cmd_lsa_enum_trust_dom(struct cli_state *cli, int argc, char **arg
uint32 enum_ctx = 0;
uint32 num_domains;
int i;
- TALLOC_CTX *mem_ctx;
if (argc != 1) {
printf("Usage: %s\n", argv[0]);
return 0;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_lsa_enum_trust_dom: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_LSARPC)) {
fprintf (stderr, "Could not initialize samr pipe!\n");
return NT_STATUS_UNSUCCESSFUL;
}
- if ((result = cli_lsa_open_policy(cli, mem_ctx, True,
+ if ((result = cli_lsa_open_policy(cli, True,
SEC_RIGHTS_MAXIMUM_ALLOWED,
&pol)) != NT_STATUS_NOPROBLEMO) {
goto done;
@@ -295,7 +260,7 @@ static uint32 cmd_lsa_enum_trust_dom(struct cli_state *cli, int argc, char **arg
/* Lookup list of trusted domains */
- if ((result = cli_lsa_enum_trust_dom(cli, mem_ctx, &pol, &enum_ctx,
+ if ((result = cli_lsa_enum_trust_dom(cli, &pol, &enum_ctx,
&num_domains, &domain_names,
&domain_sids)
!= NT_STATUS_NOPROBLEMO)) {
@@ -312,7 +277,6 @@ static uint32 cmd_lsa_enum_trust_dom(struct cli_state *cli, int argc, char **arg
"*unknown*", sid_str);
}
-#if 0 /* JERRY */
safe_free(domain_sids);
for (i = 0; i < num_domains; i++) {
@@ -320,16 +284,14 @@ static uint32 cmd_lsa_enum_trust_dom(struct cli_state *cli, int argc, char **arg
}
safe_free(domain_names);
-#endif
done:
if (got_policy_hnd) {
- cli_lsa_close(cli, mem_ctx, &pol);
+ cli_lsa_close(cli, &pol);
}
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
diff --git a/source/rpcclient/cmd_netlogon.c b/source/rpcclient/cmd_netlogon.c
deleted file mode 100644
index 184771a7ad3..00000000000
--- a/source/rpcclient/cmd_netlogon.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 2.2
- RPC pipe client
-
- Copyright (C) Tim Potter 2000
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "includes.h"
-
-extern int DEBUGLEVEL;
-
-static uint32 cmd_netlogon_logon_ctrl2(struct cli_state *cli, int argc,
- char **argv)
-{
- uint32 query_level = 1;
- TALLOC_CTX *mem_ctx;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
-
- if (argc > 1) {
- printf("Usage: %s\n", argv[0]);
- return 0;
- }
-
- if (!(mem_ctx = talloc_init())) {
- DEBUG(0,("cmd_srvsvc_srv_query_info: talloc_init failed\n"));
- goto done;
- }
-
- /* Initialise RPC connection */
-
- if (!cli_nt_session_open (cli, PIPE_NETLOGON)) {
- DEBUG(0, ("Could not initialize srvsvc pipe!\n"));
- goto done;
- }
-
- if ((result = cli_netlogon_logon_ctrl2(cli, mem_ctx, query_level))
- != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- /* Display results */
-
- done:
- return result;
-}
-
-static uint32 cmd_netlogon_logon_ctrl(struct cli_state *cli, int argc,
- char **argv)
-{
- uint32 query_level = 1;
- TALLOC_CTX *mem_ctx;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
-
- if (argc > 1) {
- printf("Usage: %s\n", argv[0]);
- return 0;
- }
-
- if (!(mem_ctx = talloc_init())) {
- DEBUG(0,("cmd_srvsvc_srv_query_info: talloc_init failed\n"));
- goto done;
- }
-
- /* Initialise RPC connection */
-
- if (!cli_nt_session_open (cli, PIPE_NETLOGON)) {
- DEBUG(0, ("Could not initialize srvsvc pipe!\n"));
- goto done;
- }
-
-#if 0
- if ((result = cli_netlogon_logon_ctrl(cli, mem_ctx, query_level))
- != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-#endif
-
- /* Display results */
-
- done:
- return result;
-}
-
-/* List of commands exported by this module */
-
-struct cmd_set netlogon_commands[] = {
- { "NETLOGON", NULL, "" },
- { "logonctrl2", cmd_netlogon_logon_ctrl2, "Logon Control 2" },
- { "logonctrl", cmd_netlogon_logon_ctrl, "Logon Control" },
- { NULL, NULL, NULL }
-};
diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c
index 931d44eb3b1..b3d135275a7 100644
--- a/source/rpcclient/cmd_samr.c
+++ b/source/rpcclient/cmd_samr.c
@@ -5,8 +5,8 @@
Copyright (C) Andrew Tridgell 1992-2000,
Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
- Copyright (C) Elrond 2000,
- Copyright (C) Tim Potter 2000
+ Copyright (C) Elrond 2000
+ Copyright (C) Tim Potter 2000
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
@@ -94,31 +94,6 @@ static void display_sam_user_info_21(SAM_USER_INFO_21 *usr)
}
}
-static void display_sam_unk_info_2(SAM_UNK_INFO_2 *info2)
-{
- fstring name;
-
- unistr2_to_ascii(name, &info2->uni_domain, sizeof(name) - 1);
- printf("Domain:\t%s\n", name);
-
- unistr2_to_ascii(name, &info2->uni_server, sizeof(name) - 1);
- printf("Server:\t%s\n", name);
-
- printf("Total Users:\t%d\n", info2->num_domain_usrs);
- printf("Total Groups:\t%d\n", info2->num_domain_grps);
- printf("Total Aliases:\t%d\n", info2->num_local_grps);
-
- printf("Sequence No:\t%d\n", info2->seq_num);
-
- printf("Unknown 0:\t0x%x\n", info2->unknown_0);
- printf("Unknown 1:\t0x%x\n", info2->unknown_1);
- printf("Unknown 2:\t0x%x\n", info2->unknown_2);
- printf("Unknown 3:\t0x%x\n", info2->unknown_3);
- printf("Unknown 4:\t0x%x\n", info2->unknown_4);
- printf("Unknown 5:\t0x%x\n", info2->unknown_5);
- printf("Unknown 6:\t0x%x\n", info2->unknown_6);
-}
-
/**********************************************************************
* Query user information
*/
@@ -133,24 +108,11 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv)
SAM_USERINFO_CTR user_ctr;
SAM_USER_INFO_21 info_21;
fstring server;
- TALLOC_CTX *mem_ctx;
- uint32 user_rid;
-
- if (argc != 2) {
- printf("Usage: %s rid\n", argv[0]);
+ if (argc != 1) {
+ printf("Usage: %s\n", argv[0]);
return 0;
}
-
- sscanf(argv[1], "%i", &user_rid);
-
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_samr_query_user: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- fetch_domain_sid(cli);
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_SAMR)) {
@@ -161,15 +123,16 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv)
slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
strupper (server);
- if ((result = cli_samr_connect(cli, mem_ctx, server, MAXIMUM_ALLOWED_ACCESS,
+ if ((result = cli_samr_connect(cli, server, MAXIMUM_ALLOWED_ACCESS,
&connect_pol)) !=
NT_STATUS_NOPROBLEMO) {
goto done;
}
got_connect_pol = True;
+ fetch_domain_sid(cli);
- if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol,
+ if ((result = cli_samr_open_domain(cli, &connect_pol,
MAXIMUM_ALLOWED_ACCESS,
&domain_sid, &domain_pol))
!= NT_STATUS_NOPROBLEMO) {
@@ -178,9 +141,9 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv)
got_domain_pol = True;
- if ((result = cli_samr_open_user(cli, mem_ctx, &domain_pol,
+ if ((result = cli_samr_open_user(cli, &domain_pol,
MAXIMUM_ALLOWED_ACCESS,
- user_rid, &user_pol))
+ 0x1f4, &user_pol))
!= NT_STATUS_NOPROBLEMO) {
goto done;
}
@@ -192,7 +155,7 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv)
user_ctr.info.id21 = &info_21;
- if ((result = cli_samr_query_userinfo(cli, mem_ctx, &user_pol, info_level,
+ if ((result = cli_samr_query_userinfo(cli, &user_pol, info_level,
&user_ctr))
!= NT_STATUS_NOPROBLEMO) {
goto done;
@@ -201,12 +164,11 @@ static uint32 cmd_samr_query_user(struct cli_state *cli, int argc, char **argv)
display_sam_user_info_21(&info_21);
done:
- if (got_user_pol) cli_samr_close(cli, mem_ctx, &user_pol);
- if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol);
- if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol);
+ if (got_user_pol) cli_samr_close(cli, &user_pol);
+ if (got_domain_pol) cli_samr_close(cli, &domain_pol);
+ if (got_connect_pol) cli_samr_close(cli, &connect_pol);
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
@@ -265,21 +227,12 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv)
got_group_pol = False;
GROUP_INFO_CTR group_ctr;
fstring server;
- TALLOC_CTX *mem_ctx;
if (argc != 1) {
printf("Usage: %s\n", argv[0]);
return 0;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_samr_query_group: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- fetch_domain_sid(cli);
-
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_SAMR)) {
fprintf (stderr, "Could not initialize samr pipe!\n");
@@ -289,15 +242,16 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv)
slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
strupper (server);
- if ((result = cli_samr_connect(cli, mem_ctx, server, MAXIMUM_ALLOWED_ACCESS,
+ if ((result = cli_samr_connect(cli, server, MAXIMUM_ALLOWED_ACCESS,
&connect_pol)) !=
NT_STATUS_NOPROBLEMO) {
goto done;
}
got_connect_pol = True;
+ fetch_domain_sid(cli);
- if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol,
+ if ((result = cli_samr_open_domain(cli, &connect_pol,
MAXIMUM_ALLOWED_ACCESS,
&domain_sid, &domain_pol))
!= NT_STATUS_NOPROBLEMO) {
@@ -306,7 +260,7 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv)
got_domain_pol = True;
- if ((result = cli_samr_open_group(cli, mem_ctx, &domain_pol,
+ if ((result = cli_samr_open_group(cli, &domain_pol,
MAXIMUM_ALLOWED_ACCESS,
0x202, &group_pol))
!= NT_STATUS_NOPROBLEMO) {
@@ -317,7 +271,7 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv)
ZERO_STRUCT(group_ctr);
- if ((result = cli_samr_query_groupinfo(cli, mem_ctx, &group_pol, info_level,
+ if ((result = cli_samr_query_groupinfo(cli, &group_pol, info_level,
&group_ctr))
!= NT_STATUS_NOPROBLEMO) {
goto done;
@@ -326,12 +280,11 @@ static uint32 cmd_samr_query_group(struct cli_state *cli, int argc, char **argv)
display_group_info_ctr(&group_ctr);
done:
- if (got_group_pol) cli_samr_close(cli, mem_ctx, &group_pol);
- if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol);
- if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol);
+ if (got_group_pol) cli_samr_close(cli, &group_pol);
+ if (got_domain_pol) cli_samr_close(cli, &domain_pol);
+ if (got_connect_pol) cli_samr_close(cli, &connect_pol);
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
@@ -352,23 +305,14 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char **
DOM_GID *user_gids;
int i;
fstring server;
- TALLOC_CTX *mem_ctx;
if (argc != 2) {
printf("Usage: %s rid\n", argv[0]);
return 0;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_samr_query_usergroups: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
sscanf(argv[1], "%i", &user_rid);
- fetch_domain_sid(cli);
-
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_SAMR)) {
fprintf (stderr, "Could not initialize samr pipe!\n");
@@ -378,15 +322,16 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char **
slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
strupper (server);
- if ((result = cli_samr_connect(cli, mem_ctx, server, MAXIMUM_ALLOWED_ACCESS,
+ if ((result = cli_samr_connect(cli, server, MAXIMUM_ALLOWED_ACCESS,
&connect_pol)) !=
NT_STATUS_NOPROBLEMO) {
goto done;
}
got_connect_pol = True;
+ fetch_domain_sid(cli);
- if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol,
+ if ((result = cli_samr_open_domain(cli, &connect_pol,
MAXIMUM_ALLOWED_ACCESS,
&domain_sid, &domain_pol))
!= NT_STATUS_NOPROBLEMO) {
@@ -395,7 +340,7 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char **
got_domain_pol = True;
- if ((result = cli_samr_open_user(cli, mem_ctx, &domain_pol,
+ if ((result = cli_samr_open_user(cli, &domain_pol,
MAXIMUM_ALLOWED_ACCESS,
user_rid, &user_pol))
!= NT_STATUS_NOPROBLEMO) {
@@ -404,7 +349,7 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char **
got_user_pol = True;
- if ((result = cli_samr_query_usergroups(cli, mem_ctx, &user_pol,
+ if ((result = cli_samr_query_usergroups(cli, &user_pol,
&num_groups, &user_gids))
!= NT_STATUS_NOPROBLEMO) {
goto done;
@@ -416,12 +361,11 @@ static uint32 cmd_samr_query_usergroups(struct cli_state *cli, int argc, char **
}
done:
- if (got_user_pol) cli_samr_close(cli, mem_ctx, &user_pol);
- if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol);
- if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol);
+ if (got_user_pol) cli_samr_close(cli, &user_pol);
+ if (got_domain_pol) cli_samr_close(cli, &domain_pol);
+ if (got_connect_pol) cli_samr_close(cli, &connect_pol);
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
@@ -438,23 +382,14 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar
uint32 num_members, *group_rids, *group_attrs, group_rid;
int i;
fstring server;
- TALLOC_CTX *mem_ctx;
if (argc != 2) {
printf("Usage: %s rid\n", argv[0]);
return 0;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_samr_query_groupmem: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
sscanf(argv[1], "%i", &group_rid);
- fetch_domain_sid(cli);
-
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_SAMR)) {
fprintf (stderr, "Could not initialize samr pipe!\n");
@@ -464,15 +399,16 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar
slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
strupper (server);
- if ((result = cli_samr_connect(cli, mem_ctx, server, MAXIMUM_ALLOWED_ACCESS,
+ if ((result = cli_samr_connect(cli, server, MAXIMUM_ALLOWED_ACCESS,
&connect_pol)) !=
NT_STATUS_NOPROBLEMO) {
goto done;
}
got_connect_pol = True;
+ fetch_domain_sid(cli);
- if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol,
+ if ((result = cli_samr_open_domain(cli, &connect_pol,
MAXIMUM_ALLOWED_ACCESS,
&domain_sid, &domain_pol))
!= NT_STATUS_NOPROBLEMO) {
@@ -481,7 +417,7 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar
got_domain_pol = True;
- if ((result = cli_samr_open_group(cli, mem_ctx, &domain_pol,
+ if ((result = cli_samr_open_group(cli, &domain_pol,
MAXIMUM_ALLOWED_ACCESS,
group_rid, &group_pol))
!= NT_STATUS_NOPROBLEMO) {
@@ -490,7 +426,7 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar
got_group_pol = True;
- if ((result = cli_samr_query_groupmem(cli, mem_ctx, &group_pol,
+ if ((result = cli_samr_query_groupmem(cli, &group_pol,
&num_members, &group_rids,
&group_attrs))
!= NT_STATUS_NOPROBLEMO) {
@@ -503,361 +439,11 @@ static uint32 cmd_samr_query_groupmem(struct cli_state *cli, int argc, char **ar
}
done:
- if (got_group_pol) cli_samr_close(cli, mem_ctx, &group_pol);
- if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol);
- if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol);
-
- cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
-
- return result;
-}
-
-/* Enumerate domain groups */
-
-static uint32 cmd_samr_enum_dom_groups(struct cli_state *cli, int argc,
- char **argv)
-{
- POLICY_HND connect_pol, domain_pol;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
- BOOL got_connect_pol = False, got_domain_pol = False;
- TALLOC_CTX *mem_ctx;
- fstring server;
- uint32 start_idx, size, num_dom_groups, i;
- struct acct_info *dom_groups;
-
- if (argc != 1) {
- printf("Usage: %s\n", argv[0]);
- return 0;
- }
-
- if (!(mem_ctx = talloc_init())) {
- DEBUG(0, ("cmd_samr_enum_dom_groups: talloc_init returned "
- "NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- fetch_domain_sid(cli);
-
- /* Initialise RPC connection */
-
- if (!cli_nt_session_open (cli, PIPE_SAMR)) {
- fprintf (stderr, "Could not initialize samr pipe!\n");
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
- strupper(server);
-
- /* Get sam policy handle */
-
- if ((result = cli_samr_connect(cli, mem_ctx, server,
- MAXIMUM_ALLOWED_ACCESS,
- &connect_pol)) !=
- NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- got_connect_pol = True;
-
- /* Get domain policy handle */
-
- if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol,
- MAXIMUM_ALLOWED_ACCESS,
- &domain_sid, &domain_pol))
- != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- got_domain_pol = True;
-
- /* Enumerate domain groups */
-
- start_idx = 0;
- size = 0xffff;
-
- result = cli_samr_enum_dom_groups(cli, mem_ctx, &domain_pol,
- &start_idx, size,
- &dom_groups, &num_dom_groups);
-
- for (i = 0; i < num_dom_groups; i++)
- printf("group:[%s] rid:[0x%x]\n", dom_groups[i].acct_name,
- dom_groups[i].rid);
-
- done:
- if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol);
- if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol);
+ if (got_group_pol) cli_samr_close(cli, &group_pol);
+ if (got_domain_pol) cli_samr_close(cli, &domain_pol);
+ if (got_connect_pol) cli_samr_close(cli, &connect_pol);
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
-
- return result;
-}
-
-/* Query alias membership */
-
-static uint32 cmd_samr_query_aliasmem(struct cli_state *cli, int argc,
- char **argv)
-{
- POLICY_HND connect_pol, domain_pol, alias_pol;
- BOOL got_connect_pol = False, got_domain_pol = False,
- got_alias_pol = False;
- TALLOC_CTX *mem_ctx;
- uint32 result = NT_STATUS_UNSUCCESSFUL, alias_rid, num_members, i;
- DOM_SID *alias_sids;
-
- fstring server;
-
- if (argc != 2) {
- printf("Usage: %s rid\n", argv[0]);
- return 0;
- }
-
- if (!(mem_ctx=talloc_init())) {
- DEBUG(0,("cmd_samr_query_aliasmem: talloc_init() "
- "returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- sscanf(argv[1], "%i", &alias_rid);
-
- /* Initialise RPC connection */
-
- fetch_domain_sid(cli);
-
- if (!cli_nt_session_open (cli, PIPE_SAMR)) {
- fprintf (stderr, "Could not initialize samr pipe!\n");
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- /* Open SAMR handle */
-
- slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
- strupper(server);
-
- if ((result = cli_samr_connect(cli, mem_ctx, server,
- MAXIMUM_ALLOWED_ACCESS,
- &connect_pol)) !=
- NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- got_connect_pol = True;
-
- /* Open handle on domain */
-
- if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol,
- MAXIMUM_ALLOWED_ACCESS,
- &domain_sid, &domain_pol))
- != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- got_domain_pol = True;
-
- /* Open handle on alias */
-
- if ((result = cli_samr_open_alias(cli, mem_ctx, &domain_pol,
- MAXIMUM_ALLOWED_ACCESS,
- alias_rid, &alias_pol))
- != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- got_alias_pol = True;
-
- if ((result = cli_samr_query_aliasmem(cli, mem_ctx, &alias_pol,
- &num_members, &alias_sids))
- != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- for (i = 0; i < num_members; i++) {
- fstring sid_str;
-
- sid_to_string(sid_str, &alias_sids[i]);
- printf("\tsid:[%s]\n", sid_str);
- }
-
- done:
- if (got_alias_pol) cli_samr_close(cli, mem_ctx, &alias_pol);
- if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol);
- if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol);
-
- cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
-
- return result;
-}
-
-/* Query display info */
-
-static uint32 cmd_samr_query_dispinfo(struct cli_state *cli, int argc,
- char **argv)
-{
- POLICY_HND connect_pol, domain_pol;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
- BOOL got_connect_pol = False, got_domain_pol = False;
- TALLOC_CTX *mem_ctx;
- fstring server;
- uint32 start_idx, size, num_dom_groups, i;
- struct acct_info *dom_groups;
-
- if (argc != 1) {
- printf("Usage: %s\n", argv[0]);
- return 0;
- }
-
- if (!(mem_ctx = talloc_init())) {
- DEBUG(0, ("cmd_samr_query_dispinfo: talloc_init returned "
- "NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- fetch_domain_sid(cli);
-
- /* Initialise RPC connection */
-
- if (!cli_nt_session_open (cli, PIPE_SAMR)) {
- fprintf (stderr, "Could not initialize samr pipe!\n");
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
- strupper(server);
-
- /* Get sam policy handle */
-
- if ((result = cli_samr_connect(cli, mem_ctx, server,
- MAXIMUM_ALLOWED_ACCESS,
- &connect_pol)) !=
- NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- got_connect_pol = True;
-
- /* Get domain policy handle */
-
- if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol,
- MAXIMUM_ALLOWED_ACCESS,
- &domain_sid, &domain_pol))
- != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- got_domain_pol = True;
-
- /* Query display info */
-
- start_idx = 0;
- size = 0xffff;
-
- result = cli_samr_enum_dom_groups(cli, mem_ctx, &domain_pol,
- &start_idx, size,
- &dom_groups, &num_dom_groups);
-
- for (i = 0; i < num_dom_groups; i++)
- printf("group:[%s] rid:[0x%x]\n", dom_groups[i].acct_name,
- dom_groups[i].rid);
-
- done:
- if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol);
- if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol);
-
- cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
-
- return result;
-}
-
-/* Query domain info */
-
-static uint32 cmd_samr_query_dominfo(struct cli_state *cli, int argc,
- char **argv)
-{
- POLICY_HND connect_pol, domain_pol;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
- BOOL got_connect_pol = False, got_domain_pol = False;
- TALLOC_CTX *mem_ctx;
- fstring server;
- uint16 switch_value = 2;
- SAM_UNK_CTR ctr;
-
- if (argc > 2) {
- printf("Usage: %s [infolevel\n", argv[0]);
- return 0;
- }
-
- if (argc == 2)
- switch_value = atoi(argv[1]);
-
- if (!(mem_ctx = talloc_init())) {
- DEBUG(0, ("cmd_samr_query_dispinfo: talloc_init returned "
- "NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- fetch_domain_sid(cli);
-
- /* Initialise RPC connection */
-
- if (!cli_nt_session_open (cli, PIPE_SAMR)) {
- fprintf (stderr, "Could not initialize samr pipe!\n");
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
- strupper(server);
-
- /* Get sam policy handle */
-
- if ((result = cli_samr_connect(cli, mem_ctx, server,
- MAXIMUM_ALLOWED_ACCESS,
- &connect_pol))
- != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- got_connect_pol = True;
-
- /* Get domain policy handle */
-
- if ((result = cli_samr_open_domain(cli, mem_ctx, &connect_pol,
- MAXIMUM_ALLOWED_ACCESS,
- &domain_sid, &domain_pol))
- != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- got_domain_pol = True;
-
- /* Query domain info */
-
- if ((result = cli_samr_query_dom_info(cli, mem_ctx, &domain_pol,
- switch_value, &ctr))
- != NT_STATUS_NOPROBLEMO) {
- goto done;
- }
-
- /* Display domain info */
-
- switch (switch_value) {
- case 2:
- display_sam_unk_info_2(&ctr.info.inf2);
- break;
- default:
- printf("cannot display domain info for switch value %d\n",
- switch_value);
- break;
- }
-
- done:
- if (got_domain_pol) cli_samr_close(cli, mem_ctx, &domain_pol);
- if (got_connect_pol) cli_samr_close(cli, mem_ctx, &connect_pol);
-
- cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
@@ -866,16 +452,10 @@ static uint32 cmd_samr_query_dominfo(struct cli_state *cli, int argc,
struct cmd_set samr_commands[] = {
{ "SAMR", NULL, "" },
-
{ "queryuser", cmd_samr_query_user, "Query user info" },
{ "querygroup", cmd_samr_query_group, "Query group info" },
{ "queryusergroups", cmd_samr_query_usergroups, "Query user groups" },
{ "querygroupmem", cmd_samr_query_groupmem, "Query group membership" },
- { "queryaliasmem", cmd_samr_query_aliasmem, "Query alias membership" },
- { "querydispinfo", cmd_samr_query_dispinfo, "Query display info" },
- { "querydominfo", cmd_samr_query_dominfo, "Query domain info" },
- { "enumdomgroups", cmd_samr_enum_dom_groups, "Enumerate domain groups" },
-
{ NULL, NULL, NULL }
};
diff --git a/source/rpcclient/cmd_spoolss.c b/source/rpcclient/cmd_spoolss.c
index 6b5d45a2492..52ff8b2cdfe 100644
--- a/source/rpcclient/cmd_spoolss.c
+++ b/source/rpcclient/cmd_spoolss.c
@@ -146,9 +146,8 @@ static uint32 cmd_spoolss_open_printer_ex(struct cli_state *cli, int argc, char
{
uint32 result = NT_STATUS_UNSUCCESSFUL;
pstring printername;
- fstring servername, user;
+ fstring server, user;
POLICY_HND hnd;
- TALLOC_CTX *mem_ctx;
if (argc != 2) {
printf("Usage: %s <printername>\n", argv[0]);
@@ -157,16 +156,10 @@ static uint32 cmd_spoolss_open_printer_ex(struct cli_state *cli, int argc, char
if (!cli)
return NT_STATUS_UNSUCCESSFUL;
+
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_open_printer_ex: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
-
- slprintf (servername, sizeof(fstring)-1, "\\\\%s", cli->desthost);
- strupper (servername);
+ slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
+ strupper (server);
fstrcpy (user, cli->user_name);
fstrcpy (printername, argv[1]);
@@ -178,19 +171,18 @@ static uint32 cmd_spoolss_open_printer_ex(struct cli_state *cli, int argc, char
}
/* Open the printer handle */
- result = cli_spoolss_open_printer_ex (cli, mem_ctx, printername, "",
- MAXIMUM_ALLOWED_ACCESS, servername, user, &hnd);
+ result = cli_spoolss_open_printer_ex (cli, printername, "",
+ MAXIMUM_ALLOWED_ACCESS, server, user, &hnd);
if (result == NT_STATUS_NOPROBLEMO) {
printf ("Printer %s opened successfully\n", printername);
- result = cli_spoolss_close_printer (cli, mem_ctx, &hnd);
+ result = cli_spoolss_close_printer (cli, &hnd);
if (result != NT_STATUS_NOPROBLEMO) {
printf ("Error closing printer handle! (%s)\n", get_nt_error_msg(result));
}
}
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
@@ -202,13 +194,13 @@ printer info level 0 display function
static void display_print_info_0(PRINTER_INFO_0 *i1)
{
fstring name;
- fstring servername;
+ fstring the_server;
unistr_to_ascii(name, i1->printername.buffer, sizeof(name) - 1);
- unistr_to_ascii(servername, i1->servername.buffer, sizeof(servername) - 1);
+ unistr_to_ascii(the_server, i1->servername.buffer, sizeof(the_server) - 1);
printf("\tprintername:[%s]\n", name);
- printf("\tservername:[%s]\n", servername);
+ printf("\tservername:[%s]\n", the_server);
printf("\tcjobs:[0x%x]\n", i1->cjobs);
printf("\ttotal_jobs:[0x%x]\n", i1->total_jobs);
@@ -343,22 +335,14 @@ static uint32 cmd_spoolss_enum_printers(struct cli_state *cli, int argc, char **
info_level = 1;
PRINTER_INFO_CTR ctr;
int returned;
- uint32 i = 0;
- TALLOC_CTX *mem_ctx;
-
+ uint32 i;
+
if (argc > 2)
{
printf("Usage: %s [level]\n", argv[0]);
return NT_STATUS_NOPROBLEMO;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_enum_printers: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
-
if (argc == 2) {
info_level = atoi(argv[1]);
}
@@ -372,14 +356,10 @@ static uint32 cmd_spoolss_enum_printers(struct cli_state *cli, int argc, char **
/* Enumerate printers -- Should we enumerate types other
than PRINTER_ENUM_LOCAL? Maybe accept as a parameter? --jerry */
ZERO_STRUCT(ctr);
- result = cli_spoolss_enum_printers(cli, mem_ctx, PRINTER_ENUM_LOCAL,
+ result = cli_spoolss_enum_printers(cli, PRINTER_ENUM_LOCAL,
info_level, &returned, &ctr);
- if (result == NT_STATUS_NOPROBLEMO)
- {
- if (!returned)
- printf ("No Printers printers returned.\n");
-
+ if (result == NT_STATUS_NOPROBLEMO) {
switch(info_level) {
case 0:
for (i=0; i<returned; i++) {
@@ -408,7 +388,6 @@ static uint32 cmd_spoolss_enum_printers(struct cli_state *cli, int argc, char **
}
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
@@ -450,19 +429,11 @@ static uint32 cmd_spoolss_enum_ports(struct cli_state *cli, int argc, char **arg
info_level = 1;
PORT_INFO_CTR ctr;
int returned;
- TALLOC_CTX *mem_ctx;
if (argc > 2) {
printf("Usage: %s [level]\n", argv[0]);
return NT_STATUS_NOPROBLEMO;
}
-
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_enum_ports: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
if (argc == 2) {
info_level = atoi(argv[1]);
@@ -477,7 +448,7 @@ static uint32 cmd_spoolss_enum_ports(struct cli_state *cli, int argc, char **arg
/* Enumerate ports */
ZERO_STRUCT(ctr);
- result = cli_spoolss_enum_ports(cli, mem_ctx, info_level, &returned, &ctr);
+ result = cli_spoolss_enum_ports(cli, info_level, &returned, &ctr);
if (result == NT_STATUS_NOPROBLEMO) {
int i;
@@ -498,7 +469,6 @@ static uint32 cmd_spoolss_enum_ports(struct cli_state *cli, int argc, char **arg
}
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
@@ -515,21 +485,13 @@ static uint32 cmd_spoolss_getprinter(struct cli_state *cli, int argc, char **arg
PRINTER_INFO_CTR ctr;
fstring printername,
servername,
- user;
- TALLOC_CTX *mem_ctx;
+ username;
if (argc == 1 || argc > 3) {
printf("Usage: %s <printername> [level]\n", argv[0]);
return NT_STATUS_NOPROBLEMO;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_getprinter: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
-
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_SPOOLSS)) {
fprintf (stderr, "Could not initialize spoolss pipe!\n");
@@ -544,19 +506,19 @@ static uint32 cmd_spoolss_getprinter(struct cli_state *cli, int argc, char **arg
slprintf (servername, sizeof(fstring)-1, "\\\\%s", cli->desthost);
strupper (servername);
slprintf (printername, sizeof(fstring)-1, "%s\\%s", servername, argv[1]);
- fstrcpy (user, cli->user_name);
+ fstrcpy (username, cli->user_name);
/* get a printer handle */
if ((result = cli_spoolss_open_printer_ex(
- cli, mem_ctx, printername, "", MAXIMUM_ALLOWED_ACCESS, servername,
- user, &pol)) != NT_STATUS_NOPROBLEMO) {
+ cli, printername, "", MAXIMUM_ALLOWED_ACCESS, servername,
+ username, &pol)) != NT_STATUS_NOPROBLEMO) {
goto done;
}
opened_hnd = True;
/* Get printer info */
- if ((result = cli_spoolss_getprinter(cli, mem_ctx, &pol, info_level, &ctr))
+ if ((result = cli_spoolss_getprinter(cli, &pol, info_level, &ctr))
!= NT_STATUS_NOPROBLEMO) {
goto done;
}
@@ -583,10 +545,9 @@ static uint32 cmd_spoolss_getprinter(struct cli_state *cli, int argc, char **arg
done:
if (opened_hnd)
- cli_spoolss_close_printer(cli, mem_ctx, &pol);
+ cli_spoolss_close_printer(cli, &pol);
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return result;
}
@@ -712,10 +673,9 @@ static uint32 cmd_spoolss_getdriver(struct cli_state *cli, int argc, char **argv
BOOL opened_hnd = False;
PRINTER_DRIVER_CTR ctr;
fstring printername,
- servername,
+ server,
user;
uint32 i;
- TALLOC_CTX *mem_ctx;
if ((argc == 1) || (argc > 3))
{
@@ -723,12 +683,6 @@ static uint32 cmd_spoolss_getdriver(struct cli_state *cli, int argc, char **argv
return NT_STATUS_NOPROBLEMO;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_getdriver: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_SPOOLSS))
{
@@ -737,16 +691,16 @@ static uint32 cmd_spoolss_getdriver(struct cli_state *cli, int argc, char **argv
}
/* get the arguments need to open the printer handle */
- slprintf (servername, sizeof(fstring)-1, "\\\\%s", cli->desthost);
- strupper (servername);
+ slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
+ strupper (server);
fstrcpy (user, cli->user_name);
fstrcpy (printername, argv[1]);
if (argc == 3)
info_level = atoi(argv[2]);
/* Open a printer handle */
- if ((result=cli_spoolss_open_printer_ex (cli, mem_ctx, printername, "",
- MAXIMUM_ALLOWED_ACCESS, servername, user, &pol)) != NT_STATUS_NO_PROBLEMO)
+ if ((result=cli_spoolss_open_printer_ex (cli, printername, "",
+ MAXIMUM_ALLOWED_ACCESS, server, user, &pol)) != NT_STATUS_NO_PROBLEMO)
{
printf ("Error opening printer handle for %s!\n", printername);
return result;
@@ -757,7 +711,7 @@ static uint32 cmd_spoolss_getdriver(struct cli_state *cli, int argc, char **argv
/* loop through and print driver info level for each architecture */
for (i=0; archi_table[i].long_archi!=NULL; i++)
{
- result = cli_spoolss_getprinterdriver (cli, mem_ctx, &pol, info_level,
+ result = cli_spoolss_getprinterdriver (cli, &pol, info_level,
archi_table[i].long_archi, &ctr);
switch (result)
@@ -799,9 +753,8 @@ static uint32 cmd_spoolss_getdriver(struct cli_state *cli, int argc, char **argv
/* cleanup */
if (opened_hnd)
- cli_spoolss_close_printer (cli, mem_ctx, &pol);
+ cli_spoolss_close_printer (cli, &pol);
cli_nt_session_close (cli);
- talloc_destroy(mem_ctx);
if (result==ERROR_UNKNOWN_PRINTER_DRIVER)
return NT_STATUS_NO_PROBLEMO;
@@ -818,10 +771,9 @@ static uint32 cmd_spoolss_enum_drivers(struct cli_state *cli, int argc, char **a
uint32 result=0,
info_level = 1;
PRINTER_DRIVER_CTR ctr;
- fstring servername;
+ fstring server;
uint32 i, j,
returned;
- TALLOC_CTX *mem_ctx;
if (argc > 2)
{
@@ -829,12 +781,6 @@ static uint32 cmd_spoolss_enum_drivers(struct cli_state *cli, int argc, char **a
return NT_STATUS_NOPROBLEMO;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_enum_drivers: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_SPOOLSS))
{
@@ -843,8 +789,8 @@ static uint32 cmd_spoolss_enum_drivers(struct cli_state *cli, int argc, char **a
}
/* get the arguments need to open the printer handle */
- slprintf (servername, sizeof(fstring)-1, "\\\\%s", cli->desthost);
- strupper (servername);
+ slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
+ strupper (server);
if (argc == 2)
info_level = atoi(argv[1]);
@@ -853,7 +799,7 @@ static uint32 cmd_spoolss_enum_drivers(struct cli_state *cli, int argc, char **a
for (i=0; archi_table[i].long_archi!=NULL; i++)
{
returned = 0;
- result = cli_spoolss_enumprinterdrivers (cli, mem_ctx, info_level,
+ result = cli_spoolss_enumprinterdrivers (cli, info_level,
archi_table[i].long_archi, &returned, &ctr);
if (returned == 0)
@@ -895,7 +841,6 @@ static uint32 cmd_spoolss_enum_drivers(struct cli_state *cli, int argc, char **a
/* cleanup */
cli_nt_session_close (cli);
- talloc_destroy(mem_ctx);
if (result==ERROR_UNKNOWN_PRINTER_DRIVER)
return NT_STATUS_NO_PROBLEMO;
@@ -926,7 +871,6 @@ static uint32 cmd_spoolss_getdriverdir(struct cli_state *cli, int argc, char **a
uint32 result;
fstring env;
DRIVER_DIRECTORY_CTR ctr;
- TALLOC_CTX *mem_ctx;
if (argc > 2)
{
@@ -940,13 +884,6 @@ static uint32 cmd_spoolss_getdriverdir(struct cli_state *cli, int argc, char **a
fprintf (stderr, "Could not initialize spoolss pipe!\n");
return NT_STATUS_UNSUCCESSFUL;
}
-
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_getdriverdir: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
/* get the arguments need to open the printer handle */
if (argc == 2)
@@ -955,7 +892,7 @@ static uint32 cmd_spoolss_getdriverdir(struct cli_state *cli, int argc, char **a
fstrcpy (env, "Windows NT x86");
/* Get the directory. Only use Info level 1 */
- if ((result = cli_spoolss_getprinterdriverdir (cli, mem_ctx, 1, env, &ctr))
+ if ((result = cli_spoolss_getprinterdriverdir (cli, 1, env, &ctr))
!= NT_STATUS_NO_PROBLEMO)
{
return result;
@@ -966,7 +903,6 @@ static uint32 cmd_spoolss_getdriverdir(struct cli_state *cli, int argc, char **a
/* cleanup */
cli_nt_session_close (cli);
- talloc_destroy(mem_ctx);
return result;
@@ -1030,11 +966,7 @@ static char* get_driver_3_param (char* str, char* delim, UNISTR* dest)
<Config File Name>:<Help File Name>:<Language Monitor Name>:\
<Default Data Type>:<Comma Separated list of Files>
*******************************************************************************/
-static BOOL init_drv_info_3_members (
- TALLOC_CTX *mem_ctx,
- DRIVER_INFO_3 *info,
- char *args
-)
+static BOOL init_drv_info_3_members (DRIVER_INFO_3 *info, char *args)
{
char *str, *str2;
uint32 len, i;
@@ -1065,7 +997,7 @@ static BOOL init_drv_info_3_members (
/* allocate the space; add one extra slot for a terminating NULL.
Each filename is NULL terminated and the end contains a double
NULL */
- if ((info->dependentfiles=(uint16*)talloc(mem_ctx, (len+1)*sizeof(uint16))) == NULL)
+ if ((info->dependentfiles=(uint16*)malloc((len+1)*sizeof(uint16))) == NULL)
{
DEBUG(0,("init_drv_info_3_members: Unable to malloc memory for dependenfiles\n"));
return False;
@@ -1088,7 +1020,6 @@ static uint32 cmd_spoolss_addprinterdriver (struct cli_state *cli, int argc, cha
DRIVER_INFO_3 info3;
fstring arch;
fstring driver_name;
- TALLOC_CTX *mem_ctx = NULL;
/* parse the command arguements */
if (argc != 3)
@@ -1100,12 +1031,6 @@ static uint32 cmd_spoolss_addprinterdriver (struct cli_state *cli, int argc, cha
return NT_STATUS_NOPROBLEMO;
}
-
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_addprinterdriver: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_SPOOLSS))
@@ -1125,15 +1050,16 @@ static uint32 cmd_spoolss_addprinterdriver (struct cli_state *cli, int argc, cha
else
set_drv_info_3_env(&info3, arch);
- if (!init_drv_info_3_members(mem_ctx, &info3, argv[2]))
+ if (!init_drv_info_3_members(&info3, argv[2]))
{
printf ("Error Invalid parameter list - %s.\n", argv[2]);
return NT_STATUS_INVALID_PARAMETER;
}
+ /* Get the directory. Only use Info level 1 */
ctr.info3 = &info3;
- if ((result = cli_spoolss_addprinterdriver (cli, mem_ctx, level, &ctr))
+ if ((result = cli_spoolss_addprinterdriver (cli, level, &ctr))
!= NT_STATUS_NO_PROBLEMO)
{
return result;
@@ -1144,7 +1070,6 @@ static uint32 cmd_spoolss_addprinterdriver (struct cli_state *cli, int argc, cha
/* cleanup */
cli_nt_session_close (cli);
- talloc_destroy(mem_ctx);
return result;
@@ -1157,8 +1082,7 @@ static uint32 cmd_spoolss_addprinterex (struct cli_state *cli, int argc, char **
level = 2;
PRINTER_INFO_CTR ctr;
PRINTER_INFO_2 info2;
- fstring servername;
- TALLOC_CTX *mem_ctx = NULL;
+ fstring server;
/* parse the command arguements */
if (argc != 5)
@@ -1166,16 +1090,9 @@ static uint32 cmd_spoolss_addprinterex (struct cli_state *cli, int argc, char **
printf ("Usage: %s <name> <shared name> <driver> <port>\n", argv[0]);
return NT_STATUS_NOPROBLEMO;
}
-
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_addprinterex: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- slprintf (servername, sizeof(fstring)-1, "\\\\%s", cli->desthost);
- strupper (servername);
+ slprintf (server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
+ strupper (server);
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_SPOOLSS))
@@ -1188,7 +1105,7 @@ static uint32 cmd_spoolss_addprinterex (struct cli_state *cli, int argc, char **
/* Fill in the DRIVER_INFO_3 struct */
ZERO_STRUCT(info2);
#if 0 /* JERRY */
- init_unistr( &info2.servername, servername);
+ init_unistr( &info2.servername, server);
#endif
init_unistr( &info2.printername, argv[1]);
init_unistr( &info2.sharename, argv[2]);
@@ -1213,8 +1130,11 @@ static uint32 cmd_spoolss_addprinterex (struct cli_state *cli, int argc, char **
info2.averageppm = 0;
*/
+
+
+ /* Get the directory. Only use Info level 1 */
ctr.printers_2 = &info2;
- if ((result = cli_spoolss_addprinterex (cli, mem_ctx, level, &ctr))
+ if ((result = cli_spoolss_addprinterex (cli, level, &ctr))
!= NT_STATUS_NO_PROBLEMO)
{
cli_nt_session_close (cli);
@@ -1225,7 +1145,6 @@ static uint32 cmd_spoolss_addprinterex (struct cli_state *cli, int argc, char **
/* cleanup */
cli_nt_session_close (cli);
- talloc_destroy(mem_ctx);
return result;
@@ -1241,8 +1160,7 @@ static uint32 cmd_spoolss_setdriver (struct cli_state *cli, int argc, char **arg
PRINTER_INFO_2 info2;
fstring servername,
printername,
- user;
- TALLOC_CTX *mem_ctx = NULL;
+ username;
/* parse the command arguements */
if (argc != 3)
@@ -1251,16 +1169,10 @@ static uint32 cmd_spoolss_setdriver (struct cli_state *cli, int argc, char **arg
return NT_STATUS_NOPROBLEMO;
}
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_setdriver: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
slprintf (servername, sizeof(fstring)-1, "\\\\%s", cli->desthost);
strupper (servername);
slprintf (printername, sizeof(fstring)-1, "%s\\%s", servername, argv[1]);
- fstrcpy (user, cli->user_name);
+ fstrcpy (username, cli->user_name);
/* Initialise RPC connection */
if (!cli_nt_session_open (cli, PIPE_SPOOLSS))
@@ -1271,8 +1183,8 @@ static uint32 cmd_spoolss_setdriver (struct cli_state *cli, int argc, char **arg
/* get a printer handle */
- if ((result = cli_spoolss_open_printer_ex(cli, mem_ctx, printername, "",
- MAXIMUM_ALLOWED_ACCESS, servername, user, &pol))
+ if ((result = cli_spoolss_open_printer_ex(cli, printername, "",
+ MAXIMUM_ALLOWED_ACCESS, servername, username, &pol))
!= NT_STATUS_NOPROBLEMO)
{
goto done;
@@ -1283,15 +1195,15 @@ static uint32 cmd_spoolss_setdriver (struct cli_state *cli, int argc, char **arg
/* Get printer info */
ZERO_STRUCT (info2);
ctr.printers_2 = &info2;
- if ((result = cli_spoolss_getprinter(cli, mem_ctx, &pol, level, &ctr)) != NT_STATUS_NOPROBLEMO)
+ if ((result = cli_spoolss_getprinter(cli, &pol, level, &ctr)) != NT_STATUS_NOPROBLEMO)
{
- printf ("Unable to retrieve printer information!\n");
+ printf ("Unable to retreive printer information!\n");
goto done;
}
/* set the printer driver */
init_unistr(&ctr.printers_2->drivername, argv[2]);
- if ((result = cli_spoolss_setprinter(cli, mem_ctx, &pol, level, &ctr, 0)) != NT_STATUS_NO_PROBLEMO)
+ if ((result = cli_spoolss_setprinter(cli, &pol, level, &ctr, 0)) != NT_STATUS_NO_PROBLEMO)
{
printf ("SetPrinter call failed!\n");
goto done;;
@@ -1302,74 +1214,19 @@ static uint32 cmd_spoolss_setdriver (struct cli_state *cli, int argc, char **arg
done:
/* cleanup */
if (opened_hnd)
- cli_spoolss_close_printer(cli, mem_ctx, &pol);
+ cli_spoolss_close_printer(cli, &pol);
cli_nt_session_close (cli);
- talloc_destroy(mem_ctx);
return result;
}
-static uint32 cmd_spoolss_deletedriver (struct cli_state *cli, int argc, char **argv)
-{
- uint32 result = NT_STATUS_UNSUCCESSFUL;
- fstring servername;
- TALLOC_CTX *mem_ctx = NULL;
- int i;
-
- /* parse the command arguements */
- if (argc != 2)
- {
- printf ("Usage: %s <driver>\n", argv[0]);
- return NT_STATUS_NOPROBLEMO;
- }
-
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("cmd_spoolss_deletedriver: talloc_init returned NULL!\n"));
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- slprintf (servername, sizeof(fstring)-1, "\\\\%s", cli->desthost);
- strupper (servername);
-
- /* Initialise RPC connection */
- if (!cli_nt_session_open (cli, PIPE_SPOOLSS))
- {
- fprintf (stderr, "Could not initialize spoolss pipe!\n");
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- /* delete the driver for all architectures */
- for (i=0; archi_table[i].long_archi; i++)
- {
- /* make the call to remove the driver */
- if ((result = cli_spoolss_deleteprinterdriver(cli, mem_ctx,
- archi_table[i].long_archi, argv[1])) != NT_STATUS_NO_PROBLEMO)
- {
- printf ("Failed to remove driver %s for arch [%s] - error %s!\n",
- argv[1], archi_table[i].long_archi, get_nt_error_msg(result));
- }
- else
- printf ("Driver %s removed for arch [%s].\n", argv[1], archi_table[i].long_archi);
- }
-
-
- /* cleanup */
- cli_nt_session_close (cli);
- talloc_destroy(mem_ctx);
-
- return NT_STATUS_NO_PROBLEMO;
-}
-
-
/* List of commands exported by this module */
struct cmd_set spoolss_commands[] = {
{ "SPOOLSS", NULL, "" },
{ "adddriver", cmd_spoolss_addprinterdriver, "Add a print driver" },
{ "addprinter", cmd_spoolss_addprinterex, "Add a printer" },
- { "deldriver", cmd_spoolss_deletedriver, "Delete a printer driver" },
{ "enumdata", cmd_spoolss_not_implemented, "Enumerate printer data (*)" },
{ "enumjobs", cmd_spoolss_not_implemented, "Enumerate print jobs (*)" },
{ "enumports", cmd_spoolss_enum_ports, "Enumerate printer ports" },
diff --git a/source/rpcclient/cmd_srvsvc.c b/source/rpcclient/cmd_srvsvc.c
deleted file mode 100644
index b804cc383db..00000000000
--- a/source/rpcclient/cmd_srvsvc.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 2.2
- RPC pipe client
-
- Copyright (C) Andrew Tridgell 1992-1999
- Copyright (C) Luke Kenneth Casson Leighton 1996 - 1999
- Copyright (C) Tim Potter 2000
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "includes.h"
-
-extern int DEBUGLEVEL;
-
-/* Display server query info */
-
-static char *get_server_type_str(uint32 type)
-{
- static fstring typestr;
- int i;
-
- if (type == SV_TYPE_ALL) {
- fstrcpy(typestr, "All");
- return typestr;
- }
-
- typestr[0] = 0;
-
- for (i = 0; i < 32; i++) {
- if (type & (1 << i)) {
- switch (1 << i) {
- case SV_TYPE_WORKSTATION:
- fstrcat(typestr, "Wk ");
- break;
- case SV_TYPE_SERVER:
- fstrcat(typestr, "Sv ");
- break;
- case SV_TYPE_SQLSERVER:
- fstrcat(typestr, "Sql ");
- break;
- case SV_TYPE_DOMAIN_CTRL:
- fstrcat(typestr, "PDC ");
- break;
- case SV_TYPE_DOMAIN_BAKCTRL:
- fstrcat(typestr, "BDC ");
- break;
- case SV_TYPE_TIME_SOURCE:
- fstrcat(typestr, "Tim ");
- break;
- case SV_TYPE_AFP:
- fstrcat(typestr, "AFP ");
- break;
- case SV_TYPE_NOVELL:
- fstrcat(typestr, "Nov ");
- break;
- case SV_TYPE_DOMAIN_MEMBER:
- fstrcat(typestr, "Dom ");
- break;
- case SV_TYPE_PRINTQ_SERVER:
- fstrcat(typestr, "PrQ ");
- break;
- case SV_TYPE_DIALIN_SERVER:
- fstrcat(typestr, "Din ");
- break;
- case SV_TYPE_SERVER_UNIX:
- fstrcat(typestr, "Unx ");
- break;
- case SV_TYPE_NT:
- fstrcat(typestr, "NT ");
- break;
- case SV_TYPE_WFW:
- fstrcat(typestr, "Wfw ");
- break;
- case SV_TYPE_SERVER_MFPN:
- fstrcat(typestr, "Mfp ");
- break;
- case SV_TYPE_SERVER_NT:
- fstrcat(typestr, "SNT ");
- break;
- case SV_TYPE_POTENTIAL_BROWSER:
- fstrcat(typestr, "PtB ");
- break;
- case SV_TYPE_BACKUP_BROWSER:
- fstrcat(typestr, "BMB ");
- break;
- case SV_TYPE_MASTER_BROWSER:
- fstrcat(typestr, "LMB ");
- break;
- case SV_TYPE_DOMAIN_MASTER:
- fstrcat(typestr, "DMB ");
- break;
- case SV_TYPE_SERVER_OSF:
- fstrcat(typestr, "OSF ");
- break;
- case SV_TYPE_SERVER_VMS:
- fstrcat(typestr, "VMS ");
- break;
- case SV_TYPE_WIN95_PLUS:
- fstrcat(typestr, "W95 ");
- break;
- case SV_TYPE_ALTERNATE_XPORT:
- fstrcat(typestr, "Xpt ");
- break;
- case SV_TYPE_LOCAL_LIST_ONLY:
- fstrcat(typestr, "Dom ");
- break;
- case SV_TYPE_DOMAIN_ENUM:
- fstrcat(typestr, "Loc ");
- break;
- }
- }
- }
-
- i = strlen(typestr) - 1;
-
- if (typestr[i] == ' ')
- typestr[i] = 0;
-
- return typestr;
-}
-
-static void display_server(char *sname, uint32 type, const char *comment)
-{
- printf("\t%-15.15s%-20s %s\n", sname, get_server_type_str(type),
- comment);
-}
-
-static void display_srv_info_101(SRV_INFO_101 *sv101)
-{
- fstring name;
- fstring comment;
-
- unistr2_to_ascii(name, &sv101->uni_name, sizeof(name) - 1);
- unistr2_to_ascii(comment, &sv101->uni_comment, sizeof(comment) - 1);
-
- display_server(name, sv101->srv_type, comment);
-
- printf("\tplatform_id :\t%d\n", sv101->platform_id);
- printf("\tos version :\t%d.%d\n", sv101->ver_major,
- sv101->ver_minor);
-
- printf("\tserver type :\t0x%x\n", sv101->srv_type);
-}
-
-static void display_srv_info_102(SRV_INFO_102 *sv102)
-{
- fstring name;
- fstring comment;
- fstring usr_path;
-
- unistr2_to_ascii(name, &sv102->uni_name, sizeof(name) - 1);
- unistr2_to_ascii(comment, &sv102->uni_comment, sizeof(comment) - 1);
- unistr2_to_ascii(usr_path, &sv102->uni_usr_path, sizeof(usr_path) - 1);
-
- display_server(name, sv102->srv_type, comment);
-
- printf("\tplatform_id :\t%d\n", sv102->platform_id);
- printf("\tos version :\t%d.%d\n", sv102->ver_major,
- sv102->ver_minor);
-
- printf("\tusers :\t%x\n", sv102->users);
- printf("\tdisc, hidden :\t%x, %x\n", sv102->disc, sv102->hidden);
- printf("\tannounce, delta :\t%d, %d\n", sv102->announce,
- sv102->ann_delta);
- printf("\tlicenses :\t%d\n", sv102->licenses);
- printf("\tuser path :\t%s\n", usr_path);
-}
-
-/* Server query info */
-
-static uint32 cmd_srvsvc_srv_query_info(struct cli_state *cli, int argc,
- char **argv)
-{
- uint32 info_level = 101;
- SRV_INFO_CTR ctr;
- TALLOC_CTX *mem_ctx;
- uint32 result = NT_STATUS_UNSUCCESSFUL;
-
- if (argc > 2) {
- printf("Usage: %s [infolevel]\n", argv[0]);
- return 0;
- }
-
- if (argc == 2)
- info_level = atoi(argv[1]);
-
- if (!(mem_ctx = talloc_init())) {
- DEBUG(0,("cmd_srvsvc_srv_query_info: talloc_init failed\n"));
- goto done;
- }
-
- /* Initialise RPC connection */
-
- if (!cli_nt_session_open (cli, PIPE_SRVSVC)) {
- DEBUG(0, ("Could not initialize srvsvc pipe!\n"));
- goto done;
- }
-
- if ((result = cli_srvsvc_net_srv_get_info(cli, mem_ctx, info_level,
- &ctr)
- != NT_STATUS_NOPROBLEMO)) {
- goto done;
- }
-
- /* Display results */
-
- switch (info_level) {
- case 101:
- display_srv_info_101(&ctr.srv.sv101);
- break;
- case 102:
- display_srv_info_102(&ctr.srv.sv102);
- break;
- default:
- printf("unsupported info level %d\n", info_level);
- break;
- }
-
- done:
- return result;
-}
-
-/* List of commands exported by this module */
-
-struct cmd_set srvsvc_commands[] = {
- { "SRVSVC", NULL, "" },
- { "srvinfo", cmd_srvsvc_srv_query_info, "Server query info" },
- { NULL, NULL, NULL }
-};
diff --git a/source/rpcclient/rpcclient.c b/source/rpcclient/rpcclient.c
index 537d3249338..db4b5c5bdeb 100644
--- a/source/rpcclient/rpcclient.c
+++ b/source/rpcclient/rpcclient.c
@@ -25,15 +25,20 @@
extern int DEBUGLEVEL;
extern fstring debugf;
-DOM_SID domain_sid;
+/* Various pipe commands */
+extern struct cmd_set lsarpc_commands[];
+extern struct cmd_set samr_commands[];
+extern struct cmd_set spoolss_commands[];
/* List to hold groups of commands */
-
static struct cmd_list {
struct cmd_list *prev, *next;
struct cmd_set *cmd_set;
} *cmd_list;
+
+DOM_SID domain_sid;
+
/****************************************************************************
handle completion of commands for readline
****************************************************************************/
@@ -155,7 +160,9 @@ static void read_authfile (
return;
}
-static char* next_command (char** cmdstr)
+static char* next_command (
+ char** cmdstr
+)
{
static pstring command;
char *p;
@@ -194,29 +201,22 @@ void fetch_domain_sid(struct cli_state *cli)
uint32 result = 0, info_class = 5;
fstring domain_name;
static BOOL got_domain_sid;
- TALLOC_CTX *mem_ctx;
if (got_domain_sid) return;
- if (!(mem_ctx=talloc_init()))
- {
- DEBUG(0,("fetch_domain_sid: talloc_init returned NULL!\n"));
- goto error;
- }
-
if (!cli_nt_session_open (cli, PIPE_LSARPC)) {
fprintf(stderr, "could not initialise lsa pipe\n");
goto error;
}
- if ((result = cli_lsa_open_policy(cli, mem_ctx, True,
+ if ((result = cli_lsa_open_policy(cli, True,
SEC_RIGHTS_MAXIMUM_ALLOWED,
&pol) != NT_STATUS_NOPROBLEMO)) {
goto error;
}
- if ((result = cli_lsa_query_info_policy(cli, mem_ctx, &pol, info_class,
+ if ((result = cli_lsa_query_info_policy(cli, &pol, info_class,
domain_name, &domain_sid))
!= NT_STATUS_NOPROBLEMO) {
goto error;
@@ -224,9 +224,8 @@ void fetch_domain_sid(struct cli_state *cli)
got_domain_sid = True;
- cli_lsa_close(cli, mem_ctx, &pol);
+ cli_lsa_close(cli, &pol);
cli_nt_session_close(cli);
- talloc_destroy(mem_ctx);
return;
@@ -316,24 +315,6 @@ static struct cmd_set separator_command[] = {
};
-/* Various pipe commands */
-
-extern struct cmd_set lsarpc_commands[];
-extern struct cmd_set samr_commands[];
-extern struct cmd_set spoolss_commands[];
-extern struct cmd_set netlogon_commands[];
-extern struct cmd_set srvsvc_commands[];
-
-static struct cmd_set *rpcclient_command_list[] = {
- rpcclient_commands,
- lsarpc_commands,
- samr_commands,
- spoolss_commands,
- netlogon_commands,
- srvsvc_commands,
- NULL
-};
-
void add_command_set(struct cmd_set *cmd_set)
{
struct cmd_list *entry;
@@ -418,20 +399,11 @@ static uint32 process_cmd(struct cli_state *cli, char *cmd)
pstring buf;
char *p = cmd;
uint32 result=0;
- int len = 0;
-
- if (cmd[strlen(cmd) - 1] == '\n')
- cmd[strlen(cmd) - 1] = '\0';
if (!next_token(&p, buf, " ", sizeof(buf))) {
return 0;
}
- /* strip the trainly \n if it exsists */
- len = strlen(buf);
- if (buf[len-1] == '\n')
- buf[len-1] = '\0';
-
/* Search for matching commands */
for (temp_list = cmd_list; temp_list; temp_list = temp_list->next) {
@@ -536,7 +508,6 @@ static void usage(char *pname)
username,
domain,
server;
- struct cmd_set **cmd_set;
charset_initialise();
setlinebuf(stdout);
@@ -652,33 +623,37 @@ static void usage(char *pname)
}
/* There are no pointers in ntuser_creds struct so zero it out */
-
ZERO_STRUCTP (&creds);
+
/* Load command lists */
+ add_command_set(rpcclient_commands);
+ add_command_set(separator_command);
+
+ add_command_set(spoolss_commands);
+ add_command_set(separator_command);
- cmd_set = rpcclient_command_list;
+ add_command_set(lsarpc_commands);
+ add_command_set(separator_command);
+
+ add_command_set(samr_commands);
+ add_command_set(separator_command);
+
+
+ /* Do anything specified with -c */
+ if (cmdstr[0]) {
+ char *cmd;
+ char *p = cmdstr;
+
+ while((cmd=next_command(&p)) != NULL) {
+ process_cmd(&cli, cmd);
+ }
- while(*cmd_set) {
- add_command_set(*cmd_set);
- add_command_set(separator_command);
- cmd_set++;
+ return 0;
}
- /* Do anything specified with -c */
- if (cmdstr[0]) {
- char *cmd;
- char *p = cmdstr;
-
- while((cmd=next_command(&p)) != NULL) {
- process_cmd(&cli, cmd);
- }
-
- return 0;
- }
/* Loop around accepting commands */
-
while(1) {
pstring prompt;
char *line;
@@ -687,12 +662,7 @@ static void usage(char *pname)
line = smb_readline(prompt, NULL, completion_fn);
- if (line == NULL)
- break;
-
- if (line[0] != '\n')
- process_cmd(&cli, line);
+ process_cmd(&cli, line);
}
-
- return 0;
}
+
diff --git a/source/script/mkproto.awk b/source/script/mkproto.awk
index 13ff399da0d..c66fe07972f 100644
--- a/source/script/mkproto.awk
+++ b/source/script/mkproto.awk
@@ -112,11 +112,11 @@ END {
gotstart = 1;
}
- if( $0 ~ /^TDB_CONTEXT|^TDB_DATA|^smb_ucs2_t|^TALLOC_CTX|^hash_element|^NT_DEVICEMODE|^enum.*\(|^NT_USER_TOKEN|^SAM_ACCOUNT/ ) {
+ if( $0 ~ /^TDB_CONTEXT|^TDB_DATA|^smb_ucs2_t|^TALLOC_CTX|^hash_element|^NT_DEVICEMODE|^enum nss_status|^NT_USER_TOKEN|^SAM_ACCOUNT/ ) {
gotstart = 1;
}
- if( $0 ~ /^long|^char|^uint|^struct|^BOOL|^void|^time|^smb_shm_offset_t|^shm_offset_t|^FILE|^SMB_OFF_T|^size_t|^ssize_t|^SMB_BIG_UINT/ ) {
+ if( $0 ~ /^long|^char|^uint|^struct|^BOOL|^void|^time|^smb_shm_offset_t|^shm_offset_t|^enum remote_arch_types|^FILE|^SMB_OFF_T|^size_t|^ssize_t|^SMB_BIG_UINT/ ) {
gotstart = 1;
}
diff --git a/source/script/scancvslog.pl b/source/script/scancvslog.pl
index b1114f5706e..6e05c4c3d62 100755
--- a/source/script/scancvslog.pl
+++ b/source/script/scancvslog.pl
@@ -83,7 +83,7 @@ sub get_entry {
$_ = <INFILE>;
chomp $_;
next if (not ($_));
- if (/^\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/) {
+ if (/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/) {
next if ($#Entry == -1);
push(Entry,$_);
return @Entry;
diff --git a/source/script/uninstallcp.sh b/source/script/uninstallcp.sh
index 2a9e9d509ab..bd7013c358f 100755
--- a/source/script/uninstallcp.sh
+++ b/source/script/uninstallcp.sh
@@ -10,13 +10,13 @@ if [ ! -d $CPDIR ]; then
fi
for p in $*; do
- if [ ! -f $CPDIR/unicode_map.$p ]; then
- echo $CPDIR/unicode_map.$p does not exist!
+ if [ ! -f $CPDIR/codepage.$p ]; then
+ echo $CPDIR/codepage.$p does not exist!
else
- echo Removing $CPDIR/unicode_map.$p
- rm -f $CPDIR/unicode_map.$p
- if [ -f $CPDIR/unicode_map.$p ]; then
- echo Cannot remove $CPDIR/unicode_map.$p... does $USER have privileges?
+ echo Removing $CPDIR/codepage.$p
+ rm -f $CPDIR/codepage.$p
+ if [ -f $CPDIR/codepage.$p ]; then
+ echo Cannot remove $CPDIR/codepage.$p... does $USER have privileges?
fi
fi
done
diff --git a/source/smbd/blocking.c b/source/smbd/blocking.c
index cebad5ce356..e8dc29f80ac 100644
--- a/source/smbd/blocking.c
+++ b/source/smbd/blocking.c
@@ -130,11 +130,10 @@ for fnum = %d, name = %s\n", length, (int)blr->expire_time, lock_timeout,
static void send_blocking_reply(char *outbuf, int outsize)
{
- if(outsize > 4)
- smb_setlen(outbuf,outsize - 4);
+ if(outsize > 4)
+ smb_setlen(outbuf,outsize - 4);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("send_blocking_reply: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
}
/****************************************************************************
@@ -172,16 +171,15 @@ static void reply_lockingX_success(blocking_lock_record *blr)
static void generic_blocking_lock_error(blocking_lock_record *blr, int eclass, int32 ecode)
{
- char *outbuf = OutBuffer;
- char *inbuf = blr->inbuf;
- construct_reply_common(inbuf, outbuf);
+ char *outbuf = OutBuffer;
+ char *inbuf = blr->inbuf;
+ construct_reply_common(inbuf, outbuf);
- if(eclass == 0) /* NT Error. */
- SSVAL(outbuf,smb_flg2, SVAL(outbuf,smb_flg2) | FLAGS2_32_BIT_ERROR_CODES);
+ if(eclass == 0) /* NT Error. */
+ SSVAL(outbuf,smb_flg2, SVAL(outbuf,smb_flg2) | FLAGS2_32_BIT_ERROR_CODES);
- ERROR(eclass,ecode);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("generic_blocking_lock_error: send_smb failed.\n");
+ ERROR(eclass,ecode);
+ send_smb(smbd_server_fd(),outbuf);
}
/****************************************************************************
diff --git a/source/smbd/chgpasswd.c b/source/smbd/chgpasswd.c
index 083308d335f..63f425f4cc3 100644
--- a/source/smbd/chgpasswd.c
+++ b/source/smbd/chgpasswd.c
@@ -20,9 +20,9 @@
*/
/* fork a child process to exec passwd and write to its
- * tty to change a users password. This is running as the
- * user who is attempting to change the password.
- */
+* tty to change a users password. This is running as the
+* user who is attempting to change the password.
+*/
/*
* This code was copied/borrowed and stolen from various sources.
@@ -456,28 +456,47 @@ BOOL chgpasswd(char *name, char *oldpass, char *newpass, BOOL as_root)
/* Take the passed information and test it for minimum criteria */
/* Minimum password length */
- if (strlen(newpass) < lp_min_passwd_length()) {
- /* too short, must be at least MINPASSWDLENGTH */
- DEBUG(0, ("Password Change: user %s, New password is shorter than minimum password length = %d\n",
+ if (strlen(newpass) < lp_min_passwd_length()) /* too short, must be at least MINPASSWDLENGTH */
+ {
+ DEBUG(0,
+ ("Password Change: user %s, New password is shorter than minimum password length = %d\n",
name, lp_min_passwd_length()));
return (False); /* inform the user */
}
/* Password is same as old password */
- if (strcmp(oldpass, newpass) == 0) {
- /* don't allow same password */
- DEBUG(2, ("Password Change: %s, New password is same as old\n", name)); /* log the attempt */
+ if (strcmp(oldpass, newpass) == 0) /* don't allow same password */
+ {
+ DEBUG(2,
+ ("Password Change: %s, New password is same as old\n", name)); /* log the attempt */
return (False); /* inform the user */
}
+ pstrcpy(passwordprogram, lp_passwd_program());
+ pstrcpy(chatsequence, lp_passwd_chat());
+
+ if (!*chatsequence)
+ {
+ DEBUG(2, ("Null chat sequence - no password changing\n"));
+ return (False);
+ }
+
+ if (!*passwordprogram)
+ {
+ DEBUG(2, ("Null password program - no password changing\n"));
+ return (False);
+ }
+
/*
* Check the old and new passwords don't contain any control
* characters.
*/
len = strlen(oldpass);
- for (i = 0; i < len; i++) {
- if (iscntrl((int)oldpass[i])) {
+ for (i = 0; i < len; i++)
+ {
+ if (iscntrl((int)oldpass[i]))
+ {
DEBUG(0,
("chat_with_program: oldpass contains control characters (disallowed).\n"));
return False;
@@ -485,43 +504,16 @@ BOOL chgpasswd(char *name, char *oldpass, char *newpass, BOOL as_root)
}
len = strlen(newpass);
- for (i = 0; i < len; i++) {
- if (iscntrl((int)newpass[i])) {
+ for (i = 0; i < len; i++)
+ {
+ if (iscntrl((int)newpass[i]))
+ {
DEBUG(0,
("chat_with_program: newpass contains control characters (disallowed).\n"));
return False;
}
}
-#ifdef WITH_PAM
- if (lp_pam_password_change()) {
- BOOL ret;
-
- if (as_root)
- become_root();
-
- ret = smb_pam_passchange(name, oldpass, newpass);
-
- if (as_root)
- unbecome_root();
-
- return ret;
- }
-#endif
-
- pstrcpy(passwordprogram, lp_passwd_program());
- pstrcpy(chatsequence, lp_passwd_chat());
-
- if (!*chatsequence) {
- DEBUG(2, ("Null chat sequence - no password changing\n"));
- return (False);
- }
-
- if (!*passwordprogram) {
- DEBUG(2, ("Null password program - no password changing\n"));
- return (False);
- }
-
pstring_sub(passwordprogram, "%u", name);
/* note that we do NOT substitute the %o and %n in the password program
as this would open up a security hole where the user could use
@@ -535,7 +527,6 @@ BOOL chgpasswd(char *name, char *oldpass, char *newpass, BOOL as_root)
}
#else /* ALLOW_CHANGE_PASSWORD */
-
BOOL chgpasswd(char *name, char *oldpass, char *newpass, BOOL as_root)
{
DEBUG(0, ("Password changing not compiled in (user=%s)\n", name));
@@ -779,7 +770,7 @@ BOOL check_oem_password(char *user,
/*
* Call the hash function to get the new password.
*/
- SamOEMhash((uchar *) lmdata, (uchar *) smbpw->smb_passwd, 516);
+ SamOEMhash((uchar *) lmdata, (uchar *) smbpw->smb_passwd, True);
/*
* The length of the new password is in the last 4 bytes of
diff --git a/source/smbd/conn.c b/source/smbd/conn.c
index 725ab22dc44..e160c6ac83d 100644
--- a/source/smbd/conn.c
+++ b/source/smbd/conn.c
@@ -198,33 +198,3 @@ void conn_free(connection_struct *conn)
ZERO_STRUCTP(conn);
free(conn);
}
-
-
-/****************************************************************************
-receive a smbcontrol message to forcibly unmount a share
-the message contains just a share name and all instances of that
-share are unmounted
-the special sharename '*' forces unmount of all shares
-****************************************************************************/
-void msg_force_tdis(int msg_type, pid_t pid, void *buf, size_t len)
-{
- connection_struct *conn, *next;
- fstring sharename;
-
- fstrcpy(sharename, buf);
-
- if (strcmp(sharename, "*") == 0) {
- DEBUG(1,("Forcing close of all shares\n"));
- conn_close_all();
- return;
- }
-
- for (conn=Connections;conn;conn=next) {
- next=conn->next;
- if (strequal(lp_servicename(conn->service), sharename)) {
- DEBUG(1,("Forcing close of share %s cnum=%d\n",
- sharename, conn->cnum));
- close_cnum(conn, (uint16)-1);
- }
- }
-}
diff --git a/source/smbd/connection.c b/source/smbd/connection.c
index 796a54e77dd..4039c08da9f 100644
--- a/source/smbd/connection.c
+++ b/source/smbd/connection.c
@@ -27,6 +27,11 @@ static TDB_CONTEXT *tdb;
extern int DEBUGLEVEL;
+#ifdef WITH_UTMP
+static void utmp_yield(pid_t pid, const connection_struct *conn);
+static void utmp_claim(const struct connections_data *crec, const connection_struct *conn);
+#endif
+
/****************************************************************************
Return the connection tdb context (used for message send all).
****************************************************************************/
@@ -37,9 +42,8 @@ TDB_CONTEXT *conn_tdb_ctx(void)
}
/****************************************************************************
- Delete a connection record.
+delete a connection record
****************************************************************************/
-
BOOL yield_connection(connection_struct *conn,char *name,int max_connections)
{
struct connections_key key;
@@ -58,115 +62,31 @@ BOOL yield_connection(connection_struct *conn,char *name,int max_connections)
kbuf.dptr = (char *)&key;
kbuf.dsize = sizeof(key);
- if (tdb_delete(tdb, kbuf) != 0) {
- DEBUG(0,("yield_connection: tdb_delete failed with error %s.\n", tdb_errorstr(tdb) ));
- return (False);
- }
+ tdb_delete(tdb, kbuf);
+
+#ifdef WITH_UTMP
+ if(conn)
+ utmp_yield(key.pid, conn);
+#endif
return(True);
}
-struct count_stat {
- pid_t mypid;
- int curr_connections;
- char *name;
- BOOL Clear;
-};
-
-/****************************************************************************
- Count the entries belonging to a service in the connection db.
-****************************************************************************/
-
-static int count_fn( TDB_CONTEXT *the_tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *udp)
-{
- struct connections_data crec;
- struct count_stat *cs = (struct count_stat *)udp;
-
- if (dbuf.dsize != sizeof(crec))
- return 0;
-
- memcpy(&crec, dbuf.dptr, sizeof(crec));
-
- if (crec.cnum == -1)
- return 0;
-
- /* If the pid was not found delete the entry from connections.tdb */
-
- if (cs->Clear && !process_exists(crec.pid) && (errno == ESRCH)) {
- DEBUG(2,("pid %u doesn't exist - deleting connections %d [%s]\n",
- (unsigned int)crec.pid, crec.cnum, crec.name));
- if (tdb_delete(the_tdb, kbuf) != 0)
- DEBUG(0,("count_fn: tdb_delete failed with error %s\n", tdb_errorstr(tdb) ));
- return 0;
- }
-
- if (strequal(crec.name, cs->name))
- cs->curr_connections++;
-
- return 0;
-}
/****************************************************************************
- Claim an entry in the connections database.
+claim an entry in the connections database
****************************************************************************/
-
BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOOL Clear)
{
struct connections_key key;
struct connections_data crec;
- TDB_DATA kbuf, dbuf, lockkey;
- BOOL rec_locked = False;
- BOOL ret = True;
+ TDB_DATA kbuf, dbuf;
if (!tdb) {
- tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST,
+ tdb = tdb_open(lock_path("connections.tdb"), 0, TDB_CLEAR_IF_FIRST,
O_RDWR | O_CREAT, 0644);
}
- if (!tdb)
- return False;
-
- /*
- * Enforce the max connections parameter.
- */
-
- if (max_connections > 0) {
- struct count_stat cs;
-
- cs.mypid = sys_getpid();
- cs.curr_connections = 0;
- cs.name = lp_servicename(SNUM(conn));
- cs.Clear = Clear;
-
- lockkey.dptr = cs.name;
- lockkey.dsize = strlen(cs.name)+1;
-
- /*
- * Go through and count the connections with hash chain representing the service name
- * locked. This is slow but removes race conditions. JRA.
- */
-
- if (tdb_chainlock(tdb, lockkey)) {
- DEBUG(0,("claim_connection: tdb_chainlock failed %s\n",
- tdb_errorstr(tdb) ));
- return False;
- }
-
- rec_locked = True;
-
- if (tdb_traverse(tdb, count_fn, &cs) == -1) {
- DEBUG(0,("claim_connection: traverse of connections.tdb failed with error %s.\n",
- tdb_errorstr(tdb) ));
- ret = False;
- goto out;
- }
-
- if (cs.curr_connections >= max_connections) {
- DEBUG(1,("claim_connection: Max connections (%d) exceeded for %s\n",
- max_connections, name ));
- ret = False;
- goto out;
- }
- }
+ if (!tdb) return False;
DEBUG(5,("claiming %s %d\n",name,max_connections));
@@ -198,16 +118,771 @@ BOOL claim_connection(connection_struct *conn,char *name,int max_connections,BOO
dbuf.dptr = (char *)&crec;
dbuf.dsize = sizeof(crec);
- if (tdb_store(tdb, kbuf, dbuf, TDB_REPLACE) != 0) {
- DEBUG(0,("claim_connection: tdb_store failed with error %s.\n",
- tdb_errorstr(tdb) ));
- ret = False;
+ if (tdb_store(tdb, kbuf, dbuf, TDB_REPLACE) != 0) return False;
+
+#ifdef WITH_UTMP
+ if (conn)
+ utmp_claim(&crec, conn);
+#endif
+
+ return True;
+}
+
+#ifdef WITH_UTMP
+
+/****************************************************************************
+Reflect connection status in utmp/wtmp files.
+ T.D.Lee@durham.ac.uk September 1999
+
+ With grateful thanks since then to many who have helped port it to
+ different operating systems. The variety of OS quirks thereby
+ uncovered is amazing...
+
+Hints for porting:
+ o Always attempt to use programmatic interface (pututline() etc.)
+ Indeed, at present only programmatic use is supported.
+ o The only currently supported programmatic interface to "wtmp{,x}"
+ is through "updwtmp*()" routines.
+ o The "x" (utmpx/wtmpx; HAVE_UTMPX_H) seems preferable.
+ o The HAVE_* items should identify supported features.
+ o If at all possible, avoid "if defined(MY-OS)" constructions.
+
+OS observations and status:
+ Almost every OS seems to have its own quirks.
+
+ Solaris 2.x:
+ Tested on 2.6 and 2.7; should be OK on other flavours.
+ AIX:
+ Apparently has utmpx.h but doesn't implement.
+ OSF:
+ Has utmpx.h, but (e.g.) no "getutmpx()". (Is this like AIX ?)
+ Redhat 6:
+ utmpx.h seems not to set default filenames. non-x better.
+ IRIX 6.5:
+ Not tested. Appears to have "x".
+ HP-UX 9.x:
+ Not tested. Appears to lack "x".
+ HP-UX 10.x:
+ Not tested.
+ "updwtmp*()" routines seem absent, so no current wtmp* support.
+ Has "ut_addr": probably trivial to implement (although remember
+ that IPv6 is coming...).
+
+ FreeBSD:
+ No "putut*()" type of interface.
+ No "ut_type" and associated defines.
+ Write files directly. Alternatively use its login(3)/logout(3).
+ SunOS 4:
+ Not tested. Resembles FreeBSD, but no login()/logout().
+
+lastlog:
+ Should "lastlog" files, if any, be updated?
+ BSD systems (SunOS 4, FreeBSD):
+ o Prominent mention on man pages.
+ System-V (e.g. Solaris 2):
+ o No mention on man pages, even under "man -k".
+ o Has a "/var/adm/lastlog" file, but pututxline() etc. seem
+ not to touch it.
+ o Despite downplaying (above), nevertheless has <lastlog.h>.
+ So perhaps UN*X "lastlog" facility is intended for tty/terminal only?
+
+Notes:
+ Each connection requires a small number (starting at 0, working up)
+ to represent the line (unum). This must be unique within and across
+ all smbd processes.
+
+ The 4 byte 'ut_id' component is vital to distinguish connections,
+ of which there could be several hundered or even thousand.
+ Entries seem to be printable characters, with optional NULL pads.
+
+ We need to be distinct from other entries in utmp/wtmp.
+
+ Observed things: therefore avoid them. Add to this list please.
+ From Solaris 2.x (because that's what I have):
+ 'sN' : run-levels; N: [0-9]
+ 'co' : console
+ 'CC' : arbitrary things; C: [a-z]
+ 'rXNN' : rlogin; N: [0-9]; X: [0-9a-z]
+ 'tXNN' : rlogin; N: [0-9]; X: [0-9a-z]
+ '/NNN' : Solaris CDE
+ 'ftpZ' : ftp (Z is the number 255, aka 0377, aka 0xff)
+ Mostly a record uses the same 'ut_id' in both "utmp" and "wtmp",
+ but differences have been seen.
+
+ Arbitrarily I have chosen to use a distinctive 'SM' for the
+ first two bytes.
+
+ The remaining two encode the "unum" (see above).
+
+ For "utmp consolidate" the suggestion was made to encode the pid into
+ those remaining two bytes (16 bits). But recent UNIX (e.g Solaris 8)
+ is migrating to pids > 16 bits, so we ought not to do this.
+
+****************************************************************************/
+
+#include <utmp.h>
+
+#ifdef HAVE_UTMPX_H
+#include <utmpx.h>
+#endif
+
+/* BSD systems: some may need lastlog.h (SunOS 4), some may not (FreeBSD) */
+/* Some System-V systems (e.g. Solaris 2) declare this too. */
+#ifdef HAVE_LASTLOG_H
+#include <lastlog.h>
+#endif
+
+/****************************************************************************
+obtain/release a small number (0 upwards) unique within and across smbds
+****************************************************************************/
+/*
+ * Need a "small" number to represent this connection, unique within this
+ * smbd and across all smbds.
+ *
+ * claim:
+ * Start at 0, hunt up for free, unique number "unum" by attempting to
+ * store it as a key in a tdb database:
+ * key: unum data: pid+conn
+ * Also store its inverse, ready for yield function:
+ * key: pid+conn data: unum
+ *
+ * yield:
+ * Find key: pid+conn; data is unum; delete record
+ * Find key: unum ; delete record.
+ *
+ * Comment:
+ * The claim algorithm (a "for" loop attempting to store numbers in a tdb
+ * database) will be increasingly inefficient with larger numbers of
+ * connections. Is it possible to write a suitable primitive within tdb?
+ *
+ * However, by also storing the inverse key/data pair, we at least make
+ * the yield algorithm efficient.
+ */
+
+static TDB_CONTEXT *tdb_utmp;
+
+struct utmp_tdb_data {
+ pid_t pid;
+ int cnum;
+};
+
+static int utmp_claim_tdb(const connection_struct *conn)
+{
+ struct utmp_tdb_data udata;
+ int i, slotnum;
+ TDB_DATA kbuf, dbuf;
+
+ if (!tdb_utmp) {
+ tdb_utmp = tdb_open(lock_path("utmp.tdb"), 0,
+ TDB_CLEAR_IF_FIRST, O_RDWR | O_CREAT, 0644);
+ }
+ if (!tdb_utmp) return(-1);
+
+ DEBUG(2,("utmp_claim_tdb: entered\n"));
+
+ ZERO_STRUCT(udata);
+ udata.pid = sys_getpid();
+ udata.cnum = conn ? conn->cnum : -1;
+
+ dbuf.dptr = (char *) &udata;
+ dbuf.dsize = sizeof(udata);
+
+ /* The key is simply a number as close as possible to zero: find it */
+ slotnum = -1;
+ /* stop loop when overflow +ve integers (a huge, busy machine!) */
+ for (i = 0; i >= 0 ; i++) {
+ kbuf.dptr = (char *) &i;
+ kbuf.dsize = sizeof(i);
+
+ if (tdb_store(tdb_utmp, kbuf, dbuf, TDB_INSERT) == 0) {
+ /* have successfully grabbed a free slot */
+ slotnum = i;
+
+ /* store the inverse for faster utmp_yield_tdb() */
+ tdb_store(tdb_utmp, dbuf, kbuf, TDB_INSERT);
+
+ break; /* Got it; escape */
+ }
+ }
+ if (slotnum < 0) { /* more connections than positive integers! */
+ DEBUG(2,("utmp_claim_tdb: failed\n"));
+ return(-1);
+ }
+
+ DEBUG(2,("utmp_claim_tdb: leaving with %d\n", slotnum));
+
+ return(slotnum);
+}
+
+static int utmp_yield_tdb(const connection_struct *conn)
+{
+ struct utmp_tdb_data revkey;
+ int i, slotnum;
+ TDB_DATA kbuf, dbuf;
+
+ if (!tdb_utmp) {
+ return(-1);
+ }
+
+ DEBUG(2,("utmp_yield_tdb: entered\n"));
+
+ ZERO_STRUCT(revkey);
+ revkey.pid = sys_getpid();
+ revkey.cnum = conn ? conn->cnum : -1;
+
+ kbuf.dptr = (char *) &revkey;
+ kbuf.dsize = sizeof(revkey);
+
+ dbuf = tdb_fetch(tdb_utmp, kbuf);
+ if (dbuf.dptr == NULL) {
+ DEBUG(2,("utmp_yield_tdb: failed\n"));
+ return(-1); /* shouldn't happen */
+ }
+
+ /* Save our result */
+ slotnum = *((int*) dbuf.dptr);
+
+ /* Tidy up */
+ tdb_delete(tdb_utmp, kbuf);
+ tdb_delete(tdb_utmp, dbuf);
+
+ free(dbuf.dptr);
+ DEBUG(2,("utmp_yield_tdb: leaving with %d\n", slotnum));
+
+ return(slotnum);
+}
+
+#if defined(HAVE_UT_UT_ID)
+/****************************************************************************
+encode the unique connection number into "ut_id"
+****************************************************************************/
+static const char *ut_id_encstr =
+ "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+
+static
+int
+ut_id_encode(int i, char *fourbyte)
+{
+ int nbase;
+
+ fourbyte[0] = 'S';
+ fourbyte[1] = 'M';
+
+/*
+ * Encode remaining 2 bytes from 'i'.
+ * 'ut_id_encstr' is the character set on which modulo arithmetic is done.
+ * Example: digits would produce the base-10 numbers from '001'.
+ */
+ nbase = strlen(ut_id_encstr);
+
+ fourbyte[3] = ut_id_encstr[i % nbase];
+ i /= nbase;
+ fourbyte[2] = ut_id_encstr[i % nbase];
+ i /= nbase;
+
+ return(i); /* 0: good; else overflow */
+}
+#endif /* defined(HAVE_UT_UT_ID) */
+
+/*
+ * ut_line:
+ * size small, e.g. Solaris: 12; FreeBSD: 8
+ * pattern conventions differ across systems.
+ * So take care in tweaking the template below.
+ * Arguably, this could be yet another smb.conf parameter.
+ */
+static const char *ut_line_template =
+#if defined(__FreeBSD__)
+ "smb%d" ;
+#else
+ "smb/%d" ;
+#endif
+
+/****************************************************************************
+Fill in a utmp (not utmpx) template
+****************************************************************************/
+static int utmp_fill(struct utmp *u, const connection_struct *conn, pid_t pid,
+ int i, pstring host)
+{
+#if defined(HAVE_UT_UT_TIME)
+ struct timeval timeval;
+#endif /* defined(HAVE_UT_UT_TIME) */
+ char line_tmp[1024]; /* plenty big enough for slprintf() */
+ int line_len;
+ int rc = 0;
+
+/*
+ * ut_name, ut_user:
+ * Several (all?) systems seems to define one as the other.
+ * It is easier and clearer simply to let the following take its course,
+ * rather than to try to detect and optimise.
+ */
+#if defined(HAVE_UT_UT_USER)
+ pstrcpy(u->ut_user, conn->user);
+#endif /* defined(HAVE_UT_UT_USER) */
+
+#if defined(HAVE_UT_UT_NAME)
+ pstrcpy(u->ut_name, conn->user);
+#endif /* defined(HAVE_UT_UT_NAME) */
+
+/*
+ * ut_line:
+ * If size limit proves troublesome, then perhaps use "ut_id_encode()".
+ *
+ * Temporary variable "line_tmp" avoids trouble:
+ * o with unwanted trailing NULL if ut_line full;
+ * o with overflow if ut_line would be more than full.
+ */
+ memset(line_tmp, '\0', sizeof(line_tmp));
+ slprintf(line_tmp, sizeof(line_tmp)-1, (char *) ut_line_template, i);
+ line_len = strlen(line_tmp);
+ if (line_len <= sizeof(u->ut_line)) {
+ memcpy(u->ut_line, line_tmp, sizeof(u->ut_line));
+ }
+ else {
+ DEBUG(1,("utmp_fill: ut_line exceeds field length(%d > %d)\n",
+ line_len, sizeof(u->ut_line)));
+ return(1);
+ }
+
+#if defined(HAVE_UT_UT_PID)
+ u->ut_pid = pid;
+#endif /* defined(HAVE_UT_UT_PID) */
+
+/*
+ * ut_time, ut_tv:
+ * Some have one, some the other. Many have both, but defined (aliased).
+ * It is easier and clearer simply to let the following take its course.
+ * But note that we do the more precise ut_tv as the final assignment.
+ */
+#if defined(HAVE_UT_UT_TIME)
+ gettimeofday(&timeval, NULL);
+ u->ut_time = timeval.tv_sec;
+#endif /* defined(HAVE_UT_UT_TIME) */
+
+#if defined(HAVE_UT_UT_TV)
+ gettimeofday(&timeval, NULL);
+ u->ut_tv = timeval;
+#endif /* defined(HAVE_UT_UT_TV) */
+
+#if defined(HAVE_UT_UT_HOST)
+ if (host) {
+ pstrcpy(u->ut_host, host);
+ }
+#endif /* defined(HAVE_UT_UT_HOST) */
+
+#if defined(HAVE_UT_UT_ADDR)
+ /*
+ * "(unsigned long) ut_addr" apparently exists on at least HP-UX 10.20.
+ * Volunteer to implement, please ...
+ */
+#endif /* defined(HAVE_UT_UT_ADDR) */
+
+#if defined(HAVE_UT_UT_ID)
+ rc = ut_id_encode(i, u->ut_id);
+#endif /* defined(HAVE_UT_UT_ID) */
+
+ return(rc);
+}
+
+/****************************************************************************
+Default paths to various {u,w}tmp{,x} files
+****************************************************************************/
+#ifdef HAVE_UTMPX_H
+
+static const char *ux_pathname =
+# if defined (UTMPX_FILE)
+ UTMPX_FILE ;
+# elif defined (_UTMPX_FILE)
+ _UTMPX_FILE ;
+# elif defined (_PATH_UTMPX)
+ _PATH_UTMPX ;
+# else
+ "" ;
+# endif
+
+static const char *wx_pathname =
+# if defined (WTMPX_FILE)
+ WTMPX_FILE ;
+# elif defined (_WTMPX_FILE)
+ _WTMPX_FILE ;
+# elif defined (_PATH_WTMPX)
+ _PATH_WTMPX ;
+# else
+ "" ;
+# endif
+
+#endif /* HAVE_UTMPX_H */
+
+static const char *ut_pathname =
+# if defined (UTMP_FILE)
+ UTMP_FILE ;
+# elif defined (_UTMP_FILE)
+ _UTMP_FILE ;
+# elif defined (_PATH_UTMP)
+ _PATH_UTMP ;
+# else
+ "" ;
+# endif
+
+static const char *wt_pathname =
+# if defined (WTMP_FILE)
+ WTMP_FILE ;
+# elif defined (_WTMP_FILE)
+ _WTMP_FILE ;
+# elif defined (_PATH_WTMP)
+ _PATH_WTMP ;
+# else
+ "" ;
+# endif
+
+/* BSD-like systems might want "lastlog" support. */
+/* *** Not yet implemented */
+#ifndef HAVE_PUTUTLINE /* see "pututline_my()" */
+static const char *ll_pathname =
+# if defined (_PATH_LASTLOG) /* what other names (if any?) */
+ _PATH_LASTLOG ;
+# else
+ "" ;
+# endif /* _PATH_LASTLOG */
+#endif /* HAVE_PUTUTLINE */
+
+/*
+ * Get name of {u,w}tmp{,x} file.
+ * return: fname contains filename
+ * Possibly empty if this code not yet ported to this system.
+ *
+ * utmp{,x}: try "utmp dir", then default (a define)
+ * wtmp{,x}: try "wtmp dir", then "utmp dir", then default (a define)
+ */
+static void uw_pathname(pstring fname, const char *uw_name, const char *uw_default)
+{
+ pstring dirname;
+
+ pstrcpy(dirname, "");
+
+ /* For w-files, first look for explicit "wtmp dir" */
+ if (uw_name[0] == 'w') {
+ pstrcpy(dirname,lp_wtmpdir());
+ trim_string(dirname,"","/");
+ }
+
+ /* For u-files and non-explicit w-dir, look for "utmp dir" */
+ if (dirname == 0 || strlen(dirname) == 0) {
+ pstrcpy(dirname,lp_utmpdir());
+ trim_string(dirname,"","/");
}
- out:
+ /* If explicit directory above, use it */
+ if (dirname != 0 && strlen(dirname) != 0) {
+ pstrcpy(fname, dirname);
+ pstrcat(fname, "/");
+ pstrcat(fname, uw_name);
+ return;
+ }
- if (rec_locked)
- tdb_chainunlock(tdb, lockkey);
+ /* No explicit directory: attempt to use default paths */
+ if (strlen(uw_default) == 0) {
+ /* No explicit setting, no known default.
+ * Has it yet been ported to this OS?
+ */
+ DEBUG(2,("uw_pathname: unable to determine pathname\n"));
+ }
+ pstrcpy(fname, uw_default);
+}
- return ret;
+#ifndef HAVE_PUTUTLINE
+/****************************************************************************
+Update utmp file directly. No subroutine interface: probably a BSD system.
+****************************************************************************/
+static void pututline_my(pstring uname, struct utmp *u, BOOL claim)
+{
+ DEBUG(1,("pututline_my: not yet implemented\n"));
+ /* BSD implementor: may want to consider (or not) adjusting "lastlog" */
}
+#endif /* HAVE_PUTUTLINE */
+
+#ifndef HAVE_UPDWTMP
+/****************************************************************************
+Update wtmp file directly. No subroutine interface: probably a BSD system.
+Credit: Michail Vidiassov <master@iaas.msu.ru>
+****************************************************************************/
+static void updwtmp_my(pstring wname, struct utmp *u, BOOL claim)
+{
+ int fd;
+ struct stat buf;
+
+ if (! claim) {
+ /*
+ * BSD-like systems:
+ * may use empty ut_name to distinguish a logout record.
+ *
+ * May need "if defined(SUNOS4)" etc. around some of these,
+ * but try to avoid if possible.
+ *
+ * SunOS 4:
+ * man page indicates ut_name and ut_host both NULL
+ * FreeBSD 4.0:
+ * man page appears not to specify (hints non-NULL)
+ * A correspondent suggest at least ut_name should be NULL
+ */
+ memset((char *)&(u->ut_name), '\0', sizeof(u->ut_name));
+ memset((char *)&(u->ut_host), '\0', sizeof(u->ut_host));
+ }
+ /* Stolen from logwtmp function in libutil.
+ * May be more locking/blocking is needed?
+ */
+ if ((fd = open(wname, O_WRONLY|O_APPEND, 0)) < 0)
+ return;
+ if (fstat(fd, &buf) == 0) {
+ if (write(fd, (char *)u, sizeof(struct utmp)) != sizeof(struct utmp))
+ (void) ftruncate(fd, buf.st_size);
+ }
+ (void) close(fd);
+}
+#endif /* HAVE_UPDWTMP */
+
+/****************************************************************************
+Update via utmp/wtmp (not utmpx/wtmpx)
+****************************************************************************/
+static void utmp_nox_update(struct utmp *u, pstring host, BOOL claim)
+{
+ pstring uname, wname;
+#if defined(PUTUTLINE_RETURNS_UTMP)
+ struct utmp *urc;
+#endif /* PUTUTLINE_RETURNS_UTMP */
+
+ uw_pathname(uname, "utmp", ut_pathname);
+ DEBUG(2,("utmp_nox_update: uname:%s\n", uname));
+
+#ifdef HAVE_PUTUTLINE
+ if (strlen(uname) != 0) {
+ utmpname(uname);
+ }
+
+# if defined(PUTUTLINE_RETURNS_UTMP)
+ setutent();
+ urc = pututline(u);
+ endutent();
+ if (urc == NULL) {
+ DEBUG(2,("utmp_nox_update: pututline() failed\n"));
+ return;
+ }
+# else /* PUTUTLINE_RETURNS_UTMP */
+ setutent();
+ pututline(u);
+ endutent();
+# endif /* PUTUTLINE_RETURNS_UTMP */
+
+#else /* HAVE_PUTUTLINE */
+ if (strlen(uname) != 0) {
+ pututline_my(uname, u, claim);
+ }
+#endif /* HAVE_PUTUTLINE */
+
+ uw_pathname(wname, "wtmp", wt_pathname);
+ DEBUG(2,("utmp_nox_update: wname:%s\n", wname));
+ if (strlen(wname) != 0) {
+#ifdef HAVE_UPDWTMP
+ updwtmp(wname, u);
+ /*
+ * updwtmp() and the newer updwtmpx() may be unsymmetrical.
+ * At least one OS, Solaris 2.x declares the former in the
+ * "utmpx" (latter) file and context.
+ * In the Solaris case this is irrelevant: it has both and
+ * we always prefer the "x" case, so doesn't come here.
+ * But are there other systems, with no "x", which lack
+ * updwtmp() perhaps?
+ */
+#else
+ updwtmp_my(wname, u, claim);
+#endif /* HAVE_UPDWTMP */
+ }
+}
+
+/****************************************************************************
+Update via utmpx/wtmpx (preferred) or via utmp/wtmp
+****************************************************************************/
+static void utmp_update(struct utmp *u, pstring host, BOOL claim)
+{
+#if !defined(HAVE_UTMPX_H)
+ /* No utmpx stuff. Drop to non-x stuff */
+ utmp_nox_update(u, host, claim);
+#elif !defined(HAVE_PUTUTXLINE)
+ /* Odd. Have utmpx.h but no "pututxline()". Drop to non-x stuff */
+ DEBUG(1,("utmp_update: have utmpx.h but no pututxline() function\n"));
+ utmp_nox_update(u, host, claim);
+#elif !defined(HAVE_GETUTMPX)
+ /* Odd. Have utmpx.h but no "getutmpx()". Drop to non-x stuff */
+ DEBUG(1,("utmp_update: have utmpx.h but no getutmpx() function\n"));
+ utmp_nox_update(u, host, claim);
+#else
+ pstring uname, wname;
+ struct utmpx ux, *uxrc;
+
+ getutmpx(u, &ux);
+ if (host) {
+#if defined(HAVE_UX_UT_SYSLEN)
+ ux.ut_syslen = strlen(host) + 1; /* include end NULL */
+#endif /* defined(HAVE_UX_UT_SYSLEN) */
+ pstrcpy(ux.ut_host, host);
+ }
+
+ uw_pathname(uname, "utmpx", ux_pathname);
+ uw_pathname(wname, "wtmpx", wx_pathname);
+ DEBUG(2,("utmp_update: uname:%s wname:%s\n", uname, wname));
+ /*
+ * Check for either uname or wname being empty.
+ * Some systems, such as Redhat 6, have a "utmpx.h" which doesn't
+ * define default filenames.
+ * Also, our local installation has not provided an override.
+ * Drop to non-x method. (E.g. RH6 has good defaults in "utmp.h".)
+ */
+ if ((strlen(uname) == 0) || (strlen(wname) == 0)) {
+ utmp_nox_update(u, host, claim);
+ }
+ else {
+ utmpxname(uname);
+ setutxent();
+ uxrc = pututxline(&ux);
+ endutxent();
+ if (uxrc == NULL) {
+ DEBUG(2,("utmp_update: pututxline() failed\n"));
+ return;
+ }
+#ifdef HAVE_UPDWTMPX
+ updwtmpx(wname, &ux);
+#else
+ /* Have utmpx.h but no "updwtmpx()". */
+ DEBUG(1,("utmp_update: no updwtmpx() function\n"));
+#endif /* HAVE_UPDWTMPX */
+ }
+#endif /* HAVE_UTMPX_H */
+}
+
+/*
+ * "utmp consolidate": some background:
+ * False (default):
+ * In "utmp" files note every connection via this process.
+ * Argument "i" is simply a tty-like number we can use as-is.
+ * True:
+ * In "utmp" files, only note first open and final close. Keep:
+ * o count of open processes;
+ * o record value of first "i", to use as "i" in final close.
+ */
+static int utmp_count = 0;
+static int utmp_consolidate_conn_num;
+
+/****************************************************************************
+close a connection
+****************************************************************************/
+static void utmp_yield(pid_t pid, const connection_struct *conn)
+{
+ struct utmp u;
+ int conn_num, i;
+
+ if (! lp_utmp(SNUM(conn))) {
+ DEBUG(2,("utmp_yield: lp_utmp() NULL\n"));
+ return;
+ }
+
+ i = utmp_yield_tdb(conn);
+ if (i < 0) {
+ DEBUG(2,("utmp_yield: utmp_yield_tdb() failed\n"));
+ return;
+ }
+ conn_num = i;
+ DEBUG(2,("utmp_yield: conn: user:%s cnum:%d i:%d (utmp_count:%d)\n",
+ conn->user, conn->cnum, i, utmp_count));
+
+ utmp_count -= 1;
+ if (lp_utmp_consolidate()) {
+ if (utmp_count > 0) {
+ DEBUG(2,("utmp_yield: utmp consolidate: %d entries still open\n", utmp_count));
+ return;
+ }
+ else {
+ /* consolidate; final close: override conn_num */
+ conn_num = utmp_consolidate_conn_num;
+ }
+ }
+
+ memset((char *)&u, '\0', sizeof(struct utmp));
+
+#if defined(HAVE_UT_UT_EXIT)
+ u.ut_exit.e_termination = 0;
+ u.ut_exit.e_exit = 0;
+#endif /* defined(HAVE_UT_UT_EXIT) */
+
+#if defined(HAVE_UT_UT_TYPE)
+ u.ut_type = DEAD_PROCESS;
+#endif /* defined(HAVE_UT_UT_TYPE) */
+
+ if (utmp_fill(&u, conn, pid, conn_num, NULL) == 0) {
+ utmp_update(&u, NULL, False);
+ }
+}
+
+/****************************************************************************
+open a connection
+****************************************************************************/
+static void utmp_claim(const struct connections_data *crec, const connection_struct *conn)
+{
+ struct utmp u;
+ pstring host;
+ int i;
+
+ if (conn == NULL) {
+ DEBUG(2,("utmp_claim: conn NULL\n"));
+ return;
+ }
+
+ if (! lp_utmp(SNUM(conn))) {
+ DEBUG(2,("utmp_claim: lp_utmp() NULL\n"));
+ return;
+ }
+
+ i = utmp_claim_tdb(conn);
+ if (i < 0) {
+ DEBUG(2,("utmp_claim: utmp_claim_tdb() failed\n"));
+ return;
+ }
+
+ pstrcpy(host, lp_utmp_hostname());
+ if (host == 0 || strlen(host) == 0) {
+ pstrcpy(host, crec->machine);
+ }
+ else {
+ /* explicit "utmp host": expand for any "%" variables */
+ standard_sub_basic(host);
+ }
+
+ DEBUG(2,("utmp_claim: conn: user:%s cnum:%d i:%d (utmp_count:%d)\n",
+ conn->user, conn->cnum, i, utmp_count));
+ DEBUG(2,("utmp_claim: crec: pid:%d, cnum:%d name:%s addr:%s mach:%s DNS:%s host:%s\n",
+ crec->pid, crec->cnum, crec->name, crec->addr, crec->machine, client_name(), host));
+
+ utmp_count += 1;
+ if (lp_utmp_consolidate()) {
+ if (utmp_count > 1) {
+ DEBUG(2,("utmp_claim: utmp consolidate: %d entries already open\n", (utmp_count-1)));
+ return;
+ }
+ else {
+ /* consolidate; first open: keep record of "i" */
+ utmp_consolidate_conn_num = i;
+ }
+ }
+
+ memset((char *)&u, '\0', sizeof(struct utmp));
+
+#if defined(HAVE_UT_UT_TYPE)
+ u.ut_type = USER_PROCESS;
+#endif /* defined(HAVE_UT_UT_TYPE) */
+
+ if (utmp_fill(&u, conn, crec->pid, i, host) == 0) {
+ utmp_update(&u, host, True);
+ }
+}
+
+#endif /* WITH_UTMP */
diff --git a/source/smbd/dir.c b/source/smbd/dir.c
index fa9cbdc4a2a..5bf0dec9444 100644
--- a/source/smbd/dir.c
+++ b/source/smbd/dir.c
@@ -663,36 +663,6 @@ typedef struct
} Dir;
-
-/*******************************************************************
-check to see if a user can read a file. This is only approximate,
-it is used as part of the "hide unreadable" option. Don't
-use it for anything security sensitive
-********************************************************************/
-static BOOL user_can_read_file(connection_struct *conn, char *name)
-{
- SMB_STRUCT_STAT ste;
-
- /* if we can't stat it does not show it */
- if (vfs_stat(conn, name, &ste) != 0) return False;
-
- if (ste.st_uid == conn->uid) {
- return (ste.st_mode & S_IRUSR) == S_IRUSR;
- } else {
- int i;
- if (ste.st_gid == conn->gid) {
- return (ste.st_mode & S_IRGRP) == S_IRGRP;
- }
- for (i=0; i<conn->ngroups; i++) {
- if (conn->groups[i] == ste.st_gid) {
- return (ste.st_mode & S_IRGRP) == S_IRGRP;
- }
- }
- }
-
- return (ste.st_mode & S_IROTH) == S_IROTH;
-}
-
/*******************************************************************
Open a directory.
********************************************************************/
@@ -707,7 +677,6 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto)
if (!p) return(NULL);
dirp = (Dir *)malloc(sizeof(Dir));
if (!dirp) {
- DEBUG(0,("Out of memory in OpenDir\n"));
conn->vfs_ops.closedir(conn,p);
return(NULL);
}
@@ -726,18 +695,6 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto)
/* If it's a vetoed file, pretend it doesn't even exist */
if (use_veto && conn && IS_VETO_PATH(conn, n)) continue;
- /* Honour _hide unreadable_ option */
- if (conn && lp_hideunreadable(SNUM(conn))) {
- char *entry;
- int ret=0;
-
- if (asprintf(&entry, "%s/%s/%s", conn->origpath, name, n) > 0) {
- ret = user_can_read_file(conn, entry);
- free(entry);
- }
- if (!ret) continue;
- }
-
if (used + l > dirp->mallocsize) {
int s = MAX(used+l,used+2000);
char *r;
diff --git a/source/smbd/ipc.c b/source/smbd/ipc.c
index 76b043c2dac..6fd4951769f 100644
--- a/source/smbd/ipc.c
+++ b/source/smbd/ipc.c
@@ -103,12 +103,12 @@ void send_trans_reply(char *outbuf,
if (buffer_too_large)
{
/* issue a buffer size warning. on a DCE/RPC pipe, expect an SMBreadX... */
- if (!(global_client_caps & (CAP_NT_SMBS | CAP_STATUS32 ))) {
+ if (!(global_client_caps & (CAP_NT_SMBS | CAP_STATUS32 ))) {
/* Win9x version. */
SSVAL(outbuf, smb_err, ERRmoredata);
SCVAL(outbuf, smb_rcls, ERRDOS);
} else {
- SIVAL(outbuf, smb_flg2, SVAL(outbuf, smb_flg2) | FLAGS2_32_BIT_ERROR_CODES);
+ SIVAL(outbuf, smb_flg2, FLAGS2_32_BIT_ERROR_CODES);
SIVAL(outbuf, smb_rcls, 0x80000000 | STATUS_BUFFER_OVERFLOW);
}
}
@@ -128,8 +128,7 @@ void send_trans_reply(char *outbuf,
SSVAL(outbuf,smb_vwv9,0);
show_msg(outbuf);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("send_trans_reply: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
tot_data_sent = this_ldata;
tot_param_sent = this_lparam;
@@ -162,8 +161,7 @@ void send_trans_reply(char *outbuf,
SSVAL(outbuf,smb_vwv9,0);
show_msg(outbuf);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("send_trans_reply: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
tot_data_sent += this_ldata;
tot_param_sent += this_lparam;
@@ -426,8 +424,7 @@ int reply_trans(connection_struct *conn, char *inbuf,char *outbuf, int size, int
of the parameter/data bytes */
outsize = set_message(outbuf,0,0,True);
show_msg(outbuf);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("reply_trans: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
}
/* receive the rest of the trans packet */
@@ -492,18 +489,10 @@ int reply_trans(connection_struct *conn, char *inbuf,char *outbuf, int size, int
(name[strlen(local_machine)+1] == '\\'))
name_offset = strlen(local_machine)+1;
- if (strnequal(&name[name_offset], "\\PIPE", strlen("\\PIPE"))) {
- name_offset += strlen("\\PIPE");
-
- /* Win9x weirdness. When talking to a unicode server Win9x
- only sends \PIPE instead of \PIPE\ */
-
- if (name[name_offset] == '\\')
- name_offset++;
-
+ if (strncmp(&name[name_offset],"\\PIPE\\",strlen("\\PIPE\\")) == 0) {
DEBUG(5,("calling named_pipe\n"));
outsize = named_pipe(conn,vuid,outbuf,
- name+name_offset,setup,data,params,
+ name+name_offset+strlen("\\PIPE\\"),setup,data,params,
suwcnt,tdscnt,tpscnt,msrcnt,mdrcnt,mprcnt);
} else {
DEBUG(3,("invalid pipe name\n"));
diff --git a/source/smbd/message.c b/source/smbd/message.c
index b3da3f2b611..59b8cf85869 100644
--- a/source/smbd/message.c
+++ b/source/smbd/message.c
@@ -61,12 +61,13 @@ static void msg_deliver(void)
}
/*
- * Incoming message is in DOS codepage format. Convert to UNIX.
+ * Incoming message is in DOS codepage format. Convert to UNIX in
+ * place.
*/
if(msgpos > 0) {
msgbuf[msgpos] = '\0'; /* Ensure null terminated. */
- pstrcpy(msgbuf,dos_to_unix(msgbuf,False));
+ dos_to_unix(msgbuf,True);
}
for (i=0;i<msgpos;) {
diff --git a/source/smbd/negprot.c b/source/smbd/negprot.c
index 25419caf625..8ce9074d806 100644
--- a/source/smbd/negprot.c
+++ b/source/smbd/negprot.c
@@ -160,8 +160,6 @@ static int reply_nt1(char *outbuf)
/* dual names + lock_and_read + nt SMBs + remote API calls */
int capabilities = CAP_NT_FIND|CAP_LOCK_AND_READ|CAP_LEVEL_II_OPLOCKS|
(lp_nt_smb_support() ? CAP_NT_SMBS | CAP_RPC_REMOTE_APIS : 0) |
- ((lp_large_readwrite() && (SMB_OFF_T_BITS == 64)) ?
- CAP_LARGE_READX | CAP_LARGE_WRITEX | CAP_W2K_SMBS : 0) |
(SMB_OFF_T_BITS == 64 ? CAP_LARGE_FILES : 0);
diff --git a/source/smbd/notify.c b/source/smbd/notify.c
index 3c21ce1e1b5..429723c19e7 100644
--- a/source/smbd/notify.c
+++ b/source/smbd/notify.c
@@ -71,8 +71,7 @@ static void change_notify_reply_packet(char *inbuf, uint32 error_code)
*/
set_message(outbuf,18,0,False);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("change_notify_reply_packet: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
}
/****************************************************************************
diff --git a/source/smbd/notify_kernel.c b/source/smbd/notify_kernel.c
index d7408c06b57..6509354e9b9 100644
--- a/source/smbd/notify_kernel.c
+++ b/source/smbd/notify_kernel.c
@@ -24,9 +24,9 @@
#if HAVE_KERNEL_CHANGE_NOTIFY
extern int DEBUGLEVEL;
-static VOLATILE sig_atomic_t fd_pending;
-static VOLATILE sig_atomic_t signals_received;
-static VOLATILE sig_atomic_t signals_processed;
+static VOLATILE SIG_ATOMIC_T fd_pending;
+static VOLATILE SIG_ATOMIC_T signals_received;
+static VOLATILE SIG_ATOMIC_T signals_processed;
#ifndef DN_ACCESS
#define DN_ACCESS 0x00000001 /* File accessed in directory */
@@ -62,10 +62,10 @@ struct change_data {
/****************************************************************************
the signal handler for change notify
*****************************************************************************/
-static void signal_handler(int sig, siginfo_t *info, void *unused)
+static void signal_handler(int signal, siginfo_t *info, void *unused)
{
- BlockSignals(True, sig);
- fd_pending = (sig_atomic_t)info->si_fd;
+ BlockSignals(True, signal);
+ fd_pending = (SIG_ATOMIC_T)info->si_fd;
signals_received++;
sys_select_signal();
}
@@ -89,7 +89,7 @@ static BOOL kernel_check_notify(connection_struct *conn, uint16 vuid, char *path
DEBUG(3,("kernel change notify on %s fd=%d\n", path, (int)fd_pending));
close((int)fd_pending);
- fd_pending = (sig_atomic_t)-1;
+ fd_pending = (SIG_ATOMIC_T)-1;
data->directory_handle = -1;
signals_processed++;
BlockSignals(False, RT_SIGNAL_NOTIFY);
@@ -105,7 +105,7 @@ static void kernel_remove_notify(void *datap)
int fd = data->directory_handle;
if (fd != -1) {
if (fd == (int)fd_pending) {
- fd_pending = (sig_atomic_t)-1;
+ fd_pending = (SIG_ATOMIC_T)-1;
signals_processed++;
BlockSignals(False, RT_SIGNAL_NOTIFY);
}
diff --git a/source/smbd/nttrans.c b/source/smbd/nttrans.c
index 12339e91807..dcfc74d19a3 100644
--- a/source/smbd/nttrans.c
+++ b/source/smbd/nttrans.c
@@ -96,8 +96,7 @@ static int send_nt_replies(char *inbuf, char *outbuf, int bufsize, uint32 nt_err
*/
if(params_to_send == 0 && data_to_send == 0) {
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("send_nt_replies: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
return 0;
}
@@ -226,8 +225,7 @@ static int send_nt_replies(char *inbuf, char *outbuf, int bufsize, uint32 nt_err
params_to_send, data_to_send, paramsize, datasize));
/* Send the packet */
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("send_nt_replies: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
pp += params_sent_thistime;
pd += data_sent_thistime;
@@ -1884,8 +1882,7 @@ due to being in oplock break state.\n" ));
/* We need to send an interim response then receive the rest
of the parameter/data bytes */
outsize = set_message(outbuf,0,0,True);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("reply_nttrans: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
while( num_data_sofar < total_data_count || num_params_sofar < total_parameter_count) {
BOOL ret;
diff --git a/source/smbd/open.c b/source/smbd/open.c
index f6a634f3779..c6d4a44688c 100644
--- a/source/smbd/open.c
+++ b/source/smbd/open.c
@@ -238,7 +238,7 @@ static int truncate_unless_locked(struct connection_struct *conn, files_struct *
{
SMB_BIG_UINT mask = (SMB_BIG_UINT)-1;
- if (is_locked(fsp,fsp->conn,mask,0,WRITE_LOCK,True)){
+ if (is_locked(fsp,fsp->conn,mask,0,WRITE_LOCK)){
errno = EACCES;
unix_ERR_class = ERRDOS;
unix_ERR_code = ERRlock;
@@ -492,8 +492,8 @@ static int open_mode_check(connection_struct *conn, const char *fname, SMB_DEV_T
BOOL opb_ret;
- DEBUG(5,("open_mode_check: oplock_request = %d, breaking oplock (%x) on file %s, \
-dev = %x, inode = %.0f\n", *p_oplock_request, share_entry->op_type, fname, (unsigned int)dev, (double)inode));
+ DEBUG(5,("open_mode_check: breaking oplock (%x) on file %s, \
+dev = %x, inode = %.0f\n", share_entry->op_type, fname, (unsigned int)dev, (double)inode));
/* Oplock break - unlock to request it. */
unlock_share_entry(conn, dev, inode);
@@ -596,11 +596,11 @@ files_struct *open_file_shared(connection_struct *conn,char *fname, SMB_STRUCT_S
uint16 port = 0;
if (conn->printer) {
- /* printers are handled completely differently. Most
- of the passed parameters are ignored */
+ /* printers are handled completely differently. Most of the passed parameters are
+ ignored */
*Access = DOS_OPEN_WRONLY;
*action = FILE_WAS_CREATED;
- return print_fsp_open(conn);
+ return print_fsp_open(conn, fname);
}
fsp = file_new(conn);
diff --git a/source/smbd/oplock.c b/source/smbd/oplock.c
index cc2581375ea..e0b494017a0 100644
--- a/source/smbd/oplock.c
+++ b/source/smbd/oplock.c
@@ -572,8 +572,7 @@ BOOL oplock_break_level2(files_struct *fsp, BOOL local_request, int token)
/* Prepare the SMBlockingX message. */
prepare_break_message( outbuf, fsp, False);
- if (!send_smb(smbd_server_fd(), outbuf))
- exit_server("oplock_break_level2: send_smb failed.\n");
+ send_smb(smbd_server_fd(), outbuf);
}
/*
@@ -677,13 +676,13 @@ static BOOL oplock_break(SMB_DEV_T dev, SMB_INO_T inode, struct timeval *tval, B
messages crossing on the wire.
*/
- if((inbuf = (char *)malloc(BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE + SAFETY_MARGIN))==NULL)
+ if((inbuf = (char *)malloc(BUFFER_SIZE + SAFETY_MARGIN))==NULL)
{
DEBUG(0,("oplock_break: malloc fail for input buffer.\n"));
return False;
}
- if((outbuf = (char *)malloc(BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE + SAFETY_MARGIN))==NULL)
+ if((outbuf = (char *)malloc(BUFFER_SIZE + SAFETY_MARGIN))==NULL)
{
DEBUG(0,("oplock_break: malloc fail for output buffer.\n"));
free(inbuf);
@@ -717,8 +716,7 @@ static BOOL oplock_break(SMB_DEV_T dev, SMB_INO_T inode, struct timeval *tval, B
fsp->sent_oplock_break = using_levelII?
LEVEL_II_BREAK_SENT:EXCLUSIVE_BREAK_SENT;
- if (!send_smb(smbd_server_fd(), outbuf))
- exit_server("oplock_break: send_smb failed.\n");
+ send_smb(smbd_server_fd(), outbuf);
/* We need this in case a readraw crosses on the wire. */
global_oplock_break = True;
@@ -1195,7 +1193,7 @@ setup oplocks for this process
BOOL init_oplocks(void)
{
struct sockaddr_in sock_name;
- socklen_t len = sizeof(sock_name);
+ int len = sizeof(sock_name);
DEBUG(3,("open_oplock_ipc: opening loopback UDP socket.\n"));
diff --git a/source/smbd/oplock_linux.c b/source/smbd/oplock_linux.c
index 39ee3eb86b3..e070761f108 100644
--- a/source/smbd/oplock_linux.c
+++ b/source/smbd/oplock_linux.c
@@ -25,9 +25,9 @@
extern int DEBUGLEVEL;
-static VOLATILE sig_atomic_t signals_received;
-static VOLATILE sig_atomic_t signals_processed;
-static VOLATILE sig_atomic_t fd_pending; /* the fd of the current pending signal */
+static VOLATILE SIG_ATOMIC_T signals_received;
+static VOLATILE SIG_ATOMIC_T signals_processed;
+static VOLATILE SIG_ATOMIC_T fd_pending; /* the fd of the current pending signal */
#ifndef F_SETLEASE
#define F_SETLEASE 1024
@@ -52,10 +52,10 @@ static VOLATILE sig_atomic_t fd_pending; /* the fd of the current pending signal
/****************************************************************************
handle a LEASE signal, incrementing the signals_received and blocking the signal
****************************************************************************/
-static void signal_handler(int sig, siginfo_t *info, void *unused)
+static void signal_handler(int signal, siginfo_t *info, void *unused)
{
- BlockSignals(True, sig);
- fd_pending = (sig_atomic_t)info->si_fd;
+ BlockSignals(True, signal);
+ fd_pending = (SIG_ATOMIC_T)info->si_fd;
signals_received++;
sys_select_signal();
}
@@ -127,7 +127,7 @@ static BOOL linux_oplock_receive_message(fd_set *fds, char *buffer, int buffer_l
SMB_DEV_T dev;
SMB_INO_T inode;
SMB_STRUCT_STAT sbuf;
- BOOL ret = True;
+ BOOL ret;
if (signals_received == signals_processed) return False;
@@ -160,11 +160,11 @@ dev = %x, inode = %.0f\n", (unsigned int)dev, (double)inode ));
out:
/* now we can receive more signals */
- fd_pending = (sig_atomic_t)-1;
+ fd_pending = (SIG_ATOMIC_T)-1;
signals_processed++;
BlockSignals(False, RT_SIGNAL_LEASE);
- return ret;
+ return True;
}
diff --git a/source/smbd/password.c b/source/smbd/password.c
index 5ae1c89ace7..1844b90dd05 100644
--- a/source/smbd/password.c
+++ b/source/smbd/password.c
@@ -110,9 +110,8 @@ user_struct *get_valid_user_struct(uint16 vuid)
for (usp=validated_users;usp;usp=usp->next,count++) {
if (vuid == usp->vuid) {
- if (count > 10) {
- DLIST_PROMOTE(validated_users, usp);
- }
+ if (count > 10)
+ DLIST_PROMOTE(validated_users, usp);
return usp;
}
}
@@ -130,8 +129,6 @@ void invalidate_vuid(uint16 vuid)
if (vuser == NULL)
return;
- session_yield(vuid);
-
DLIST_REMOVE(validated_users, vuser);
safe_free(vuser->groups);
@@ -141,20 +138,6 @@ void invalidate_vuid(uint16 vuid)
}
/****************************************************************************
-invalidate all vuid entries for this process
-****************************************************************************/
-void invalidate_all_vuids(void)
-{
- user_struct *usp, *next=NULL;
-
- for (usp=validated_users;usp;usp=next) {
- next = usp->next;
-
- invalidate_vuid(usp->vuid);
- }
-}
-
-/****************************************************************************
return a validated username
****************************************************************************/
char *validated_username(uint16 vuid)
@@ -261,8 +244,8 @@ has been given. vuid is biased by an offset. This allows us to
tell random client vuid's (normally zero) from valid vuids.
****************************************************************************/
-int register_vuid(uid_t uid,gid_t gid, char *unix_name, char *requested_name,
- char *domain,BOOL guest)
+uint16 register_vuid(uid_t uid,gid_t gid, char *unix_name, char *requested_name,
+ char *domain,BOOL guest)
{
user_struct *vuser = NULL;
struct passwd *pwfile; /* for getting real name from passwd file */
@@ -322,15 +305,12 @@ int register_vuid(uid_t uid,gid_t gid, char *unix_name, char *requested_name,
DEBUG(3,("uid %d registered to name %s\n",(int)uid,unix_name));
DEBUG(3, ("Clearing default real name\n"));
- if ((pwfile=sys_getpwnam(vuser->user.unix_name))!= NULL) {
- DEBUG(3, ("User name: %s\tReal name: %s\n",vuser->user.unix_name,pwfile->pw_gecos));
- fstrcpy(vuser->user.full_name, pwfile->pw_gecos);
- }
-
- if (!session_claim(vuser->vuid)) {
- DEBUG(1,("Failed to claim session for vuid=%d\n", vuser->vuid));
- invalidate_vuid(vuser->vuid);
- return -1;
+ fstrcpy(vuser->user.full_name, "<Full Name>");
+ if (lp_unix_realname()) {
+ if ((pwfile=sys_getpwnam(vuser->user.unix_name))!= NULL) {
+ DEBUG(3, ("User name: %s\tReal name: %s\n",vuser->user.unix_name,pwfile->pw_gecos));
+ fstrcpy(vuser->user.full_name, pwfile->pw_gecos);
+ }
}
return vuser->vuid;
@@ -450,7 +430,7 @@ BOOL smb_password_ok(struct smb_passwd *smb_pass, uchar chal[8],
if (!lm_pass || !smb_pass) return(False);
- DEBUG(4,("smb_password_ok: Checking SMB password for user %s\n",
+ DEBUG(4,("Checking SMB password for user %s\n",
smb_pass->smb_name));
if(smb_pass->acct_ctrl & ACB_DISABLED) {
@@ -491,24 +471,24 @@ BOOL smb_password_ok(struct smb_passwd *smb_pass, uchar chal[8],
/* Try against the lanman password. smb_pass->smb_passwd == NULL means
no password, allow access. */
+ DEBUG(4,("Checking LM MD4 password\n"));
+
if((smb_pass->smb_passwd == NULL) &&
(smb_pass->acct_ctrl & ACB_PWNOTREQ)) {
- DEBUG(4,("smb_password_ok: no password required for user %s\n",
+ DEBUG(4,("no password required for user %s\n",
smb_pass->smb_name));
return True;
}
- if(lp_lanman_auth() && (smb_pass->smb_passwd != NULL)) {
- DEBUG(4,("smb_password_ok: Checking LM password\n"));
-
- if (smb_password_check((char *)lm_pass,
+ if((smb_pass->smb_passwd != NULL) &&
+ smb_password_check((char *)lm_pass,
(uchar *)smb_pass->smb_passwd, challenge)) {
- DEBUG(4,("smb_password_ok: LM password check succeeded\n"));
- return(True);
- }
- DEBUG(4,("LM password check failed\n"));
+ DEBUG(4,("LM MD4 password check succeeded\n"));
+ return(True);
}
+ DEBUG(4,("LM MD4 password check failed\n"));
+
return False;
}
@@ -595,40 +575,37 @@ return True if the password is correct, False otherwise
BOOL password_ok(char *user, char *password, int pwlen, struct passwd *pwd)
{
- BOOL ret;
+ BOOL ret;
if ((pwlen == 0) && !lp_null_passwords()) {
DEBUG(4,("Null passwords not allowed.\n"));
return False;
}
- if (pwlen == 24 || (lp_encrypted_passwords() && (pwlen == 0) && lp_null_passwords())) {
+ if (pwlen == 24 || (lp_encrypted_passwords() && (pwlen == 0) && lp_null_passwords()))
+ {
/* if 24 bytes long assume it is an encrypted password */
uchar challenge[8];
- if (!last_challenge(challenge)) {
+ if (!last_challenge(challenge))
+ {
DEBUG(0,("Error: challenge not done for user=%s\n", user));
return False;
}
ret = pass_check_smb(user, global_myworkgroup,
challenge, (uchar *)password, (uchar *)password, pwd);
-
- /*
- * Try with PAM (may not be compiled in - returns True if not. JRA).
- * FIXME ! Should this be called if we're using winbindd ? What about
- * non-local accounts ? JRA.
- */
-
- if (ret)
- return (smb_pam_accountcheck(user) == NT_STATUS_NOPROBLEMO);
-
+#ifdef WITH_PAM
+ if (ret) {
+ return pam_accountcheck(user);
+ }
+#endif
return ret;
}
- return (pass_check(user, password, pwlen, pwd,
+ return pass_check(user, password, pwlen, pwd,
lp_update_encrypted() ?
- update_smbpassword_file : NULL));
+ update_smbpassword_file : NULL);
}
/****************************************************************************
@@ -748,182 +725,167 @@ static char *validate_group(char *group,char *password,int pwlen,int snum)
return(NULL);
}
+
+
/****************************************************************************
- Check for authority to login to a service with a given username/password.
- Note this is *NOT* used when logging on using sessionsetup_and_X.
+check for authority to login to a service with a given username/password
****************************************************************************/
-
BOOL authorise_login(int snum,char *user,char *password, int pwlen,
BOOL *guest,BOOL *force,uint16 vuid)
{
- BOOL ok = False;
- user_struct *vuser = get_valid_user_struct(vuid);
-
+ BOOL ok = False;
+
+ *guest = False;
+
#if DEBUG_PASSWORD
- DEBUG(100,("authorise_login: checking authorisation on user=%s pass=%s\n",
- user,password));
+ DEBUG(100,("checking authorisation on user=%s pass=%s\n",user,password));
#endif
- *guest = False;
-
- if (GUEST_ONLY(snum))
- *force = True;
+ /* there are several possibilities:
+ 1) login as the given user with given password
+ 2) login as a previously registered username with the given password
+ 3) login as a session list username with the given password
+ 4) login as a previously validated user/password pair
+ 5) login as the "user =" user with given password
+ 6) login as the "user =" user with no password (guest connection)
+ 7) login as guest user with no password
- if (!GUEST_ONLY(snum) && (lp_security() > SEC_SHARE)) {
+ if the service is guest_only then steps 1 to 5 are skipped
+ */
- /*
- * We should just use the given vuid from a sessionsetup_and_X.
- */
+ if (GUEST_ONLY(snum)) *force = True;
- if (!vuser) {
- DEBUG(1,("authorise_login: refusing user %s with no session setup\n",
- user));
- return False;
- }
+ if (!(GUEST_ONLY(snum) && GUEST_OK(snum)))
+ {
- if (!vuser->guest && user_ok(vuser->user.unix_name,snum)) {
- fstrcpy(user,vuser->user.unix_name);
- *guest = False;
- DEBUG(3,("authorise_login: ACCEPTED: validated uid ok as non-guest \
-(user=%s)\n", user));
- return True;
- }
+ user_struct *vuser = get_valid_user_struct(vuid);
+
+ /* check the given username and password */
+ if (!ok && (*user) && user_ok(user,snum)) {
+ ok = password_ok(user,password, pwlen, NULL);
+ if (ok) DEBUG(3,("ACCEPTED: given username password ok\n"));
+ }
+
+ /* check for a previously registered guest username */
+ if (!ok && (vuser != 0) && vuser->guest) {
+ if (user_ok(vuser->user.unix_name,snum) &&
+ password_ok(vuser->user.unix_name, password, pwlen, NULL)) {
+ fstrcpy(user, vuser->user.unix_name);
+ vuser->guest = False;
+ DEBUG(3,("ACCEPTED: given password with registered user %s\n", user));
+ ok = True;
}
-
- /* there are several possibilities:
- 1) login as the given user with given password
- 2) login as a previously registered username with the given password
- 3) login as a session list username with the given password
- 4) login as a previously validated user/password pair
- 5) login as the "user =" user with given password
- 6) login as the "user =" user with no password (guest connection)
- 7) login as guest user with no password
-
- if the service is guest_only then steps 1 to 5 are skipped
- */
-
- if (!(GUEST_ONLY(snum) && GUEST_OK(snum))) {
- /* check the given username and password */
- if (!ok && (*user) && user_ok(user,snum)) {
- ok = password_ok(user,password, pwlen, NULL);
- if (ok)
- DEBUG(3,("authorise_login: ACCEPTED: given username (%s) password ok\n",
- user ));
- }
+ }
- /* check for a previously registered guest username */
- if (!ok && (vuser != 0) && vuser->guest) {
- if (user_ok(vuser->user.unix_name,snum) &&
- password_ok(vuser->user.unix_name, password, pwlen, NULL)) {
- fstrcpy(user, vuser->user.unix_name);
- vuser->guest = False;
- DEBUG(3,("authorise_login: ACCEPTED: given password with registered user %s\n", user));
- ok = True;
- }
- }
- /* now check the list of session users */
- if (!ok) {
- char *auser;
- char *user_list = strdup(session_users);
- if (!user_list)
- return(False);
-
- for (auser=strtok(user_list,LIST_SEP); !ok && auser;
- auser = strtok(NULL,LIST_SEP)) {
- fstring user2;
- fstrcpy(user2,auser);
- if (!user_ok(user2,snum))
- continue;
-
- if (password_ok(user2,password, pwlen, NULL)) {
- ok = True;
- fstrcpy(user,user2);
- DEBUG(3,("authorise_login: ACCEPTED: session list username (%s) \
-and given password ok\n", user));
- }
- }
+ /* now check the list of session users */
+ if (!ok)
+ {
+ char *auser;
+ char *user_list = strdup(session_users);
+ if (!user_list) return(False);
- free(user_list);
- }
+ for (auser=strtok(user_list,LIST_SEP);
+ !ok && auser;
+ auser = strtok(NULL,LIST_SEP))
+ {
+ fstring user2;
+ fstrcpy(user2,auser);
+ if (!user_ok(user2,snum)) continue;
+
+ if (password_ok(user2,password, pwlen, NULL)) {
+ ok = True;
+ fstrcpy(user,user2);
+ DEBUG(3,("ACCEPTED: session list username and given password ok\n"));
+ }
+ }
+ free(user_list);
+ }
- /* check for a previously validated username/password pair */
- if (!ok && (lp_security() > SEC_SHARE) && (vuser != 0) && !vuser->guest &&
- user_ok(vuser->user.unix_name,snum)) {
- fstrcpy(user,vuser->user.unix_name);
- *guest = False;
- DEBUG(3,("authorise_login: ACCEPTED: validated uid (%s) as non-guest\n",
- user));
- ok = True;
- }
+ /* check for a previously validated username/password pair */
+ if (!ok && (lp_security() > SEC_SHARE) &&
+ (vuser != 0) && !vuser->guest &&
+ user_ok(vuser->user.unix_name,snum)) {
+ fstrcpy(user,vuser->user.unix_name);
+ *guest = False;
+ DEBUG(3,("ACCEPTED: validated uid ok as non-guest\n"));
+ ok = True;
+ }
- /* check for a rhosts entry */
- if (!ok && user_ok(user,snum) && check_hosts_equiv(user)) {
- ok = True;
- DEBUG(3,("authorise_login: ACCEPTED: hosts equiv or rhosts entry for %s\n",
- user));
- }
+ /* check for a rhosts entry */
+ if (!ok && user_ok(user,snum) && check_hosts_equiv(user)) {
+ ok = True;
+ DEBUG(3,("ACCEPTED: hosts equiv or rhosts entry\n"));
+ }
- /* check the user= fields and the given password */
- if (!ok && lp_username(snum)) {
- char *auser;
- pstring user_list;
- StrnCpy(user_list,lp_username(snum),sizeof(pstring));
+ /* check the user= fields and the given password */
+ if (!ok && lp_username(snum)) {
+ char *auser;
+ pstring user_list;
+ StrnCpy(user_list,lp_username(snum),sizeof(pstring));
- pstring_sub(user_list,"%S",lp_servicename(snum));
+ pstring_sub(user_list,"%S",lp_servicename(snum));
- for (auser=strtok(user_list,LIST_SEP); auser && !ok;
- auser = strtok(NULL,LIST_SEP)) {
- if (*auser == '@') {
- auser = validate_group(auser+1,password,pwlen,snum);
- if (auser) {
- ok = True;
- fstrcpy(user,auser);
- DEBUG(3,("authorise_login: ACCEPTED: group username \
-and given password ok (%s)\n", user));
- }
- } else {
- fstring user2;
- fstrcpy(user2,auser);
- if (user_ok(user2,snum) && password_ok(user2,password,pwlen,NULL)) {
- ok = True;
- fstrcpy(user,user2);
- DEBUG(3,("authorise_login: ACCEPTED: user list username \
-and given password ok (%s)\n", user));
- }
- }
- }
- }
- } /* not guest only */
-
- /* check for a normal guest connection */
- if (!ok && GUEST_OK(snum)) {
- fstring guestname;
- StrnCpy(guestname,lp_guestaccount(snum),sizeof(guestname)-1);
- if (Get_Pwnam(guestname,True)) {
- fstrcpy(user,guestname);
- ok = True;
- DEBUG(3,("authorise_login: ACCEPTED: guest account and guest ok (%s)\n",
- user));
- } else {
- DEBUG(0,("authorise_login: Invalid guest account %s??\n",guestname));
- }
- *guest = True;
- }
+ for (auser=strtok(user_list,LIST_SEP);
+ auser && !ok;
+ auser = strtok(NULL,LIST_SEP))
+ {
+ if (*auser == '@')
+ {
+ auser = validate_group(auser+1,password,pwlen,snum);
+ if (auser)
+ {
+ ok = True;
+ fstrcpy(user,auser);
+ DEBUG(3,("ACCEPTED: group username and given password ok\n"));
+ }
+ }
+ else
+ {
+ fstring user2;
+ fstrcpy(user2,auser);
+ if (user_ok(user2,snum) &&
+ password_ok(user2,password,pwlen,NULL))
+ {
+ ok = True;
+ fstrcpy(user,user2);
+ DEBUG(3,("ACCEPTED: user list username and given password ok\n"));
+ }
+ }
+ }
+ }
+ } /* not guest only */
- if (ok && !user_ok(user,snum)) {
- DEBUG(0,("authorise_login: rejected invalid user %s\n",user));
- ok = False;
+ /* check for a normal guest connection */
+ if (!ok && GUEST_OK(snum))
+ {
+ fstring guestname;
+ StrnCpy(guestname,lp_guestaccount(snum),sizeof(guestname)-1);
+ if (Get_Pwnam(guestname,True))
+ {
+ fstrcpy(user,guestname);
+ ok = True;
+ DEBUG(3,("ACCEPTED: guest account and guest ok\n"));
}
+ else
+ DEBUG(0,("Invalid guest account %s??\n",guestname));
+ *guest = True;
+ }
- return(ok);
+ if (ok && !user_ok(user,snum))
+ {
+ DEBUG(0,("rejected invalid user %s\n",user));
+ ok = False;
+ }
+
+ return(ok);
}
+
/****************************************************************************
- Read the a hosts.equiv or .rhosts file and check if it
- allows this user from this machine.
+read the a hosts.equiv or .rhosts file and check if it
+allows this user from this machine
****************************************************************************/
-
static BOOL check_user_equiv(char *user, char *remote, char *equiv_file)
{
int plus_allowed = 1;
@@ -1150,103 +1112,96 @@ BOOL server_validate(char *user, char *domain,
char *pass, int passlen,
char *ntpass, int ntpasslen)
{
- struct cli_state *cli;
- static unsigned char badpass[24];
- static fstring baduser;
- static BOOL tested_password_server = False;
- static BOOL bad_password_server = False;
-
- cli = server_client();
+ struct cli_state *cli;
+ static unsigned char badpass[24];
+ static BOOL tested_password_server = False;
+ static BOOL bad_password_server = False;
- if (!cli->initialised) {
- DEBUG(1,("password server %s is not connected\n", cli->desthost));
- return(False);
- }
+ cli = server_client();
- if(badpass[0] == 0)
- memset(badpass, 0x1f, sizeof(badpass));
+ if (!cli->initialised) {
+ DEBUG(1,("password server %s is not connected\n", cli->desthost));
+ return(False);
+ }
- if((passlen == sizeof(badpass)) && !memcmp(badpass, pass, passlen)) {
- /*
- * Very unlikely, our random bad password is the same as the users
- * password.
- */
- memset(badpass, badpass[0]+1, sizeof(badpass));
- }
+ if(badpass[0] == 0)
+ memset(badpass, 0x1f, sizeof(badpass));
- if(baduser[0] == 0) {
- fstrcpy(baduser, INVALID_USER_PREFIX);
- fstrcat(baduser, global_myname);
- }
+ if((passlen == sizeof(badpass)) && !memcmp(badpass, pass, passlen)) {
+ /*
+ * Very unlikely, our random bad password is the same as the users
+ * password. */
+ memset(badpass, badpass[0]+1, sizeof(badpass));
+ }
- /*
- * Attempt a session setup with a totally incorrect password.
- * If this succeeds with the guest bit *NOT* set then the password
- * server is broken and is not correctly setting the guest bit. We
- * need to detect this as some versions of NT4.x are broken. JRA.
- */
+ /*
+ * Attempt a session setup with a totally incorrect password.
+ * If this succeeds with the guest bit *NOT* set then the password
+ * server is broken and is not correctly setting the guest bit. We
+ * need to detect this as some versions of NT4.x are broken. JRA.
+ */
- if(!tested_password_server) {
- if (cli_session_setup(cli, baduser, (char *)badpass, sizeof(badpass),
- (char *)badpass, sizeof(badpass), domain)) {
+ if(!tested_password_server) {
+ if (cli_session_setup(cli, user, (char *)badpass, sizeof(badpass),
+ (char *)badpass, sizeof(badpass), domain)) {
- /*
- * We connected to the password server so we
- * can say we've tested it.
- */
- tested_password_server = True;
+ /*
+ * We connected to the password server so we
+ * can say we've tested it.
+ */
+ tested_password_server = True;
- if ((SVAL(cli->inbuf,smb_vwv2) & 1) == 0) {
- DEBUG(0,("server_validate: password server %s allows users as non-guest \
+ if ((SVAL(cli->inbuf,smb_vwv2) & 1) == 0) {
+ DEBUG(0,("server_validate: password server %s allows users as non-guest \
with a bad password.\n", cli->desthost));
- DEBUG(0,("server_validate: This is broken (and insecure) behaviour. Please do not \
+ DEBUG(0,("server_validate: This is broken (and insecure) behaviour. Please do not \
use this machine as the password server.\n"));
- cli_ulogoff(cli);
+ cli_ulogoff(cli);
- /*
- * Password server has the bug.
- */
- bad_password_server = True;
- return False;
- }
- cli_ulogoff(cli);
- }
- } else {
+ /*
+ * Password server has the bug.
+ */
+ bad_password_server = True;
+ return False;
+ }
+ cli_ulogoff(cli);
+ }
+ } else {
- /*
- * We have already tested the password server.
- * Fail immediately if it has the bug.
- */
+ /*
+ * We have already tested the password server.
+ * Fail immediately if it has the bug.
+ */
- if(bad_password_server) {
- DEBUG(0,("server_validate: [1] password server %s allows users as non-guest \
+ if(bad_password_server) {
+ DEBUG(0,("server_validate: [1] password server %s allows users as non-guest \
with a bad password.\n", cli->desthost));
- DEBUG(0,("server_validate: [1] This is broken (and insecure) behaviour. Please do not \
+ DEBUG(0,("server_validate: [1] This is broken (and insecure) behaviour. Please do not \
use this machine as the password server.\n"));
- return False;
- }
- }
+ return False;
+ }
+ }
- /*
- * Now we know the password server will correctly set the guest bit, or is
- * not guest enabled, we can try with the real password.
- */
+ /*
+ * Now we know the password server will correctly set the guest bit, or is
+ * not guest enabled, we can try with the real password.
+ */
- if (!cli_session_setup(cli, user, pass, passlen, ntpass, ntpasslen, domain)) {
- DEBUG(1,("password server %s rejected the password\n", cli->desthost));
- return False;
- }
+ if (!cli_session_setup(cli, user, pass, passlen, ntpass, ntpasslen, domain)) {
+ DEBUG(1,("password server %s rejected the password\n", cli->desthost));
+ return False;
+ }
- /* if logged in as guest then reject */
- if ((SVAL(cli->inbuf,smb_vwv2) & 1) != 0) {
- DEBUG(1,("password server %s gave us guest only\n", cli->desthost));
- cli_ulogoff(cli);
- return(False);
- }
+ /* if logged in as guest then reject */
+ if ((SVAL(cli->inbuf,smb_vwv2) & 1) != 0) {
+ DEBUG(1,("password server %s gave us guest only\n", cli->desthost));
+ cli_ulogoff(cli);
+ return(False);
+ }
- cli_ulogoff(cli);
+ cli_ulogoff(cli);
- return(True);
+ return(True);
}
/***********************************************************************
@@ -1255,12 +1210,13 @@ use this machine as the password server.\n"));
************************************************************************/
static BOOL connect_to_domain_password_server(struct cli_state *pcli,
- char *server, unsigned char *trust_passwd)
+ char *server,
+ unsigned char *trust_passwd)
{
struct in_addr dest_ip;
fstring remote_machine;
- if(!cli_initialise(pcli)) {
+ if(cli_initialise(pcli) == False) {
DEBUG(0,("connect_to_domain_password_server: unable to initialize client connection.\n"));
return False;
}
@@ -1558,9 +1514,9 @@ BOOL domain_client_validate( char *user, char *domain,
/*
* Get the machine account password for our primary domain
*/
- if (!secrets_fetch_trust_account_password(global_myworkgroup, trust_passwd, &last_change_time))
+ if (!secrets_fetch_trust_account_password(lp_workgroup(), trust_passwd, &last_change_time))
{
- DEBUG(0, ("domain_client_validate: could not fetch trust account password for domain %s\n", global_myworkgroup));
+ DEBUG(0, ("domain_client_validate: could not fetch trust account password for domain %s\n", lp_workgroup()));
return False;
}
diff --git a/source/smbd/posix_acls.c b/source/smbd/posix_acls.c
index 4832184df71..a9c88212387 100644
--- a/source/smbd/posix_acls.c
+++ b/source/smbd/posix_acls.c
@@ -459,60 +459,19 @@ static BOOL unpack_nt_owners(SMB_STRUCT_STAT *psbuf, uid_t *puser, gid_t *pgrp,
}
/****************************************************************************
- Ensure the enforced permissions for this share apply.
-****************************************************************************/
-
-static mode_t apply_default_perms(files_struct *fsp, mode_t perms, mode_t type)
-{
- int snum = SNUM(fsp->conn);
- mode_t and_bits = (mode_t)0;
- mode_t or_bits = (mode_t)0;
-
- /* Get the initial bits to apply. */
-
- if (fsp->is_directory) {
- and_bits = lp_dir_security_mask(snum);
- or_bits = lp_force_dir_security_mode(snum);
- } else {
- and_bits = lp_security_mask(snum);
- or_bits = lp_force_security_mode(snum);
- }
-
- /* Now bounce them into the S_USR space. */
- switch(type) {
- case S_IRUSR:
- and_bits = unix_perms_to_acl_perms(and_bits, S_IRUSR, S_IWUSR, S_IXUSR);
- or_bits = unix_perms_to_acl_perms(or_bits, S_IRUSR, S_IWUSR, S_IXUSR);
- break;
- case S_IRGRP:
- and_bits = unix_perms_to_acl_perms(and_bits, S_IRGRP, S_IWGRP, S_IXGRP);
- or_bits = unix_perms_to_acl_perms(or_bits, S_IRGRP, S_IWGRP, S_IXGRP);
- break;
- case S_IROTH:
- and_bits = unix_perms_to_acl_perms(and_bits, S_IROTH, S_IWOTH, S_IXOTH);
- or_bits = unix_perms_to_acl_perms(or_bits, S_IROTH, S_IWOTH, S_IXOTH);
- break;
- }
-
- return ((perms & and_bits)|or_bits);
-}
-
-/****************************************************************************
A well formed POSIX file or default ACL has at least 3 entries, a
SMB_ACL_USER_OBJ, SMB_ACL_GROUP_OBJ, SMB_ACL_OTHER_OBJ.
In addition, the owner must always have at least read access.
When using this call on get_acl, the pst struct is valid and contains
the mode of the file. When using this call on set_acl, the pst struct has
- been modified to have a mode containing the default for this file or directory
- type.
+ been modified to have a mode of r--------.
****************************************************************************/
static BOOL ensure_canon_entry_valid(canon_ace **pp_ace,
files_struct *fsp,
DOM_SID *pfile_owner_sid,
DOM_SID *pfile_grp_sid,
- SMB_STRUCT_STAT *pst,
- BOOL setting_acl)
+ SMB_STRUCT_STAT *pst)
{
extern DOM_SID global_sid_World;
canon_ace *pace;
@@ -522,40 +481,14 @@ static BOOL ensure_canon_entry_valid(canon_ace **pp_ace,
for (pace = *pp_ace; pace; pace = pace->next) {
if (pace->type == SMB_ACL_USER_OBJ) {
-
- if (setting_acl) {
- /* Ensure owner has read access. */
- pace->perms |= S_IRUSR;
- if (fsp->is_directory)
- pace->perms |= (S_IWUSR|S_IXUSR);
-
- /*
- * Ensure create mask/force create mode is respected on set.
- */
-
- pace->perms = apply_default_perms(fsp, pace->perms, S_IRUSR);
- }
-
+ /* Ensure owner has read access. */
+ if (pace->perms == (mode_t)0)
+ pace->perms = S_IRUSR;
got_user = True;
- } else if (pace->type == SMB_ACL_GROUP_OBJ) {
-
- /*
- * Ensure create mask/force create mode is respected on set.
- */
-
- if (setting_acl)
- pace->perms = apply_default_perms(fsp, pace->perms, S_IRGRP);
+ } else if (pace->type == SMB_ACL_GROUP_OBJ)
got_grp = True;
- } else if (pace->type == SMB_ACL_OTHER) {
-
- /*
- * Ensure create mask/force create mode is respected on set.
- */
-
- if (setting_acl)
- pace->perms = apply_default_perms(fsp, pace->perms, S_IROTH);
+ else if (pace->type == SMB_ACL_OTHER)
got_other = True;
- }
}
if (!got_user) {
@@ -569,7 +502,10 @@ static BOOL ensure_canon_entry_valid(canon_ace **pp_ace,
pace->owner_type = UID_ACE;
pace->unix_ug.uid = pst->st_uid;
pace->sid = *pfile_owner_sid;
+ /* Ensure owner has read access. */
pace->perms = unix_perms_to_acl_perms(pst->st_mode, S_IRUSR, S_IWUSR, S_IXUSR);
+ if (pace->perms == (mode_t)0)
+ pace->perms = S_IRUSR;
pace->attr = ALLOW_ACE;
DLIST_ADD(*pp_ace, pace);
@@ -631,19 +567,18 @@ static BOOL create_canon_ace_lists(files_struct *fsp,
canon_ace *current_ace = NULL;
BOOL got_dir_allow = False;
BOOL got_file_allow = False;
- int i, j;
+ int i;
*ppfile_ace = NULL;
*ppdir_ace = NULL;
- /*
- * Convert the incoming ACL into a more regular form.
- */
-
for(i = 0; i < dacl->num_aces; i++) {
+ enum SID_NAME_USE sid_type;
SEC_ACE *psa = &dacl->ace[i];
if((psa->type != SEC_ACE_TYPE_ACCESS_ALLOWED) && (psa->type != SEC_ACE_TYPE_ACCESS_DENIED)) {
+ free_canon_ace_list(file_ace);
+ free_canon_ace_list(dir_ace);
DEBUG(3,("create_canon_ace_lists: unable to set anything but an ALLOW or DENY ACE.\n"));
return False;
}
@@ -665,50 +600,6 @@ static BOOL create_canon_ace_lists(files_struct *fsp,
if(psa->info.mask != UNIX_ACCESS_NONE)
psa->info.mask &= ~UNIX_ACCESS_NONE;
- }
-
- /*
- * Deal with the fact that NT 4.x re-writes the canonical format
- * that we return for default ACLs. If a directory ACE is identical
- * to a inherited directory ACE then NT changes the bits so that the
- * first ACE is set to OI|IO and the second ACE for this SID is set
- * to CI. We need to repair this. JRA.
- */
-
- for(i = 0; i < dacl->num_aces; i++) {
- SEC_ACE *psa1 = &dacl->ace[i];
-
- for (j = i + 1; j < dacl->num_aces; j++) {
- SEC_ACE *psa2 = &dacl->ace[j];
-
- if (psa1->info.mask != psa2->info.mask)
- continue;
-
- if (!sid_equal(&psa1->sid, &psa2->sid))
- continue;
-
- /*
- * Ok - permission bits and SIDs are equal.
- * Check if flags were re-written.
- */
-
- if (psa1->flags & SEC_ACE_FLAG_INHERIT_ONLY) {
-
- psa1->flags |= (psa2->flags & (SEC_ACE_FLAG_CONTAINER_INHERIT|SEC_ACE_FLAG_OBJECT_INHERIT));
- psa2->flags &= ~(SEC_ACE_FLAG_CONTAINER_INHERIT|SEC_ACE_FLAG_OBJECT_INHERIT);
-
- } else if (psa2->flags & SEC_ACE_FLAG_INHERIT_ONLY) {
-
- psa2->flags |= (psa1->flags & (SEC_ACE_FLAG_CONTAINER_INHERIT|SEC_ACE_FLAG_OBJECT_INHERIT));
- psa1->flags &= ~(SEC_ACE_FLAG_CONTAINER_INHERIT|SEC_ACE_FLAG_OBJECT_INHERIT);
-
- }
- }
- }
-
- for(i = 0; i < dacl->num_aces; i++) {
- enum SID_NAME_USE sid_type;
- SEC_ACE *psa = &dacl->ace[i];
/*
* Create a cannon_ace entry representing this NT DACL ACE.
@@ -761,17 +652,14 @@ static BOOL create_canon_ace_lists(files_struct *fsp,
*/
if(sid_equal(&current_ace->sid, pfile_owner_sid)) {
-
+ /* Note we should apply the default mode/mask here.... FIXME ! JRA */
current_ace->type = SMB_ACL_USER_OBJ;
-
} else if( sid_equal(&current_ace->sid, pfile_grp_sid)) {
-
+ /* Note we should apply the default mode/mask here.... FIXME ! JRA */
current_ace->type = SMB_ACL_GROUP_OBJ;
-
} else if( sid_equal(&current_ace->sid, &global_sid_World)) {
-
+ /* Note we should apply the default mode/mask here.... FIXME ! JRA */
current_ace->type = SMB_ACL_OTHER;
-
} else {
/*
* Could be a SMB_ACL_USER or SMB_ACL_GROUP. Check by
@@ -1202,37 +1090,6 @@ static void process_deny_list( canon_ace **pp_ace_list )
}
/****************************************************************************
- Create a default mode that will be used if a security descriptor entry has
- no user/group/world entries.
-****************************************************************************/
-
-static mode_t create_default_mode(files_struct *fsp, BOOL interitable_mode)
-{
- int snum = SNUM(fsp->conn);
- mode_t and_bits = (mode_t)0;
- mode_t or_bits = (mode_t)0;
- mode_t mode = interitable_mode ? unix_mode( fsp->conn, FILE_ATTRIBUTE_ARCHIVE, fsp->fsp_name) : S_IRUSR;
-
- if (fsp->is_directory)
- mode |= (S_IWUSR|S_IXUSR);
-
- /*
- * Now AND with the create mode/directory mode bits then OR with the
- * force create mode/force directory mode bits.
- */
-
- if (fsp->is_directory) {
- and_bits = lp_dir_security_mask(snum);
- or_bits = lp_force_dir_security_mode(snum);
- } else {
- and_bits = lp_security_mask(snum);
- or_bits = lp_force_security_mode(snum);
- }
-
- return ((mode & and_bits)|or_bits);
-}
-
-/****************************************************************************
Unpack a SEC_DESC into two canonical ace lists. We don't depend on this
succeeding.
****************************************************************************/
@@ -1309,12 +1166,14 @@ static BOOL unpack_canon_ace(files_struct *fsp,
/*
* A default 3 element mode entry for a file should be r-- --- ---.
- * A default 3 element mode entry for a directory should be rwx --- ---.
+ * A default 3 element mode entry for a directory should be r-x --- ---.
*/
- pst->st_mode = create_default_mode(fsp, False);
+ pst->st_mode = S_IRUSR;
+ if (fsp->is_directory)
+ pst->st_mode |= S_IXUSR;
- if (!ensure_canon_entry_valid(&file_ace, fsp, pfile_owner_sid, pfile_grp_sid, pst, True)) {
+ if (!ensure_canon_entry_valid(&file_ace, fsp, pfile_owner_sid, pfile_grp_sid, pst)) {
free_canon_ace_list(file_ace);
free_canon_ace_list(dir_ace);
return False;
@@ -1324,13 +1183,15 @@ static BOOL unpack_canon_ace(files_struct *fsp,
/*
* A default inheritable 3 element mode entry for a directory should be the
- * mode Samba will use to create a file within. Ensure user rwx bits are set if
+ * mode Samba will use to create a file within. Ensure user x bit is set if
* it's a directory.
*/
- pst->st_mode = create_default_mode(fsp, True);
+ pst->st_mode = unix_mode( fsp->conn, FILE_ATTRIBUTE_ARCHIVE, fsp->fsp_name);
+ if (fsp->is_directory)
+ pst->st_mode |= S_IXUSR;
- if (!ensure_canon_entry_valid(&dir_ace, fsp, pfile_owner_sid, pfile_grp_sid, pst, True)) {
+ if (!ensure_canon_entry_valid(&dir_ace, fsp, pfile_owner_sid, pfile_grp_sid, pst)) {
free_canon_ace_list(file_ace);
free_canon_ace_list(dir_ace);
return False;
@@ -1345,6 +1206,7 @@ static BOOL unpack_canon_ace(files_struct *fsp,
}
+
/******************************************************************************
When returning permissions, try and fit NT display
semantics if possible. Note the the canon_entries here must have been malloced.
@@ -1515,7 +1377,7 @@ static canon_ace *canonicalise_acl( files_struct *fsp, SMB_ACL_T posix_acl, SMB_
* This next call will ensure we have at least a user/group/world set.
*/
- if (!ensure_canon_entry_valid(&list_head, fsp, powner, pgroup, psbuf, False))
+ if (!ensure_canon_entry_valid(&list_head, fsp, powner, pgroup, psbuf))
goto fail;
arrange_posix_perms(fsp->fsp_name,&list_head );
@@ -1525,7 +1387,7 @@ static canon_ace *canonicalise_acl( files_struct *fsp, SMB_ACL_T posix_acl, SMB_
* acl_mask. Ensure all DENY Entries are at the start of the list.
*/
- DEBUG(10,("canonicalise_acl: ace entries before arrange :\n"));
+ DEBUG(10,("canonicalize_acl: ace entries before arrange :\n"));
for ( ace_count = 0, ace = list_head; ace; ace = next_ace, ace_count++) {
next_ace = ace->next;
@@ -1543,7 +1405,7 @@ static canon_ace *canonicalise_acl( files_struct *fsp, SMB_ACL_T posix_acl, SMB_
}
}
- print_canon_ace_list( "canonicalise_acl: ace entries after arrange", list_head );
+ print_canon_ace_list( "canonicalize_acl: ace entries after arrange", list_head );
return list_head;
@@ -1641,7 +1503,7 @@ static BOOL set_canon_ace_list(files_struct *fsp, canon_ace *the_ace, BOOL defau
if (map_acl_perms_to_permset(p_ace->perms, &the_permset) == -1) {
DEBUG(0,("set_canon_ace_list: Failed to create permset for mode (%u) on entry %d. (%s)\n",
- (unsigned int)p_ace->perms, i, strerror(errno) ));
+ p_ace->perms, i, strerror(errno) ));
goto done;
}
@@ -1736,14 +1598,11 @@ static BOOL set_canon_ace_list(files_struct *fsp, canon_ace *the_ace, BOOL defau
static BOOL convert_canon_ace_to_posix_perms( files_struct *fsp, canon_ace *file_ace_list, mode_t *posix_perms)
{
- int snum = SNUM(fsp->conn);
size_t ace_count = count_canon_ace_list(file_ace_list);
canon_ace *ace_p;
canon_ace *owner_ace = NULL;
canon_ace *group_ace = NULL;
canon_ace *other_ace = NULL;
- mode_t and_bits;
- mode_t or_bits;
if (ace_count != 3) {
DEBUG(3,("convert_canon_ace_to_posix_perms: Too many ACE entries for file %s to convert to \
@@ -1778,23 +1637,8 @@ posix perms.\n", fsp->fsp_name ));
/* The owner must have at least read access. */
- *posix_perms |= S_IRUSR;
- if (fsp->is_directory)
- *posix_perms |= (S_IWUSR|S_IXUSR);
-
- /* If requested apply the masks. */
-
- /* Get the initial bits to apply. */
-
- if (fsp->is_directory) {
- and_bits = lp_dir_security_mask(snum);
- or_bits = lp_force_dir_security_mode(snum);
- } else {
- and_bits = lp_security_mask(snum);
- or_bits = lp_force_security_mode(snum);
- }
-
- *posix_perms = (((*posix_perms) & and_bits)|or_bits);
+ if (*posix_perms == (mode_t)0)
+ *posix_perms = S_IRUSR;
DEBUG(10,("convert_canon_ace_to_posix_perms: converted u=%o,g=%o,w=%o to perm=0%o for file %s.\n",
(int)owner_ace->perms, (int)group_ace->perms, (int)other_ace->perms, (int)*posix_perms,
@@ -1987,9 +1831,6 @@ BOOL set_nt_acl(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
canon_ace *file_ace_list = NULL;
canon_ace *dir_ace_list = NULL;
BOOL acl_perms = False;
- mode_t orig_mode = (mode_t)0;
- uid_t orig_uid;
- gid_t orig_gid;
DEBUG(10,("set_nt_acl: called for file %s\n", fsp->fsp_name ));
@@ -2005,11 +1846,6 @@ BOOL set_nt_acl(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
return False;
}
- /* Save the original elements we check against. */
- orig_mode = sbuf.st_mode;
- orig_uid = sbuf.st_uid;
- orig_gid = sbuf.st_gid;
-
/*
* Unpack the user/group/world id's.
*/
@@ -2021,7 +1857,7 @@ BOOL set_nt_acl(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
* Do we need to chown ?
*/
- if((user != (uid_t)-1 || grp != (uid_t)-1) && (orig_uid != user || orig_gid != grp)) {
+ if((user != (uid_t)-1 || grp != (uid_t)-1) && (sbuf.st_uid != user || sbuf.st_gid != grp)) {
DEBUG(3,("set_nt_acl: chown %s. uid = %u, gid = %u.\n",
fsp->fsp_name, (unsigned int)user, (unsigned int)grp ));
@@ -2053,11 +1889,6 @@ BOOL set_nt_acl(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
if(ret != 0)
return False;
}
-
- /* Save the original elements we check against. */
- orig_mode = sbuf.st_mode;
- orig_uid = sbuf.st_uid;
- orig_gid = sbuf.st_gid;
}
create_file_sids(&sbuf, &file_owner_sid, &file_grp_sid);
@@ -2101,25 +1932,12 @@ BOOL set_nt_acl(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
}
}
- if (acl_perms && acl_set_support && fsp->is_directory) {
- if (dir_ace_list) {
- if (!set_canon_ace_list(fsp, dir_ace_list, True, &acl_set_support)) {
- DEBUG(3,("set_nt_acl: failed to set default acl on directory %s (%s).\n", fsp->fsp_name, strerror(errno) ));
- free_canon_ace_list(file_ace_list);
- free_canon_ace_list(dir_ace_list);
- return False;
- }
- } else {
-
- /*
- * No default ACL - delete one if it exists.
- */
-
- if (sys_acl_delete_def_file(dos_to_unix(fsp->fsp_name,False)) == -1) {
- DEBUG(3,("set_nt_acl: sys_acl_delete_def_file failed (%s)\n", strerror(errno)));
- free_canon_ace_list(file_ace_list);
- return False;
- }
+ if (acl_perms && acl_set_support && fsp->is_directory && dir_ace_list) {
+ if (!set_canon_ace_list(fsp, dir_ace_list, True, &acl_set_support)) {
+ DEBUG(3,("set_nt_acl: failed to set default acl on directory %s (%s).\n", fsp->fsp_name, strerror(errno) ));
+ free_canon_ace_list(file_ace_list);
+ free_canon_ace_list(dir_ace_list);
+ return False;
}
}
@@ -2138,7 +1956,7 @@ BOOL set_nt_acl(files_struct *fsp, uint32 security_info_sent, SEC_DESC *psd)
return False;
}
- if (orig_mode != posix_perms) {
+ if (sbuf.st_mode != posix_perms) {
DEBUG(3,("set_nt_acl: chmod %s. perms = 0%o.\n",
fsp->fsp_name, (unsigned int)posix_perms ));
diff --git a/source/smbd/process.c b/source/smbd/process.c
index df2bd55f030..71d3c57b23c 100644
--- a/source/smbd/process.c
+++ b/source/smbd/process.c
@@ -48,7 +48,7 @@ extern char *last_inbuf;
extern char *InBuffer;
extern char *OutBuffer;
extern int smb_read_error;
-extern VOLATILE sig_atomic_t reload_after_sighup;
+extern VOLATILE SIG_ATOMIC_T reload_after_sighup;
extern BOOL global_machine_password_needs_changing;
extern fstring global_myworkgroup;
extern pstring global_myname;
@@ -693,12 +693,6 @@ static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize
if (!(flags & AS_USER))
unbecome_user();
- /* does this protocol need a valid tree connection? */
- if ((flags & AS_USER) && !conn) {
- return ERROR(ERRSRV, ERRinvnid);
- }
-
-
/* does this protocol need to be run as the connected user? */
if ((flags & AS_USER) && !become_user(conn,session_tag)) {
if (flags & AS_GUEST)
@@ -787,12 +781,12 @@ static BOOL smbd_process_limit(void)
/* Always add one to the smbd process count, as exit_server() always
* subtracts one.
*/
-
- total_smbds = 1; /* In case we need to create the entry. */
-
- if (tdb_change_int_atomic(conn_tdb_ctx(), "INFO/total_smbds", &total_smbds, 1) == -1)
- return True;
-
+ tdb_lock_bystring(conn_tdb_ctx(), "INFO/total_smbds");
+ total_smbds = tdb_fetch_int(conn_tdb_ctx(), "INFO/total_smbds");
+ total_smbds = total_smbds < 0 ? 1 : total_smbds + 1;
+ tdb_store_int(conn_tdb_ctx(), "INFO/total_smbds", total_smbds);
+ tdb_unlock_bystring(conn_tdb_ctx(), "INFO/total_smbds");
+
return total_smbds > lp_max_smbd_processes();
}
else
@@ -828,7 +822,7 @@ void process_smb(char *inbuf, char *outbuf)
static unsigned char buf[5] = {0x83, 0, 0, 1, 0x81};
DEBUG( 1, ( "Connection denied from %s\n",
client_addr() ) );
- (void)send_smb(smbd_server_fd(),(char *)buf);
+ send_smb(smbd_server_fd(),(char *)buf);
exit_server("connection denied");
}
}
@@ -866,8 +860,7 @@ void process_smb(char *inbuf, char *outbuf)
nread, smb_len(outbuf)));
}
else
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("process_smb: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
}
trans_num++;
}
@@ -1190,8 +1183,8 @@ void smbd_process(void)
time_t last_timeout_processing_time = time(NULL);
unsigned int num_smbs = 0;
- InBuffer = (char *)malloc(BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE + SAFETY_MARGIN);
- OutBuffer = (char *)malloc(BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE + SAFETY_MARGIN);
+ InBuffer = (char *)malloc(BUFFER_SIZE + SAFETY_MARGIN);
+ OutBuffer = (char *)malloc(BUFFER_SIZE + SAFETY_MARGIN);
if ((InBuffer == NULL) || (OutBuffer == NULL))
return;
@@ -1203,9 +1196,6 @@ void smbd_process(void)
/* re-initialise the timezone */
TimeInit();
- /* register our message handlers */
- message_register(MSG_SMB_FORCE_TDIS, msg_force_tdis);
-
while (True) {
int deadtime = lp_deadtime()*60;
int select_timeout = setup_select_timeout();
@@ -1220,7 +1210,7 @@ void smbd_process(void)
lp_talloc_free();
main_loop_talloc_free();
- while (!receive_message_or_smb(InBuffer,BUFFER_SIZE+LARGE_WRITEX_HDR_SIZE,select_timeout)) {
+ while (!receive_message_or_smb(InBuffer,BUFFER_SIZE,select_timeout)) {
if(!timeout_processing( deadtime, &select_timeout, &last_timeout_processing_time))
return;
num_smbs = 0; /* Reset smb counter. */
@@ -1256,7 +1246,7 @@ void smbd_process(void)
if ((num_smbs % 200) == 0) {
time_t new_check_time = time(NULL);
- if(new_check_time - last_timeout_processing_time >= (select_timeout/1000)) {
+ if(last_timeout_processing_time - new_check_time >= (select_timeout/1000)) {
if(!timeout_processing( deadtime, &select_timeout, &last_timeout_processing_time))
return;
num_smbs = 0; /* Reset smb counter. */
diff --git a/source/smbd/quotas.c b/source/smbd/quotas.c
index caf3997ba80..ccb5534641a 100644
--- a/source/smbd/quotas.c
+++ b/source/smbd/quotas.c
@@ -277,6 +277,11 @@ static int xdr_getquota_args(XDR *xdrsp, struct getquota_args *args)
static int xdr_getquota_rslt(XDR *xdrsp, struct getquota_rslt *gqr)
{
+ gqr_status status;
+ union {
+ rquota gqr_rquota;
+ } getquota_rslt_u;
+
if (!xdr_int(xdrsp, &quotastat)) {
DEBUG(6,("nfs_quotas: Status bad or zero\n"));
return 0;
@@ -317,9 +322,6 @@ static BOOL nfs_quotas(char *nfspath, uid_t euser_id, SMB_BIG_UINT *bsize, SMB_B
int len;
static struct timeval timeout = {2,0};
enum clnt_stat clnt_stat;
- BOOL ret = True;
-
- *bsize = *dfree = *dsize = (SMB_BIG_UINT)0;
len=strcspn(mnttype, ":");
pathname=strstr(mnttype, ":");
@@ -336,21 +338,15 @@ static BOOL nfs_quotas(char *nfspath, uid_t euser_id, SMB_BIG_UINT *bsize, SMB_B
DEBUG(5,("nfs_quotas: Asking for host \"%s\" rpcprog \"%i\" rpcvers \"%i\" network \"%s\"\n", host, RQUOTAPROG, RQUOTAVERS, "udp"));
- if ((clnt = clnt_create(host, RQUOTAPROG, RQUOTAVERS, "udp")) == NULL) {
- ret = False;
- goto out;
- }
+ if ((clnt = clnt_create(host, RQUOTAPROG, RQUOTAVERS, "udp")) != NULL) {
+ clnt->cl_auth = authunix_create_default();
+ DEBUG(9,("nfs_quotas: auth_success\n"));
- clnt->cl_auth = authunix_create_default();
- DEBUG(9,("nfs_quotas: auth_success\n"));
+ clnt_stat=clnt_call(clnt, RQUOTAPROC_GETQUOTA, xdr_getquota_args, (caddr_t)&args, xdr_getquota_rslt, (caddr_t)&gqr, timeout);
+ if (clnt_stat == RPC_SUCCESS)
+ DEBUG(9,("nfs_quotas: rpccall_success\n"));
+ };
- clnt_stat=clnt_call(clnt, RQUOTAPROC_GETQUOTA, xdr_getquota_args, (caddr_t)&args, xdr_getquota_rslt, (caddr_t)&gqr, timeout);
-
- if (clnt_stat != RPC_SUCCESS) {
- DEBUG(9,("nfs_quotas: clnt_call fail\n"));
- ret = False;
- goto out;
- }
/*
* quotastat returns 0 if the rpc call fails, 1 if quotas exist, 2 if there is
@@ -358,31 +354,27 @@ static BOOL nfs_quotas(char *nfspath, uid_t euser_id, SMB_BIG_UINT *bsize, SMB_B
* something sensible.
*/
- switch ( quotastat ) {
- case 0:
- DEBUG(9,("nfs_quotas: Remote Quotas Failed! Error \"%i\" \n", quotastat ));
- ret = False;
- goto out;
-
- case 1:
+ if (quotastat == 1) {
DEBUG(9,("nfs_quotas: Good quota data\n"));
D.dqb_bsoftlimit = gqr.getquota_rslt_u.gqr_rquota.rq_bsoftlimit;
D.dqb_bhardlimit = gqr.getquota_rslt_u.gqr_rquota.rq_bhardlimit;
D.dqb_curblocks = gqr.getquota_rslt_u.gqr_rquota.rq_curblocks;
- break;
+ }
- case 2:
- case 3:
+ if (quotastat == 0 || quotastat == 3) {
D.dqb_bsoftlimit = 1;
D.dqb_curblocks = 1;
- DEBUG(9,("nfs_quotas: Remote Quotas returned \"%i\" \n", quotastat ));
- break;
-
- default:
- DEBUG(9,("nfs_quotas: Remote Quotas Questionable! Error \"%i\" \n", quotastat ));
- break;
+ DEBUG(9,("nfs_quotas: Remote Quotas Failed! Error \"%i\" \n", quotastat ));
}
+ if (quotastat == 2) {
+ DEBUG(9,("nfs_quotas: Remote Quotas Failed! Error \"%i\" \n", quotastat ));
+ auth_destroy(clnt->cl_auth);
+ clnt_destroy(clnt);
+ free(cutstr);
+ return(False);
+ }
+
DEBUG(10,("nfs_quotas: Let`s look at D a bit closer... status \"%i\" bsize \"%i\" active? \"%i\" bhard \"%i\" bsoft \"%i\" curb \"%i\" \n",
quotastat,
gqr.getquota_rslt_u.gqr_rquota.rq_bsize,
@@ -403,19 +395,14 @@ static BOOL nfs_quotas(char *nfspath, uid_t euser_id, SMB_BIG_UINT *bsize, SMB_B
} else
*dfree = D.dqb_bsoftlimit - D.dqb_curblocks;
- out:
-
- if (clnt) {
- if (clnt->cl_auth)
- auth_destroy(clnt->cl_auth);
- clnt_destroy(clnt);
- }
+ auth_destroy(clnt->cl_auth);
+ clnt_destroy(clnt);
DEBUG(5,("nfs_quotas: For path \"%s\" returning bsize %.0f, dfree %.0f, dsize %.0f\n",args.gqa_pathp,(double)*bsize,(double)*dfree,(double)*dsize));
- safe_free(cutstr);
+ free(cutstr);
DEBUG(10,("nfs_quotas: End of nfs_quotas\n" ));
- return ret;
+ return(True);
}
#endif
@@ -451,7 +438,7 @@ BOOL disk_quotas(char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_U
return(False) ;
devno = sbuf.st_dev ;
- DEBUG(5,("disk_quotas: looking for path \"%s\" devno=%x\n", path,(unsigned int)devno));
+ DEBUG(5,("disk_quotas: looking for path \"%s\" devno=%x\n", path,devno));
if ( devno != devno_cached ) {
devno_cached = devno ;
#if defined(SUNOS5)
@@ -459,7 +446,7 @@ BOOL disk_quotas(char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_U
return(False) ;
found = False ;
- slprintf(devopt, sizeof(devopt) - 1, "dev=%x", (unsigned int)devno);
+ slprintf(devopt, sizeof(devopt) - 1, "dev=%x", devno);
while (getmntent(fd, &mnt) == 0) {
if( !hasmntopt(&mnt, devopt) )
continue;
@@ -486,7 +473,7 @@ BOOL disk_quotas(char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB_BIG_U
while ((mnt = getmntent(fd)) != NULL) {
if ( sys_stat(mnt->mnt_dir,&sbuf) == -1 )
continue ;
- DEBUG(5,("disk_quotas: testing \"%s\" devno=%x\n", mnt->mnt_dir,(unsigned int)sbuf.st_dev));
+ DEBUG(5,("disk_quotas: testing \"%s\" devno=%o\n", mnt->mnt_dir,sbuf.st_dev));
if (sbuf.st_dev == devno) {
found = True ;
break;
diff --git a/source/smbd/reply.c b/source/smbd/reply.c
index e46da703fff..f6d2c97cb58 100644
--- a/source/smbd/reply.c
+++ b/source/smbd/reply.c
@@ -54,6 +54,7 @@ static void overflow_attack(int len)
dbgtext( "attempting to exploit an old bug.\n" );
dbgtext( "Attack was from IP = %s.\n", client_addr() );
}
+ exit_server("possible attack");
}
@@ -169,10 +170,11 @@ static int connection_error(char *inbuf,char *outbuf,int ecode)
return(ERROR(ERRSRV,ecode));
}
+
+
/****************************************************************************
parse a share descriptor string
****************************************************************************/
-
static void parse_connect(char *p,char *service,char *user,
char *password,int *pwlen,char *dev)
{
@@ -226,21 +228,13 @@ int reply_tcon(connection_struct *conn,
parse_connect(smb_buf(inbuf)+1,service,user,password,&pwlen,dev);
- /*
- * If the vuid is valid, we should be using that....
- */
-
- if (*user == '\0' && (lp_security() != SEC_SHARE) && validated_username(vuid)) {
- pstrcpy(user,validated_username(vuid));
- }
-
/*
* Ensure the user and password names are in UNIX codepage format.
*/
- pstrcpy(user,dos_to_unix(user,False));
+ dos_to_unix(user,True);
if (!doencrypt)
- pstrcpy(password,dos_to_unix(password,False));
+ dos_to_unix(password,True);
/*
* Pass the user through the NT -> unix user mapping
@@ -276,7 +270,6 @@ int reply_tcon(connection_struct *conn,
/****************************************************************************
Reply to a tcon and X.
****************************************************************************/
-
int reply_tcon_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize)
{
fstring service;
@@ -300,7 +293,6 @@ int reply_tcon_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt
if (passlen > MAX_PASS_LEN) {
overflow_attack(passlen);
- return(ERROR(ERRDOS,ERRbuftoosmall));
}
memcpy(password,smb_buf(inbuf),passlen);
@@ -328,20 +320,12 @@ int reply_tcon_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt
DEBUG(4,("Got device type %s\n",devicename));
/*
- * If the vuid is valid, we should be using that....
- */
-
- if (*user == '\0' && (lp_security() != SEC_SHARE) && validated_username(vuid)) {
- pstrcpy(user,validated_username(vuid));
- }
-
- /*
* Ensure the user and password names are in UNIX codepage format.
*/
- pstrcpy(user,dos_to_unix(user,False));
+ dos_to_unix(user,True);
if (!doencrypt)
- pstrcpy(password,dos_to_unix(password,False));
+ dos_to_unix(password,True);
/*
* Pass the user through the NT -> unix user mapping
@@ -410,6 +394,7 @@ int reply_unknown(char *inbuf,char *outbuf)
return(ERROR(ERRSRV,ERRunknownsmb));
}
+
/****************************************************************************
reply to an ioctl
****************************************************************************/
@@ -578,48 +563,47 @@ static BOOL check_server_security(char *orig_user, char *domain, char *unix_user
char *smb_apasswd, int smb_apasslen,
char *smb_ntpasswd, int smb_ntpasslen)
{
- BOOL ret = False;
-
- if(lp_security() != SEC_SERVER)
- return False;
-
- if (!check_domain_match(orig_user, domain))
- return False;
+ BOOL ret = False;
- ret = server_validate(orig_user, domain,
- smb_apasswd, smb_apasslen,
- smb_ntpasswd, smb_ntpasslen);
+ if(lp_security() != SEC_SERVER)
+ return False;
- if(ret) {
- struct passwd *pwd = NULL;
+ if (!check_domain_match(orig_user, domain))
+ return False;
- /*
- * User validated ok against Domain controller.
- * If the admin wants us to try and create a UNIX
- * user on the fly, do so.
- * Note that we can never delete users when in server
- * level security as we never know if it was a failure
- * due to a bad password, or the user really doesn't exist.
- */
+ ret = server_validate(orig_user, domain,
+ smb_apasswd, smb_apasslen,
+ smb_ntpasswd, smb_ntpasslen);
+ if(ret) {
+ struct passwd *pwd = NULL;
- if(lp_adduser_script() && !(pwd = smb_getpwnam(unix_user,True)))
- smb_create_user(unix_user, NULL);
+ /*
+ * User validated ok against Domain controller.
+ * If the admin wants us to try and create a UNIX
+ * user on the fly, do so.
+ * Note that we can never delete users when in server
+ * level security as we never know if it was a failure
+ * due to a bad password, or the user really doesn't exist.
+ */
+ if(lp_adduser_script() && !(pwd = smb_getpwnam(unix_user,True))) {
+ smb_create_user(unix_user, NULL);
+ }
- if(lp_adduser_script() && pwd) {
- SMB_STRUCT_STAT st;
+ if(lp_adduser_script() && pwd) {
+ SMB_STRUCT_STAT st;
- /*
- * Also call smb_create_user if the users home directory
- * doesn't exist. Used with winbindd to allow the script to
- * create the home directory for a user mapped with winbindd.
- */
+ /*
+ * Also call smb_create_user if the users home directory
+ * doesn't exist. Used with winbindd to allow the script to
+ * create the home directory for a user mapped with winbindd.
+ */
- if (pwd->pw_dir && (sys_stat(pwd->pw_dir, &st) == -1) && (errno == ENOENT))
- smb_create_user(unix_user, pwd->pw_dir);
- }
- }
+ if (pwd->pw_shell && (sys_stat(pwd->pw_dir, &st) == -1) && (errno == ENOENT))
+ smb_create_user(unix_user, pwd->pw_dir);
+ }
+ }
- return ret;
+ return ret;
}
/****************************************************************************
@@ -664,7 +648,7 @@ static BOOL check_domain_security(char *orig_user, char *domain, char *unix_user
* create the home directory for a user mapped with winbindd.
*/
- if (pwd->pw_dir && (sys_stat(pwd->pw_dir, &st) == -1) && (errno == ENOENT))
+ if (pwd->pw_shell && (sys_stat(pwd->pw_dir, &st) == -1) && (errno == ENOENT))
smb_create_user(unix_user, pwd->pw_dir);
}
@@ -706,7 +690,7 @@ reply to a session setup command
int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int length,int bufsize)
{
- int sess_vuid;
+ uint16 sess_vuid;
gid_t gid;
uid_t uid;
int smb_bufsize;
@@ -721,22 +705,19 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
BOOL guest=False;
static BOOL done_sesssetup = False;
BOOL doencrypt = SMBENCRYPT();
- fstring domain;
+ char *domain = "";
START_PROFILE(SMBsesssetupX);
*smb_apasswd = 0;
*smb_ntpasswd = 0;
- *domain = 0;
-
+
smb_bufsize = SVAL(inbuf,smb_vwv2);
if (Protocol < PROTOCOL_NT1) {
smb_apasslen = SVAL(inbuf,smb_vwv7);
- if (smb_apasslen > MAX_PASS_LEN) {
+ if (smb_apasslen > MAX_PASS_LEN)
overflow_attack(smb_apasslen);
- return(ERROR(ERRDOS,ERRbuftoosmall));
- }
-
+
memcpy(smb_apasswd,smb_buf(inbuf),smb_apasslen);
smb_apasswd[smb_apasslen] = 0;
pstrcpy(user,smb_buf(inbuf)+smb_apasslen);
@@ -744,7 +725,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
* Incoming user is in DOS codepage format. Convert
* to UNIX.
*/
- pstrcpy(user,dos_to_unix(user,False));
+ dos_to_unix(user,True);
if (!doencrypt && (lp_security() != SEC_SERVER)) {
smb_apasslen = strlen(smb_apasswd);
@@ -774,7 +755,6 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
if (passlen1 > MAX_PASS_LEN) {
overflow_attack(passlen1);
- return(ERROR(ERRDOS,ERRbuftoosmall));
}
passlen1 = MIN(passlen1, MAX_PASS_LEN);
@@ -830,8 +810,8 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
* Ensure the plaintext passwords are in UNIX format.
*/
if(!doencrypt) {
- pstrcpy(smb_apasswd,dos_to_unix(smb_apasswd,False));
- pstrcpy(smb_ntpasswd,dos_to_unix(smb_ntpasswd,False));
+ dos_to_unix(smb_apasswd,True);
+ dos_to_unix(smb_ntpasswd,True);
}
} else {
@@ -841,7 +821,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
/*
* Ensure the plaintext password is in UNIX format.
*/
- pstrcpy(smb_apasswd,dos_to_unix(smb_apasswd,False));
+ dos_to_unix(smb_apasswd,True);
/* trim the password */
smb_apasslen = strlen(smb_apasswd);
@@ -860,8 +840,9 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
* Incoming user and domain are in DOS codepage format. Convert
* to UNIX.
*/
- pstrcpy(user,dos_to_unix(user,False));
- fstrcpy(domain, dos_to_unix(p, False));
+ dos_to_unix(user,True);
+ domain = p;
+ dos_to_unix(domain, True);
DEBUG(3,("Domain=[%s] NativeOS=[%s] NativeLanMan=[%s]\n",
domain,skip_string(p,1),skip_string(p,2)));
}
@@ -914,23 +895,15 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
pstrcpy( orig_user, user);
- /*
- * Always try the "DOMAIN\user" lookup first, as this is the most
- * specific case. If this fails then try the simple "user" lookup.
- */
-
- {
- pstring dom_user;
-
- /* Work out who's who */
-
- slprintf(dom_user, sizeof(dom_user) - 1,"%s%s%s",
- dos_to_unix(domain, False), lp_winbind_separator(), user);
-
- if (sys_getpwnam(dom_user) != NULL) {
- pstrcpy(user, dom_user);
- DEBUG(3,("Using unix username %s\n", dom_user));
- }
+ /* if the username exists as a domain/username pair on the unix system then use
+ that */
+ if (!sys_getpwnam(user)) {
+ pstring user2;
+ slprintf(user2,sizeof(user2)-1,"%s%s%s", dos_to_unix(domain,False), lp_winbind_separator(), user);
+ if (sys_getpwnam(user2)) {
+ DEBUG(3,("Using unix username %s\n", user2));
+ pstrcpy(user, user2);
+ }
}
/*
@@ -1081,11 +1054,6 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
to a uid can get through without a password, on the same VC */
sess_vuid = register_vuid(uid,gid,user,current_user_info.smb_name,domain,guest);
-
- if (sess_vuid == -1) {
- return(ERROR(ERRDOS,ERRnoaccess));
- }
-
SSVAL(outbuf,smb_uid,sess_vuid);
SSVAL(inbuf,smb_uid,sess_vuid);
@@ -1872,15 +1840,14 @@ int reply_mknew(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,
int reply_ctemp(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, int dum_buffsize)
{
pstring fname;
+ pstring fname2;
int outsize = 0;
int createmode;
- mode_t unixmode = 0600;
+ mode_t unixmode;
BOOL bad_path = False;
files_struct *fsp;
int oplock_request = CORE_OPLOCK_REQUEST(inbuf);
- int tmpfd;
SMB_STRUCT_STAT sbuf;
-
START_PROFILE(SMBctemp);
createmode = SVAL(inbuf,smb_vwv0);
@@ -1891,22 +1858,17 @@ int reply_ctemp(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,
unix_convert(fname,conn,0,&bad_path,&sbuf);
- tmpfd = smb_mkstemp(fname);
- if (tmpfd == -1) {
- END_PROFILE(SMBctemp);
- return(UNIXERROR(ERRDOS,ERRnoaccess));
- }
-
- vfs_stat(conn,fname,&sbuf);
+ unixmode = unix_mode(conn,createmode,fname);
+
+ pstrcpy(fname2,(char *)smbd_mktemp(fname));
+ /* This file should not exist. */
+ ZERO_STRUCT(sbuf);
+ vfs_stat(conn,fname2,&sbuf);
/* Open file in dos compatibility share mode. */
- /* We should fail if file does not exist. */
- fsp = open_file_shared(conn,fname,&sbuf,
- SET_DENY_MODE(DENY_FCB)|SET_OPEN_MODE(DOS_OPEN_FCB),
- FILE_FAIL_IF_NOT_EXIST,
- unixmode, oplock_request, NULL, NULL);
- /* close fd from smb_mkstemp() */
- close(tmpfd);
+ /* We should fail if file exists. */
+ fsp = open_file_shared(conn,fname2,&sbuf,SET_DENY_MODE(DENY_FCB)|SET_OPEN_MODE(DOS_OPEN_FCB),
+ (FILE_CREATE_IF_NOT_EXIST|FILE_EXISTS_FAIL), unixmode, oplock_request, NULL, NULL);
if (!fsp)
{
@@ -1919,10 +1881,10 @@ int reply_ctemp(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,
return(UNIXERROR(ERRDOS,ERRnoaccess));
}
- outsize = set_message(outbuf,1,2 + strlen(fname),True);
+ outsize = set_message(outbuf,1,2 + strlen(fname2),True);
SSVAL(outbuf,smb_vwv0,fsp->fnum);
CVAL(smb_buf(outbuf),0) = 4;
- pstrcpy(smb_buf(outbuf) + 1,fname);
+ pstrcpy(smb_buf(outbuf) + 1,fname2);
if (oplock_request && lp_fake_oplocks(SNUM(conn))) {
CVAL(outbuf,smb_flg) |= CORE_OPLOCK_GRANTED;
@@ -1931,9 +1893,9 @@ int reply_ctemp(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,
if(EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type))
CVAL(outbuf,smb_flg) |= CORE_OPLOCK_GRANTED;
- DEBUG( 2, ( "created temp file %s\n", fname ) );
+ DEBUG( 2, ( "created temp file %s\n", fname2 ) );
DEBUG( 3, ( "ctemp %s fd=%d dmode=%d umode=%o\n",
- fname, fsp->fd, createmode, (int)unixmode ) );
+ fname2, fsp->fd, createmode, (int)unixmode ) );
END_PROFILE(SMBctemp);
return(outsize);
@@ -2192,7 +2154,7 @@ int reply_readbraw(connection_struct *conn, char *inbuf, char *outbuf, int dum_s
maxcount = MIN(65535,maxcount);
maxcount = MAX(mincount,maxcount);
- if (!is_locked(fsp,conn,(SMB_BIG_UINT)maxcount,(SMB_BIG_UINT)startpos, READ_LOCK,False))
+ if (!is_locked(fsp,conn,(SMB_BIG_UINT)maxcount,(SMB_BIG_UINT)startpos, READ_LOCK))
{
SMB_OFF_T size = fsp->size;
SMB_OFF_T sizeneeded = startpos + maxcount;
@@ -2349,7 +2311,7 @@ int reply_read(connection_struct *conn, char *inbuf,char *outbuf, int size, int
numtoread = MIN(BUFFER_SIZE-outsize,numtoread);
data = smb_buf(outbuf) + 3;
- if (is_locked(fsp,conn,(SMB_BIG_UINT)numtoread,(SMB_BIG_UINT)startpos, READ_LOCK,False)) {
+ if (is_locked(fsp,conn,(SMB_BIG_UINT)numtoread,(SMB_BIG_UINT)startpos, READ_LOCK)) {
END_PROFILE(SMBread);
return(ERROR(ERRDOS,ERRlock));
}
@@ -2426,7 +2388,7 @@ int reply_read_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt
}
- if (is_locked(fsp,conn,(SMB_BIG_UINT)smb_maxcnt,(SMB_BIG_UINT)startpos, READ_LOCK,False)) {
+ if (is_locked(fsp,conn,(SMB_BIG_UINT)smb_maxcnt,(SMB_BIG_UINT)startpos, READ_LOCK)) {
END_PROFILE(SMBreadX);
return(ERROR(ERRDOS,ERRlock));
}
@@ -2487,7 +2449,7 @@ int reply_writebraw(connection_struct *conn, char *inbuf,char *outbuf, int size,
CVAL(inbuf,smb_com) = SMBwritec;
CVAL(outbuf,smb_com) = SMBwritec;
- if (is_locked(fsp,conn,(SMB_BIG_UINT)tcount,(SMB_BIG_UINT)startpos, WRITE_LOCK,False)) {
+ if (is_locked(fsp,conn,(SMB_BIG_UINT)tcount,(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
END_PROFILE(SMBwritebraw);
return(ERROR(ERRDOS,ERRlock));
}
@@ -2510,8 +2472,7 @@ int reply_writebraw(connection_struct *conn, char *inbuf,char *outbuf, int size,
CVAL(outbuf,smb_com) = SMBwritebraw;
SSVALS(outbuf,smb_vwv0,-1);
outsize = set_message(outbuf,Protocol>PROTOCOL_COREPLUS?1:0,0,True);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("reply_writebraw: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
/* Now read the raw data into the buffer and write it */
if (read_smb_length(smbd_server_fd(),inbuf,SMB_SECONDARY_WAIT) == -1) {
@@ -2583,7 +2544,7 @@ int reply_writeunlock(connection_struct *conn, char *inbuf,char *outbuf, int siz
startpos = IVAL(inbuf,smb_vwv2);
data = smb_buf(inbuf) + 3;
- if (is_locked(fsp,conn,(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK,False)) {
+ if (is_locked(fsp,conn,(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
END_PROFILE(SMBwriteunlock);
return(ERROR(ERRDOS,ERRlock));
}
@@ -2647,7 +2608,7 @@ int reply_write(connection_struct *conn, char *inbuf,char *outbuf,int size,int d
startpos = IVAL(inbuf,smb_vwv2);
data = smb_buf(inbuf) + 3;
- if (is_locked(fsp,conn,(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK,False)) {
+ if (is_locked(fsp,conn,(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
END_PROFILE(SMBwrite);
return(ERROR(ERRDOS,ERRlock));
}
@@ -2696,9 +2657,7 @@ int reply_write_and_X(connection_struct *conn, char *inbuf,char *outbuf,int leng
BOOL write_through = BITSETW(inbuf+smb_vwv7,0);
ssize_t nwritten = -1;
unsigned int smb_doff = SVAL(inbuf,smb_vwv11);
- unsigned int smblen = smb_len(inbuf);
char *data;
- BOOL large_writeX = ((CVAL(inbuf,smb_wct) == 14) && (smblen > 0xFFFF));
START_PROFILE(SMBwriteX);
/* If it's an IPC, pass off the pipe handler. */
@@ -2711,11 +2670,7 @@ int reply_write_and_X(connection_struct *conn, char *inbuf,char *outbuf,int leng
CHECK_WRITE(fsp);
CHECK_ERROR(fsp);
- /* Deal with possible LARGE_WRITEX */
- if (large_writeX)
- numtowrite |= ((((size_t)SVAL(inbuf,smb_vwv9)) & 1 )<<16);
-
- if(smb_doff > smblen || (smb_doff + numtowrite > smblen)) {
+ if(smb_doff > smb_len(inbuf)) {
END_PROFILE(SMBwriteX);
return(ERROR(ERRDOS,ERRbadmem));
}
@@ -2745,7 +2700,7 @@ int reply_write_and_X(connection_struct *conn, char *inbuf,char *outbuf,int leng
#endif /* LARGE_SMB_OFF_T */
}
- if (is_locked(fsp,conn,(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK,False)) {
+ if (is_locked(fsp,conn,(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
END_PROFILE(SMBwriteX);
return(ERROR(ERRDOS,ERRlock));
}
@@ -2767,9 +2722,7 @@ int reply_write_and_X(connection_struct *conn, char *inbuf,char *outbuf,int leng
set_message(outbuf,6,0,True);
SSVAL(outbuf,smb_vwv2,nwritten);
- if (large_writeX)
- SSVAL(outbuf,smb_vwv4,(nwritten>>16)&1);
-
+
if (nwritten < (ssize_t)numtowrite) {
CVAL(outbuf,smb_rcls) = ERRHRD;
SSVAL(outbuf,smb_err,ERRdiskfull);
@@ -3030,7 +2983,7 @@ int reply_writeclose(connection_struct *conn,
mtime = make_unix_date3(inbuf+smb_vwv4);
data = smb_buf(inbuf) + 1;
- if (is_locked(fsp,conn,(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK,False)) {
+ if (is_locked(fsp,conn,(SMB_BIG_UINT)numtowrite,(SMB_BIG_UINT)startpos, WRITE_LOCK)) {
END_PROFILE(SMBwriteclose);
return(ERROR(ERRDOS,ERRlock));
}
@@ -3196,8 +3149,7 @@ int reply_echo(connection_struct *conn,
smb_setlen(outbuf,outsize - 4);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("reply_echo: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
}
DEBUG(3,("echo %d times\n", smb_reverb));
@@ -3225,7 +3177,7 @@ int reply_printopen(connection_struct *conn,
}
/* Open for exclusive use, write only. */
- fsp = print_fsp_open(conn);
+ fsp = print_fsp_open(conn,"dos.prn");
if (!fsp) {
END_PROFILE(SMBsplopen);
@@ -4364,7 +4316,7 @@ int reply_lockingX(connection_struct *conn, char *inbuf,char *outbuf,int length,
BOOL break_to_none = (oplocklevel == 0);
DEBUG(5,("reply_lockingX: oplock break reply (%u) from client for fnum = %d\n",
- (unsigned int)oplocklevel, fsp->fnum ));
+ fsp->fnum, (unsigned int)oplocklevel ));
/*
* Make sure we have granted an exclusive or batch oplock on this file.
@@ -4551,7 +4503,7 @@ int reply_readbmpx(connection_struct *conn, char *inbuf,char *outbuf,int length,
tcount = maxcount;
total_read = 0;
- if (is_locked(fsp,conn,(SMB_BIG_UINT)maxcount,(SMB_BIG_UINT)startpos, READ_LOCK,False)) {
+ if (is_locked(fsp,conn,(SMB_BIG_UINT)maxcount,(SMB_BIG_UINT)startpos, READ_LOCK)) {
END_PROFILE(SMBreadBmpx);
return(ERROR(ERRDOS,ERRlock));
}
@@ -4573,8 +4525,7 @@ int reply_readbmpx(connection_struct *conn, char *inbuf,char *outbuf,int length,
SSVAL(outbuf,smb_vwv6,nread);
SSVAL(outbuf,smb_vwv7,smb_offset(data,outbuf));
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("reply_readbmpx: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
total_read += nread;
startpos += nread;
@@ -4618,7 +4569,7 @@ int reply_writebmpx(connection_struct *conn, char *inbuf,char *outbuf, int size,
not an SMBwritebmpx - set this up now so we don't forget */
CVAL(outbuf,smb_com) = SMBwritec;
- if (is_locked(fsp,conn,(SMB_BIG_UINT)tcount,(SMB_BIG_UINT)startpos,WRITE_LOCK,False)) {
+ if (is_locked(fsp,conn,(SMB_BIG_UINT)tcount,(SMB_BIG_UINT)startpos,WRITE_LOCK)) {
END_PROFILE(SMBwriteBmpx);
return(ERROR(ERRDOS,ERRlock));
}
@@ -4672,8 +4623,7 @@ int reply_writebmpx(connection_struct *conn, char *inbuf,char *outbuf, int size,
if (write_through && tcount==nwritten) {
/* we need to send both a primary and a secondary response */
smb_setlen(outbuf,outsize - 4);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("reply_writebmpx: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
/* now the secondary */
outsize = set_message(outbuf,1,0,True);
diff --git a/source/smbd/sec_ctx.c b/source/smbd/sec_ctx.c
index 6f98e9df6b0..f604f6cce71 100644
--- a/source/smbd/sec_ctx.c
+++ b/source/smbd/sec_ctx.c
@@ -152,10 +152,8 @@ int get_current_groups(int *p_ngroups, gid_t **p_groups)
return -1;
}
- if ((ngroups = sys_getgroups(ngroups,groups)) == -1) {
- safe_free(groups);
+ if ((ngroups = sys_getgroups(ngroups,groups)) == -1)
return -1;
- }
(*p_ngroups) = ngroups;
(*p_groups) = groups;
@@ -277,8 +275,8 @@ BOOL push_sec_ctx(void)
ctx_p->uid = geteuid();
ctx_p->gid = getegid();
- DEBUG(3, ("push_sec_ctx(%u, %u) : sec_ctx_stack_ndx = %d\n",
- (unsigned int)ctx_p->uid, (unsigned int)ctx_p->gid, sec_ctx_stack_ndx ));
+ DEBUG(3, ("push_sec_ctx(%d, %d) : sec_ctx_stack_ndx = %d\n",
+ ctx_p->uid, ctx_p->gid, sec_ctx_stack_ndx ));
ctx_p->token = dup_nt_token(sec_ctx_stack[sec_ctx_stack_ndx-1].token);
@@ -309,15 +307,14 @@ void set_sec_ctx(uid_t uid, gid_t gid, int ngroups, gid_t *groups, NT_USER_TOKEN
/* Set the security context */
- DEBUG(3, ("setting sec ctx (%u, %u) - sec_ctx_stack_ndx = %d\n",
- (unsigned int)uid, (unsigned int)gid, sec_ctx_stack_ndx));
+ DEBUG(3, ("setting sec ctx (%d, %d) - sec_ctx_stack_ndx = %d\n", uid, gid, sec_ctx_stack_ndx));
if (ngroups) {
int i;
DEBUG(3, ("%d user groups: \n", ngroups));
for (i = 0; i < ngroups; i++) {
- DEBUGADD(3, ("%u ", (unsigned int)groups[i]));
+ DEBUGADD(3, ("%d ", groups[i]));
}
DEBUG(3, ("\n"));
@@ -416,8 +413,7 @@ BOOL pop_sec_ctx(void)
current_user.groups = prev_ctx_p->groups;
current_user.nt_user_token = prev_ctx_p->token;
- DEBUG(3, ("pop_sec_ctx (%u, %u) - sec_ctx_stack_ndx = %d\n",
- (unsigned int)geteuid(), (unsigned int)getegid(), sec_ctx_stack_ndx));
+ DEBUG(3, ("pop_sec_ctx (%d, %d) - sec_ctx_stack_ndx = %d\n", geteuid(), getegid(), sec_ctx_stack_ndx));
return True;
}
diff --git a/source/smbd/server.c b/source/smbd/server.c
index 7f3d9eff24b..bd98fe802fb 100644
--- a/source/smbd/server.c
+++ b/source/smbd/server.c
@@ -208,7 +208,7 @@ max can be %d\n",
num = sys_select(FD_SETSIZE,&lfds,NULL);
if (num == -1 && errno == EINTR) {
- extern VOLATILE sig_atomic_t reload_after_sighup;
+ extern VOLATILE SIG_ATOMIC_T reload_after_sighup;
/* check for sighup processing */
if (reload_after_sighup) {
@@ -228,7 +228,7 @@ max can be %d\n",
accept on these. */
for( ; num > 0; num--) {
struct sockaddr addr;
- socklen_t in_addrlen = sizeof(addr);
+ int in_addrlen = sizeof(addr);
s = -1;
for(i = 0; i < num_interfaces; i++) {
@@ -277,16 +277,6 @@ max can be %d\n",
/* The parent doesn't need this socket */
close(smbd_server_fd());
- /* Sun May 6 18:56:14 2001 ackley@cs.unm.edu:
- Clear the closed fd info out of server_fd --
- and more importantly, out of client_fd in
- util_sock.c, to avoid a possible
- getpeername failure if we reopen the logs
- and use %I in the filename.
- */
-
- smbd_set_server_fd(-1);
-
/* Force parent to check log size after
* spawning child. Fix from
* klausr@ITAP.Physik.Uni-Stuttgart.De. The
@@ -366,7 +356,7 @@ BOOL reload_services(BOOL test)
Catch a sighup.
****************************************************************************/
-VOLATILE sig_atomic_t reload_after_sighup = False;
+VOLATILE SIG_ATOMIC_T reload_after_sighup = False;
static void sig_hup(int sig)
{
@@ -421,14 +411,16 @@ static BOOL dump_core(void)
/****************************************************************************
update the current smbd process count
****************************************************************************/
-
static void decrement_smbd_process_count(void)
{
int total_smbds;
if (lp_max_smbd_processes()) {
- total_smbds = 0;
- tdb_change_int_atomic(conn_tdb_ctx(), "INFO/total_smbds", &total_smbds, -1);
+ tdb_lock_bystring(conn_tdb_ctx(), "INFO/total_smbds");
+ if ((total_smbds = tdb_fetch_int(conn_tdb_ctx(), "INFO/total_smbds")) > 0)
+ tdb_store_int(conn_tdb_ctx(), "INFO/total_smbds", total_smbds - 1);
+
+ tdb_unlock_bystring(conn_tdb_ctx(), "INFO/total_smbds");
}
}
@@ -449,14 +441,12 @@ void exit_server(char *reason)
conn_close_all();
- invalidate_all_vuids();
-
/* delete our entry in the connections database. */
if (lp_status(-1)) {
yield_connection(NULL,"",MAXSTATUS);
}
- respond_to_all_remaining_local_messages();
+ respond_to_all_remaining_local_messages();
decrement_smbd_process_count();
#ifdef WITH_DFS
diff --git a/source/smbd/service.c b/source/smbd/service.c
index f2af4403b2a..394f8ae46d5 100644
--- a/source/smbd/service.c
+++ b/source/smbd/service.c
@@ -108,6 +108,11 @@ int add_home_service(char *service, char *homedir)
lp_add_home(new_service,iHomeService,homedir);
iService = lp_servicenumber(new_service);
+ if ((iService != -1) && usr_p && (strstr(lp_pathname(iService),"%D") == NULL))
+ DEBUG(0,("find_service: Service %s added for user %s - contains non-local (Domain) user \
+with non-domain parameterised path (%s). This may be cause the wrong directory to be seen.\n",
+ new_service, service, lp_pathname(iService) ));
+
return iService;
}
@@ -525,12 +530,39 @@ connection_struct *make_connection(char *service,char *user,char *password, int
}
/* Initialise VFS function pointers */
- if (!vfs_init(conn)) {
- DEBUG(0, ("vfs_init failed for service %s\n", lp_servicename(SNUM(conn))));
- conn_free(conn);
- return NULL;
+#if WITH_VFS
+ if (*lp_vfsobj(SNUM(conn))) {
+
+#ifdef HAVE_LIBDL
+
+ /* Loadable object file */
+
+ if (!vfs_init_custom(conn)) {
+ DEBUG(0, ("vfs_init failed\n"));
+ conn_free(conn);
+ return NULL;
+ }
+#else /* HAVE_LIBDL */
+ DEBUG(0, ("No libdl present - cannot use VFS objects\n"));
+ conn_free(conn);
+ return NULL;
+#endif /* HAVE_LIBDL */
+
+ } else {
+
+ /* Normal share - initialise with disk access functions */
+
+ vfs_init_default(conn);
}
+#else /* WITH_VFS */
+
+ /* Normal share - initialise with disk access functions */
+
+ vfs_init_default(conn);
+
+#endif /* WITH_VFS */
+
/* execute any "root preexec = " line */
if (*lp_rootpreexec(SNUM(conn))) {
pstring cmd;
@@ -680,5 +712,3 @@ void close_cnum(connection_struct *conn, uint16 vuid)
}
conn_free(conn);
}
-
-
diff --git a/source/smbd/session.c b/source/smbd/session.c
deleted file mode 100644
index 8f6907c5378..00000000000
--- a/source/smbd/session.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 2.0
- session handling for utmp and PAM
- Copyright (C) tridge@samba.org 2001
- Copyright (C) abartlet@pcug.org.au 2001
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* a "session" is claimed when we do a SessionSetupX operation
- and is yielded when the corresponding vuid is destroyed.
-
- sessions are used to populate utmp and PAM session structures
-*/
-
-#include "includes.h"
-
-#if defined(WITH_PAM) || defined(WITH_UTMP)
-
-static TDB_CONTEXT *tdb;
-struct sessionid {
- fstring username;
- fstring hostname;
- fstring id_str;
- uint32 id_num;
- uint32 pid;
-};
-
-/* called when a session is created */
-BOOL session_claim(uint16 vuid)
-{
- user_struct *vuser = get_valid_user_struct(vuid);
- int i;
- TDB_DATA data;
- struct sessionid sessionid;
- pstring dbuf;
- int dlen;
- uint32 pid = (uint32)sys_getpid();
- TDB_DATA key;
- fstring keystr;
- char * hostname;
-
- vuser->session_id = 0;
-
- /* don't register sessions for the guest user - its just too
- expensive to go through pam session code for browsing etc */
- if (strequal(vuser->user.unix_name,lp_guestaccount(-1))) {
- return True;
- }
-
- if (!tdb) {
- tdb = tdb_open_log(lock_path("sessionid.tdb"), 0, TDB_CLEAR_IF_FIRST,
- O_RDWR | O_CREAT, 0644);
- if (!tdb) {
- DEBUG(1,("session_claim: failed to open sessionid tdb\n"));
- return False;
- }
- }
-
- ZERO_STRUCT(sessionid);
-
- data.dptr = NULL;
- data.dsize = 0;
-
- for (i=1;i<MAX_SESSION_ID;i++) {
- slprintf(keystr, sizeof(keystr)-1, "ID/%d", i);
- key.dptr = keystr;
- key.dsize = strlen(keystr)+1;
-
- if (tdb_store(tdb, key, data, TDB_INSERT) == 0) break;
- }
-
- if (i == MAX_SESSION_ID) {
- DEBUG(1,("session_claim: out of session IDs (max is %d)\n",
- MAX_SESSION_ID));
- return False;
- }
-
- hostname = client_name();
- if (strequal(hostname,"UNKNOWN"))
- hostname = client_addr();
-
- fstrcpy(sessionid.username, vuser->user.unix_name);
- fstrcpy(sessionid.hostname, hostname);
- slprintf(sessionid.id_str, sizeof(sessionid.id_str)-1, SESSION_TEMPLATE, i);
- sessionid.id_num = i;
- sessionid.pid = pid;
-
- if (!smb_pam_claim_session(sessionid.username, sessionid.id_str, sessionid.hostname)) {
- DEBUG(1,("pam_session rejected the session for %s [%s]\n",
- sessionid.username, sessionid.id_str));
- tdb_delete(tdb, key);
- return False;
- }
-
- dlen = tdb_pack(dbuf, sizeof(dbuf), "fffdd",
- sessionid.username, sessionid.hostname, sessionid.id_str,
- sessionid.id_num, sessionid.pid);
-
- data.dptr = dbuf;
- data.dsize = dlen;
- if (tdb_store(tdb, key, data, TDB_MODIFY) != 0) {
- DEBUG(1,("session_claim: unable to create session id record\n"));
- return False;
- }
-
-#if WITH_UTMP
- if (lp_utmp()) {
- sys_utmp_claim(sessionid.username, sessionid.hostname,
- sessionid.id_str, sessionid.id_num);
- }
-#endif
-
- vuser->session_id = i;
- return True;
-}
-
-/* called when a session is destroyed */
-void session_yield(uint16 vuid)
-{
- user_struct *vuser = get_valid_user_struct(vuid);
- TDB_DATA data;
- struct sessionid sessionid;
- TDB_DATA key;
- fstring keystr;
-
- if (!tdb) return;
-
- if (vuser->session_id == 0) {
- return;
- }
-
- slprintf(keystr, sizeof(keystr)-1, "ID/%d", vuser->session_id);
-
- key.dptr = keystr;
- key.dsize = strlen(keystr)+1;
-
- data = tdb_fetch(tdb, key);
- if (data.dptr == NULL) {
- return;
- }
-
- tdb_unpack(data.dptr, data.dsize, "fffdd",
- &sessionid.username, &sessionid.hostname, &sessionid.id_str,
- &sessionid.id_num, &sessionid.pid);
-
- safe_free(data.dptr);
- data.dptr = NULL;
-
-#if WITH_UTMP
- if (lp_utmp()) {
- sys_utmp_yield(sessionid.username, sessionid.hostname,
- sessionid.id_str, sessionid.id_num);
- }
-#endif
-
- smb_pam_close_session(sessionid.username, sessionid.id_str, sessionid.hostname);
-
- tdb_delete(tdb, key);
-}
-
-#else
- /* null functions - no session support needed */
- BOOL session_claim(uint16 vuid) { return True; }
- void session_yield(uint16 vuid) {}
-#endif
diff --git a/source/smbd/ssl.c b/source/smbd/ssl.c
index 67a8afc82ef..65d6532d486 100644
--- a/source/smbd/ssl.c
+++ b/source/smbd/ssl.c
@@ -255,13 +255,11 @@ char *reqHosts, *resignHosts;
if(msg_type != 0x81){ /* first packet must be a session request */
DEBUG( 0, ( "Client %s did not use session setup; access denied\n",
client_addr() ) );
- if (!send_smb(fd, (char *)buf))
- exit_server("sslutil_negotiate_ssl: send_smb failed.\n");
+ send_smb(fd, (char *)buf);
return -1;
}
buf[4] = 0x8e; /* negative session response: use SSL */
- if (!send_smb(fd, (char *)buf))
- exit_server("sslutil_negotiate_ssl: send_smb failed.\n");
+ send_smb(fd, (char *)buf);
if(sslutil_accept(fd) != 0){
DEBUG( 0, ( "Client %s failed SSL negotiation!\n", client_addr() ) );
return -1;
diff --git a/source/smbd/statcache.c b/source/smbd/statcache.c
index 65a48300164..8200c277b32 100644
--- a/source/smbd/statcache.c
+++ b/source/smbd/statcache.c
@@ -221,11 +221,11 @@ BOOL reset_stat_cache( void )
static BOOL initialised;
if (!lp_stat_cache()) return True;
- if (initialised) {
- hash_clear(&stat_cache);
+ if (!initialised) {
+ initialised = True;
+ return hash_table_init( &stat_cache, INIT_STAT_CACHE_SIZE, (compare_function)(strcmp));
}
+ hash_clear(&stat_cache);
+ return hash_table_init( &stat_cache, INIT_STAT_CACHE_SIZE, (compare_function)(strcmp));
- initialised = hash_table_init( &stat_cache, INIT_STAT_CACHE_SIZE,
- (compare_function)(strcmp));
- return initialised;
} /* reset_stat_cache */
diff --git a/source/smbd/trans2.c b/source/smbd/trans2.c
index ea4ecc29ac2..05a02238957 100644
--- a/source/smbd/trans2.c
+++ b/source/smbd/trans2.c
@@ -65,8 +65,7 @@ static int send_trans2_replies(char *outbuf, int bufsize, char *params,
the empty packet */
if(params_to_send == 0 && data_to_send == 0)
{
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("send_trans2_replies: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
return 0;
}
@@ -161,8 +160,7 @@ static int send_trans2_replies(char *outbuf, int bufsize, char *params,
params_to_send, data_to_send, paramsize, datasize));
/* Send the packet */
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("send_trans2_replies: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
pp += params_sent_thistime;
pd += data_sent_thistime;
@@ -1175,10 +1173,9 @@ static int call_trans2qfsinfo(connection_struct *conn,
(lp_nt_acl_support() ? FILE_PERSISTENT_ACLS : 0)); /* FS ATTRIBUTES */
#if 0 /* Old code. JRA. */
SIVAL(pdata,0,0x4006); /* FS ATTRIBUTES == long filenames supported? */
- SIVAL(pdata,0,0x700FF);
#endif /* Old code. */
- SIVAL(pdata,4,255); /* Max filename component length */
+ SIVAL(pdata,4,128); /* Max filename component length */
fstype_len = dos_PutUniCode(pdata+12,unix_to_dos(fstype,False),sizeof(pstring), False);
SIVAL(pdata,8,fstype_len);
data_len = 12 + fstype_len;
@@ -1446,14 +1443,7 @@ static int call_trans2qfilepathinfo(connection_struct *conn,
return(ERROR(ERRDOS,ERRbadfunc)); /* os/2 needs this */
case SMB_QUERY_FILE_BASIC_INFO:
- case 1004:
-
- if (info_level == SMB_QUERY_FILE_BASIC_INFO)
- data_size = 36; /* w95 returns 40 bytes not 36 - why ?. */
- else {
- data_size = 40;
- SIVAL(pdata,36,0);
- }
+ data_size = 36; /* w95 returns 40 bytes not 36 - why ?. */
put_long_date(pdata,get_create_time(&sbuf,lp_fake_dir_create_times(SNUM(conn))));
put_long_date(pdata+8,sbuf.st_atime);
put_long_date(pdata+16,sbuf.st_mtime); /* write time */
@@ -1559,144 +1549,6 @@ static int call_trans2qfilepathinfo(connection_struct *conn,
data_size = PTR_DIFF(pdata,(*ppdata));
break;
- /*
- * Windows 2000 completely undocumented new SMB info levels.
- * Thanks Microsoft.... sure you're working on making this
- * protocol a standard.... sure you are... :-).
- * Lying rat-bastards. JRA.
- */
-
- case 1005:
- SIVAL(pdata,0,mode);
- SIVAL(pdata,4,0); /* ??? */
- SOFF_T(pdata,8,size);
- SIVAL(pdata,16,1); /* ??? */
- SIVAL(pdata,20,0); /* ??? */
- data_size = 24;
- break;
-
- case 1006:
- SIVAL(pdata,0,0x907); /* ??? */
- SIVAL(pdata,4,0x690000); /* ??? */
- data_size = 8;
- break;
-
- case 1007:
- SIVAL(pdata,0,0); /* ??? */
- data_size = 4;
- break;
-
- case 1008:
- SIVAL(pdata,0,0x12019F); /* ??? */
- data_size = 4;
- break;
-
- case 1009:
- /* Pathname with leading '\'. */
- {
- pstring new_fname;
- size_t byte_len;
-
- pstrcpy(new_fname, "\\");
- pstrcat(new_fname, fname);
- byte_len = dos_PutUniCode(pdata+4,new_fname,max_data_bytes,False);
- SIVAL(pdata,0,byte_len);
- data_size = 4 + byte_len;
- break;
- }
-
- case 1014:
- SIVAL(pdata,0,0); /* ??? */
- SIVAL(pdata,4,0); /* ??? */
- data_size = 8;
- break;
-
- case 1016:
- SIVAL(pdata,0,0); /* ??? */
- data_size = 4;
- break;
-
- case 1017:
- SIVAL(pdata,0,0); /* ??? */
- data_size = 4;
- break;
-
-#if 0
- /* Not yet finished... JRA */
- case 1018:
- {
- pstring new_fname;
- size_t byte_len;
-
- put_long_date(pdata,get_create_time(&sbuf,lp_fake_dir_create_times(SNUM(conn))));
- put_long_date(pdata+8,sbuf.st_atime);
- put_long_date(pdata+16,sbuf.st_mtime); /* write time */
- put_long_date(pdata+24,sbuf.st_mtime); /* change time */
- SIVAL(pdata,32,mode);
- SIVAL(pdata,36,0); /* ??? */
- SIVAL(pdata,40,0x20); /* ??? */
- SIVAL(pdata,44,0); /* ??? */
- SOFF_T(pdata,48,size);
- SIVAL(pdata,56,0x1); /* ??? */
- SIVAL(pdata,60,0); /* ??? */
- SIVAL(pdata,64,0); /* ??? */
- SIVAL(pdata,68,length); /* Following string length in bytes. */
- dos_PutUniCode(pdata+72,,False);
- break;
- }
-#endif
-
- case 1021:
- /* Last component of pathname. */
- {
- size_t byte_len = dos_PutUniCode(pdata+4,fname,max_data_bytes,False);
- SIVAL(pdata,0,byte_len);
- data_size = 4 + byte_len;
- break;
- }
-
- case 1022:
- {
- size_t byte_len = dos_PutUniCode(pdata+24,"::$DATA", 0xE, False);
- SIVAL(pdata,0,0); /* ??? */
- SIVAL(pdata,4,byte_len); /* Byte length of unicode string ::$DATA */
- SOFF_T(pdata,8,size);
- SIVAL(pdata,16,0x20); /* ??? */
- SIVAL(pdata,20,0); /* ??? */
- data_size = 24 + byte_len;
- break;
- }
-
- case 1028:
- SOFF_T(pdata,0,size);
- SIVAL(pdata,8,0); /* ??? */
- SIVAL(pdata,12,0); /* ??? */
- data_size = 16;
- break;
-
- case 1034:
- put_long_date(pdata,get_create_time(&sbuf,lp_fake_dir_create_times(SNUM(conn))));
- put_long_date(pdata+8,sbuf.st_atime);
- put_long_date(pdata+16,sbuf.st_mtime); /* write time */
- put_long_date(pdata+24,sbuf.st_mtime); /* change time */
- SIVAL(pdata,32,0x20); /* ??? */
- SIVAL(pdata,36,0); /* ??? */
- SOFF_T(pdata,40,size);
- SIVAL(pdata,48,mode);
- SIVAL(pdata,52,0); /* ??? */
- data_size = 56;
- break;
-
- case 1035:
- SIVAL(pdata,0,mode);
- SIVAL(pdata,4,0);
- data_size = 8;
- break;
-
- /*
- * End new completely undocumented info levels... JRA.
- */
-
#if 0
/* NT4 server just returns "invalid query" to this - if we try to answer
it then NTws gets a BSOD! (tridge) */
@@ -1879,7 +1731,6 @@ static int call_trans2setfilepathinfo(connection_struct *conn,
break;
case SMB_SET_FILE_BASIC_INFO:
- case 1004:
{
/* Patch to do this correctly from Paul Eggert <eggert@twinsun.com>. */
time_t write_time;
@@ -1901,6 +1752,14 @@ static int call_trans2setfilepathinfo(connection_struct *conn,
? changed_time
: write_time);
+#if 0 /* Needs more testing... */
+ /* Test from Luke to prevent Win95 from
+ setting incorrect values here.
+ */
+ if (tvs.actime < tvs.modtime)
+ return(ERROR(ERRDOS,ERRnoaccess));
+#endif /* Needs more testing... */
+
/* attributes */
mode = IVAL(pdata,32);
break;
@@ -1911,8 +1770,6 @@ static int call_trans2setfilepathinfo(connection_struct *conn,
* to mean truncate the file. JRA.
*/
- case 1019:
- case 1020:
case SMB_SET_FILE_ALLOCATION_INFO:
{
SMB_OFF_T newsize = IVAL(pdata,0);
@@ -2046,9 +1903,7 @@ static int call_trans2setfilepathinfo(connection_struct *conn,
DEBUG(6,("mode: %x\n" , mode));
if(!((info_level == SMB_SET_FILE_END_OF_FILE_INFO) ||
- (info_level == SMB_SET_FILE_ALLOCATION_INFO) ||
- (info_level == 1019) ||
- (info_level == 1020))) {
+ (info_level == SMB_SET_FILE_ALLOCATION_INFO))) {
/*
* Only do this test if we are not explicitly
* changing the size of a file.
@@ -2493,8 +2348,7 @@ int reply_trans2(connection_struct *conn,
/* We need to send an interim response then receive the rest
of the parameter/data bytes */
outsize = set_message(outbuf,0,0,True);
- if (!send_smb(smbd_server_fd(),outbuf))
- exit_server("reply_trans2: send_smb failed.\n");
+ send_smb(smbd_server_fd(),outbuf);
while (num_data_sofar < total_data ||
num_params_sofar < total_params) {
diff --git a/source/smbd/utmp.c b/source/smbd/utmp.c
deleted file mode 100644
index f79cd43c5b1..00000000000
--- a/source/smbd/utmp.c
+++ /dev/null
@@ -1,576 +0,0 @@
-/*
- Unix SMB/Netbios implementation.
- Version 2.0
- utmp routines
- Copyright (C) T.D.Lee@durham.ac.uk 1999
- Heavily modified by Andrew Bartlett and Tridge, April 2001
-
- 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 2 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, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "includes.h"
-
-#ifdef WITH_UTMP
-
-/****************************************************************************
-Reflect connection status in utmp/wtmp files.
- T.D.Lee@durham.ac.uk September 1999
-
- With grateful thanks since then to many who have helped port it to
- different operating systems. The variety of OS quirks thereby
- uncovered is amazing...
-
-Hints for porting:
- o Always attempt to use programmatic interface (pututline() etc.)
- Indeed, at present only programmatic use is supported.
- o The only currently supported programmatic interface to "wtmp{,x}"
- is through "updwtmp*()" routines.
- o The "x" (utmpx/wtmpx; HAVE_UTMPX_H) seems preferable.
- o The HAVE_* items should identify supported features.
- o If at all possible, avoid "if defined(MY-OS)" constructions.
-
-OS observations and status:
- Almost every OS seems to have its own quirks.
-
- Solaris 2.x:
- Tested on 2.6 and 2.7; should be OK on other flavours.
- AIX:
- Apparently has utmpx.h but doesn't implement.
- OSF:
- Has utmpx.h, but (e.g.) no "getutmpx()". (Is this like AIX ?)
- Redhat 6:
- utmpx.h seems not to set default filenames. non-x better.
- IRIX 6.5:
- Not tested. Appears to have "x".
- HP-UX 9.x:
- Not tested. Appears to lack "x".
- HP-UX 10.x:
- Not tested.
- "updwtmp*()" routines seem absent, so no current wtmp* support.
- Has "ut_addr": probably trivial to implement (although remember
- that IPv6 is coming...).
-
- FreeBSD:
- No "putut*()" type of interface.
- No "ut_type" and associated defines.
- Write files directly. Alternatively use its login(3)/logout(3).
- SunOS 4:
- Not tested. Resembles FreeBSD, but no login()/logout().
-
-lastlog:
- Should "lastlog" files, if any, be updated?
- BSD systems (SunOS 4, FreeBSD):
- o Prominent mention on man pages.
- System-V (e.g. Solaris 2):
- o No mention on man pages, even under "man -k".
- o Has a "/var/adm/lastlog" file, but pututxline() etc. seem
- not to touch it.
- o Despite downplaying (above), nevertheless has <lastlog.h>.
- So perhaps UN*X "lastlog" facility is intended for tty/terminal only?
-
-Notes:
- Each connection requires a small number (starting at 0, working up)
- to represent the line (unum). This must be unique within and across
- all smbd processes.
-
- The 4 byte 'ut_id' component is vital to distinguish connections,
- of which there could be several hundered or even thousand.
- Entries seem to be printable characters, with optional NULL pads.
-
- We need to be distinct from other entries in utmp/wtmp.
-
- Observed things: therefore avoid them. Add to this list please.
- From Solaris 2.x (because that's what I have):
- 'sN' : run-levels; N: [0-9]
- 'co' : console
- 'CC' : arbitrary things; C: [a-z]
- 'rXNN' : rlogin; N: [0-9]; X: [0-9a-z]
- 'tXNN' : rlogin; N: [0-9]; X: [0-9a-z]
- '/NNN' : Solaris CDE
- 'ftpZ' : ftp (Z is the number 255, aka 0377, aka 0xff)
- Mostly a record uses the same 'ut_id' in both "utmp" and "wtmp",
- but differences have been seen.
-
- Arbitrarily I have chosen to use a distinctive 'SM' for the
- first two bytes.
-
- The remaining two encode the "unum" (see above).
-
- For "utmp consolidate" the suggestion was made to encode the pid into
- those remaining two bytes (16 bits). But recent UNIX (e.g Solaris 8)
- is migrating to pids > 16 bits, so we ought not to do this.
-
-****************************************************************************/
-
-#include <utmp.h>
-
-#ifdef HAVE_UTMPX_H
-#include <utmpx.h>
-#endif
-
-/* BSD systems: some may need lastlog.h (SunOS 4), some may not (FreeBSD) */
-/* Some System-V systems (e.g. Solaris 2) declare this too. */
-#ifdef HAVE_LASTLOG_H
-#include <lastlog.h>
-#endif
-
-/****************************************************************************
-obtain/release a small number (0 upwards) unique within and across smbds
-****************************************************************************/
-/*
- * Need a "small" number to represent this connection, unique within this
- * smbd and across all smbds.
- *
- * claim:
- * Start at 0, hunt up for free, unique number "unum" by attempting to
- * store it as a key in a tdb database:
- * key: unum data: pid+conn
- * Also store its inverse, ready for yield function:
- * key: pid+conn data: unum
- *
- * yield:
- * Find key: pid+conn; data is unum; delete record
- * Find key: unum ; delete record.
- *
- * Comment:
- * The claim algorithm (a "for" loop attempting to store numbers in a tdb
- * database) will be increasingly inefficient with larger numbers of
- * connections. Is it possible to write a suitable primitive within tdb?
- *
- * However, by also storing the inverse key/data pair, we at least make
- * the yield algorithm efficient.
- */
-
-/****************************************************************************
-Default paths to various {u,w}tmp{,x} files
-****************************************************************************/
-#ifdef HAVE_UTMPX_H
-
-static const char *ux_pathname =
-# if defined (UTMPX_FILE)
- UTMPX_FILE ;
-# elif defined (_UTMPX_FILE)
- _UTMPX_FILE ;
-# elif defined (_PATH_UTMPX)
- _PATH_UTMPX ;
-# else
- "" ;
-# endif
-
-static const char *wx_pathname =
-# if defined (WTMPX_FILE)
- WTMPX_FILE ;
-# elif defined (_WTMPX_FILE)
- _WTMPX_FILE ;
-# elif defined (_PATH_WTMPX)
- _PATH_WTMPX ;
-# else
- "" ;
-# endif
-
-#endif /* HAVE_UTMPX_H */
-
-static const char *ut_pathname =
-# if defined (UTMP_FILE)
- UTMP_FILE ;
-# elif defined (_UTMP_FILE)
- _UTMP_FILE ;
-# elif defined (_PATH_UTMP)
- _PATH_UTMP ;
-# else
- "" ;
-# endif
-
-static const char *wt_pathname =
-# if defined (WTMP_FILE)
- WTMP_FILE ;
-# elif defined (_WTMP_FILE)
- _WTMP_FILE ;
-# elif defined (_PATH_WTMP)
- _PATH_WTMP ;
-# else
- "" ;
-# endif
-
-/* BSD-like systems might want "lastlog" support. */
-/* *** Not yet implemented */
-#ifndef HAVE_PUTUTLINE /* see "pututline_my()" */
-static const char *ll_pathname =
-# if defined (_PATH_LASTLOG) /* what other names (if any?) */
- _PATH_LASTLOG ;
-# else
- "" ;
-# endif /* _PATH_LASTLOG */
-#endif /* HAVE_PUTUTLINE */
-
-/*
- * Get name of {u,w}tmp{,x} file.
- * return: fname contains filename
- * Possibly empty if this code not yet ported to this system.
- *
- * utmp{,x}: try "utmp dir", then default (a define)
- * wtmp{,x}: try "wtmp dir", then "utmp dir", then default (a define)
- */
-static void uw_pathname(pstring fname, const char *uw_name, const char *uw_default)
-{
- pstring dirname;
-
- pstrcpy(dirname, "");
-
- /* For w-files, first look for explicit "wtmp dir" */
- if (uw_name[0] == 'w') {
- pstrcpy(dirname,lp_wtmpdir());
- trim_string(dirname,"","/");
- }
-
- /* For u-files and non-explicit w-dir, look for "utmp dir" */
- if (dirname == 0 || strlen(dirname) == 0) {
- pstrcpy(dirname,lp_utmpdir());
- trim_string(dirname,"","/");
- }
-
- /* If explicit directory above, use it */
- if (dirname != 0 && strlen(dirname) != 0) {
- pstrcpy(fname, dirname);
- pstrcat(fname, "/");
- pstrcat(fname, uw_name);
- return;
- }
-
- /* No explicit directory: attempt to use default paths */
- if (strlen(uw_default) == 0) {
- /* No explicit setting, no known default.
- * Has it yet been ported to this OS?
- */
- DEBUG(2,("uw_pathname: unable to determine pathname\n"));
- }
- pstrcpy(fname, uw_default);
-}
-
-#ifndef HAVE_PUTUTLINE
-/****************************************************************************
-Update utmp file directly. No subroutine interface: probably a BSD system.
-****************************************************************************/
-static void pututline_my(pstring uname, struct utmp *u, BOOL claim)
-{
- DEBUG(1,("pututline_my: not yet implemented\n"));
- /* BSD implementor: may want to consider (or not) adjusting "lastlog" */
-}
-#endif /* HAVE_PUTUTLINE */
-
-#ifndef HAVE_UPDWTMP
-/****************************************************************************
-Update wtmp file directly. No subroutine interface: probably a BSD system.
-Credit: Michail Vidiassov <master@iaas.msu.ru>
-****************************************************************************/
-static void updwtmp_my(pstring wname, struct utmp *u, BOOL claim)
-{
- int fd;
- struct stat buf;
-
- if (! claim) {
- /*
- * BSD-like systems:
- * may use empty ut_name to distinguish a logout record.
- *
- * May need "if defined(SUNOS4)" etc. around some of these,
- * but try to avoid if possible.
- *
- * SunOS 4:
- * man page indicates ut_name and ut_host both NULL
- * FreeBSD 4.0:
- * man page appears not to specify (hints non-NULL)
- * A correspondent suggest at least ut_name should be NULL
- */
- memset((char *)&(u->ut_name), '\0', sizeof(u->ut_name));
- memset((char *)&(u->ut_host), '\0', sizeof(u->ut_host));
- }
- /* Stolen from logwtmp function in libutil.
- * May be more locking/blocking is needed?
- */
- if ((fd = open(wname, O_WRONLY|O_APPEND, 0)) < 0)
- return;
- if (fstat(fd, &buf) == 0) {
- if (write(fd, (char *)u, sizeof(struct utmp)) != sizeof(struct utmp))
- (void) ftruncate(fd, buf.st_size);
- }
- (void) close(fd);
-}
-#endif /* HAVE_UPDWTMP */
-
-/****************************************************************************
-Update via utmp/wtmp (not utmpx/wtmpx)
-****************************************************************************/
-static void utmp_nox_update(struct utmp *u, const char *host, BOOL claim)
-{
- pstring uname, wname;
-#if defined(PUTUTLINE_RETURNS_UTMP)
- struct utmp *urc;
-#endif /* PUTUTLINE_RETURNS_UTMP */
-
- uw_pathname(uname, "utmp", ut_pathname);
- DEBUG(2,("utmp_nox_update: uname:%s\n", uname));
-
-#ifdef HAVE_PUTUTLINE
- if (strlen(uname) != 0) {
- utmpname(uname);
- }
-
-# if defined(PUTUTLINE_RETURNS_UTMP)
- setutent();
- urc = pututline(u);
- endutent();
- if (urc == NULL) {
- DEBUG(2,("utmp_nox_update: pututline() failed\n"));
- return;
- }
-# else /* PUTUTLINE_RETURNS_UTMP */
- setutent();
- pututline(u);
- endutent();
-# endif /* PUTUTLINE_RETURNS_UTMP */
-
-#else /* HAVE_PUTUTLINE */
- if (strlen(uname) != 0) {
- pututline_my(uname, u, claim);
- }
-#endif /* HAVE_PUTUTLINE */
-
- uw_pathname(wname, "wtmp", wt_pathname);
- DEBUG(2,("utmp_nox_update: wname:%s\n", wname));
- if (strlen(wname) != 0) {
-#ifdef HAVE_UPDWTMP
- updwtmp(wname, u);
- /*
- * updwtmp() and the newer updwtmpx() may be unsymmetrical.
- * At least one OS, Solaris 2.x declares the former in the
- * "utmpx" (latter) file and context.
- * In the Solaris case this is irrelevant: it has both and
- * we always prefer the "x" case, so doesn't come here.
- * But are there other systems, with no "x", which lack
- * updwtmp() perhaps?
- */
-#else
- updwtmp_my(wname, u, claim);
-#endif /* HAVE_UPDWTMP */
- }
-}
-
-/****************************************************************************
-Update via utmpx/wtmpx (preferred) or via utmp/wtmp
-****************************************************************************/
-static void sys_utmp_update(struct utmp *u, const char *hostname, BOOL claim)
-{
-#if !defined(HAVE_UTMPX_H)
- /* No utmpx stuff. Drop to non-x stuff */
- utmp_nox_update(u, hostname, claim);
-#elif !defined(HAVE_PUTUTXLINE)
- /* Odd. Have utmpx.h but no "pututxline()". Drop to non-x stuff */
- DEBUG(1,("utmp_update: have utmpx.h but no pututxline() function\n"));
- utmp_nox_update(u, hostname, claim);
-#elif !defined(HAVE_GETUTMPX)
- /* Odd. Have utmpx.h but no "getutmpx()". Drop to non-x stuff */
- DEBUG(1,("utmp_update: have utmpx.h but no getutmpx() function\n"));
- utmp_nox_update(u, hostname, claim);
-#else
- pstring uname, wname;
- struct utmpx ux, *uxrc;
-
- getutmpx(u, &ux);
-
-#if defined(HAVE_UX_UT_SYSLEN)
- if (hostname) ux.ut_syslen = strlen(hostname) + 1; /* include end NULL */
- else ux.ut_syslen = 0;
-#endif
- safe_strcpy(ux.ut_host, hostname, sizeof(ux.ut_host)-1);
-
- uw_pathname(uname, "utmpx", ux_pathname);
- uw_pathname(wname, "wtmpx", wx_pathname);
- DEBUG(2,("utmp_update: uname:%s wname:%s\n", uname, wname));
- /*
- * Check for either uname or wname being empty.
- * Some systems, such as Redhat 6, have a "utmpx.h" which doesn't
- * define default filenames.
- * Also, our local installation has not provided an override.
- * Drop to non-x method. (E.g. RH6 has good defaults in "utmp.h".)
- */
- if ((strlen(uname) == 0) || (strlen(wname) == 0)) {
- utmp_nox_update(u, hostname, claim);
- } else {
- utmpxname(uname);
- setutxent();
- uxrc = pututxline(&ux);
- endutxent();
- if (uxrc == NULL) {
- DEBUG(2,("utmp_update: pututxline() failed\n"));
- return;
- }
- updwtmpx(wname, &ux);
- }
-#endif /* HAVE_UTMPX_H */
-}
-
-#if defined(HAVE_UT_UT_ID)
-/****************************************************************************
-encode the unique connection number into "ut_id"
-****************************************************************************/
-static int ut_id_encode(int i, char *fourbyte)
-{
- int nbase;
- char *ut_id_encstr = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
- fourbyte[0] = 'S';
- fourbyte[1] = 'M';
-
-/*
- * Encode remaining 2 bytes from 'i'.
- * 'ut_id_encstr' is the character set on which modulo arithmetic is done.
- * Example: digits would produce the base-10 numbers from '001'.
- */
- nbase = strlen(ut_id_encstr);
-
- fourbyte[3] = ut_id_encstr[i % nbase];
- i /= nbase;
- fourbyte[2] = ut_id_encstr[i % nbase];
- i /= nbase;
-
- return(i); /* 0: good; else overflow */
-}
-#endif /* defined(HAVE_UT_UT_ID) */
-
-
-/*
- fill a system utmp structure given all the info we can gather
-*/
-static BOOL sys_utmp_fill(struct utmp *u,
- const char *username, const char *hostname,
- const char *id_str, int id_num)
-{
- struct timeval timeval;
-
- /*
- * ut_name, ut_user:
- * Several (all?) systems seems to define one as the other.
- * It is easier and clearer simply to let the following take its course,
- * rather than to try to detect and optimise.
- */
-#if defined(HAVE_UT_UT_USER)
- safe_strcpy(u->ut_user, username, sizeof(u->ut_user)-1);
-#elif defined(HAVE_UT_UT_NAME)
- safe_strcpy(u->ut_name, username, sizeof(u->ut_name)-1);
-#endif
-
- /*
- * ut_line:
- * If size limit proves troublesome, then perhaps use "ut_id_encode()".
- *
- * Temporary variable "line_tmp" avoids trouble:
- * o with unwanted trailing NULL if ut_line full;
- * o with overflow if ut_line would be more than full.
- */
- if (strlen(id_str) > sizeof(u->ut_line)) {
- DEBUG(1,("id_str [%s] is too long for %d char utmp field\n",
- id_str, sizeof(u->ut_line)));
- return False;
- }
- memcpy(u->ut_line, id_str, sizeof(u->ut_line));
-
-#if defined(HAVE_UT_UT_PID)
- u->ut_pid = sys_getpid();
-#endif
-
-/*
- * ut_time, ut_tv:
- * Some have one, some the other. Many have both, but defined (aliased).
- * It is easier and clearer simply to let the following take its course.
- * But note that we do the more precise ut_tv as the final assignment.
- */
-#if defined(HAVE_UT_UT_TIME)
- gettimeofday(&timeval, NULL);
- u->ut_time = timeval.tv_sec;
-#elif defined(HAVE_UT_UT_TV)
- gettimeofday(&timeval, NULL);
- u->ut_tv = timeval;
-#else
-#error "with-utmp must have UT_TIME or UT_TV"
-#endif
-
-#if defined(HAVE_UT_UT_HOST)
- safe_strcpy(u->ut_host, hostname, sizeof(u->ut_host)-1);
-#endif
-
-#if defined(HAVE_UT_UT_ADDR)
- /*
- * "(unsigned long) ut_addr" apparently exists on at least HP-UX 10.20.
- * Volunteer to implement, please ...
- */
-#endif
-
-#if defined(HAVE_UT_UT_ID)
- if (ut_id_encode(id_num, u->ut_id) != 0) {
- DEBUG(1,("utmp_fill: cannot encode id %d\n", id_num));
- return False;
- }
-#endif
-
- return True;
-}
-
-/****************************************************************************
-close a connection
-****************************************************************************/
-void sys_utmp_yield(const char *username, const char *hostname,
- const char *id_str, int id_num)
-{
- struct utmp u;
-
- ZERO_STRUCT(u);
-
-#if defined(HAVE_UT_UT_EXIT)
- u.ut_exit.e_termination = 0;
- u.ut_exit.e_exit = 0;
-#endif
-
-#if defined(HAVE_UT_UT_TYPE)
- u.ut_type = DEAD_PROCESS;
-#endif
-
- if (!sys_utmp_fill(&u, username, hostname, id_str, id_num)) return;
-
- sys_utmp_update(&u, NULL, False);
-}
-
-/****************************************************************************
-claim a entry in whatever utmp system the OS uses
-****************************************************************************/
-void sys_utmp_claim(const char *username, const char *hostname,
- const char *id_str, int id_num)
-{
- struct utmp u;
-
- ZERO_STRUCT(u);
-
-#if defined(HAVE_UT_UT_TYPE)
- u.ut_type = USER_PROCESS;
-#endif
-
- if (!sys_utmp_fill(&u, username, hostname, id_str, id_num)) return;
-
- sys_utmp_update(&u, hostname, True);
-}
-
-#else /* WITH_UTMP */
- void dummy_utmp(void) {}
-#endif
diff --git a/source/smbd/vfs-wrap.c b/source/smbd/vfs-wrap.c
index a0b4966c596..da8484e14ee 100644
--- a/source/smbd/vfs-wrap.c
+++ b/source/smbd/vfs-wrap.c
@@ -558,38 +558,6 @@ BOOL vfswrap_lock(files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T
return result;
}
-int vfswrap_symlink(connection_struct *conn, const char *oldpath, const char *newpath)
-{
- int result;
-
- START_PROFILE(syscall_symlink);
-
-#ifdef VFS_CHECK_NULL
- if ((oldpath == NULL) || (newpath == NULL))
- smb_panic("NULL pointer passed to vfswrap_symlink()\n");
-#endif
-
- result = sys_symlink(oldpath, newpath);
- END_PROFILE(syscall_symlink);
- return result;
-}
-
-int vfswrap_readlink(connection_struct *conn, const char *path, char *buf, size_t bufsiz)
-{
- int result;
-
- START_PROFILE(syscall_readlink);
-
-#ifdef VFS_CHECK_NULL
- if ((path == NULL) || (buf == NULL))
- smb_panic("NULL pointer passed to vfswrap_readlink()\n");
-#endif
-
- result = sys_readlink(path, buf, bufsiz);
- END_PROFILE(syscall_readlink);
- return result;
-}
-
size_t vfswrap_fget_nt_acl(files_struct *fsp, int fd, SEC_DESC **ppdesc)
{
return get_nt_acl(fsp, ppdesc);
diff --git a/source/smbd/vfs.c b/source/smbd/vfs.c
index ac00d00e9e1..713d58cdc8c 100644
--- a/source/smbd/vfs.c
+++ b/source/smbd/vfs.c
@@ -72,9 +72,6 @@ struct vfs_ops default_vfs_ops = {
vfswrap_utime,
vfswrap_ftruncate,
vfswrap_lock,
- vfswrap_symlink,
- vfswrap_readlink,
-
vfswrap_fget_nt_acl,
vfswrap_get_nt_acl,
vfswrap_fset_nt_acl,
@@ -92,8 +89,7 @@ struct vfs_ops default_vfs_ops = {
/****************************************************************************
initialise default vfs hooks
****************************************************************************/
-
-static BOOL vfs_init_default(connection_struct *conn)
+int vfs_init_default(connection_struct *conn)
{
DEBUG(3, ("Initialising default vfs hooks\n"));
@@ -106,7 +102,7 @@ static BOOL vfs_init_default(connection_struct *conn)
****************************************************************************/
#ifdef HAVE_LIBDL
-static BOOL vfs_init_custom(connection_struct *conn)
+BOOL vfs_init_custom(connection_struct *conn)
{
int vfs_version = -1;
struct vfs_ops *ops, *(*init_fptr)(int *);
@@ -150,146 +146,145 @@ static BOOL vfs_init_custom(connection_struct *conn)
memcpy(&conn->vfs_ops, ops, sizeof(struct vfs_ops));
- if (conn->vfs_ops.connect == NULL)
- conn->vfs_ops.connect = default_vfs_ops.connect;
-
- if (conn->vfs_ops.disconnect == NULL)
- conn->vfs_ops.disconnect = default_vfs_ops.disconnect;
-
- if (conn->vfs_ops.disk_free == NULL)
- conn->vfs_ops.disk_free = default_vfs_ops.disk_free;
-
- if (conn->vfs_ops.opendir == NULL)
- conn->vfs_ops.opendir = default_vfs_ops.opendir;
+ if (conn->vfs_ops.connect == NULL) {
+ conn->vfs_ops.connect = default_vfs_ops.connect;
+ }
- if (conn->vfs_ops.readdir == NULL)
- conn->vfs_ops.readdir = default_vfs_ops.readdir;
+ if (conn->vfs_ops.disconnect == NULL) {
+ conn->vfs_ops.disconnect = default_vfs_ops.disconnect;
+ }
- if (conn->vfs_ops.mkdir == NULL)
- conn->vfs_ops.mkdir = default_vfs_ops.mkdir;
+ if (conn->vfs_ops.disk_free == NULL) {
+ conn->vfs_ops.disk_free = default_vfs_ops.disk_free;
+ }
- if (conn->vfs_ops.rmdir == NULL)
- conn->vfs_ops.rmdir = default_vfs_ops.rmdir;
+ if (conn->vfs_ops.opendir == NULL) {
+ conn->vfs_ops.opendir = default_vfs_ops.opendir;
+ }
- if (conn->vfs_ops.closedir == NULL)
- conn->vfs_ops.closedir = default_vfs_ops.closedir;
+ if (conn->vfs_ops.readdir == NULL) {
+ conn->vfs_ops.readdir = default_vfs_ops.readdir;
+ }
- if (conn->vfs_ops.open == NULL)
- conn->vfs_ops.open = default_vfs_ops.open;
+ if (conn->vfs_ops.mkdir == NULL) {
+ conn->vfs_ops.mkdir = default_vfs_ops.mkdir;
+ }
- if (conn->vfs_ops.close == NULL)
- conn->vfs_ops.close = default_vfs_ops.close;
+ if (conn->vfs_ops.rmdir == NULL) {
+ conn->vfs_ops.rmdir = default_vfs_ops.rmdir;
+ }
- if (conn->vfs_ops.read == NULL)
- conn->vfs_ops.read = default_vfs_ops.read;
+ if (conn->vfs_ops.closedir == NULL) {
+ conn->vfs_ops.closedir = default_vfs_ops.closedir;
+ }
- if (conn->vfs_ops.write == NULL)
- conn->vfs_ops.write = default_vfs_ops.write;
+ if (conn->vfs_ops.open == NULL) {
+ conn->vfs_ops.open = default_vfs_ops.open;
+ }
- if (conn->vfs_ops.lseek == NULL)
- conn->vfs_ops.lseek = default_vfs_ops.lseek;
+ if (conn->vfs_ops.close == NULL) {
+ conn->vfs_ops.close = default_vfs_ops.close;
+ }
- if (conn->vfs_ops.rename == NULL)
- conn->vfs_ops.rename = default_vfs_ops.rename;
+ if (conn->vfs_ops.read == NULL) {
+ conn->vfs_ops.read = default_vfs_ops.read;
+ }
- if (conn->vfs_ops.fsync == NULL)
- conn->vfs_ops.fsync = default_vfs_ops.fsync;
+ if (conn->vfs_ops.write == NULL) {
+ conn->vfs_ops.write = default_vfs_ops.write;
+ }
- if (conn->vfs_ops.stat == NULL)
- conn->vfs_ops.stat = default_vfs_ops.stat;
+ if (conn->vfs_ops.lseek == NULL) {
+ conn->vfs_ops.lseek = default_vfs_ops.lseek;
+ }
- if (conn->vfs_ops.fstat == NULL)
- conn->vfs_ops.fstat = default_vfs_ops.fstat;
+ if (conn->vfs_ops.rename == NULL) {
+ conn->vfs_ops.rename = default_vfs_ops.rename;
+ }
- if (conn->vfs_ops.lstat == NULL)
- conn->vfs_ops.lstat = default_vfs_ops.lstat;
+ if (conn->vfs_ops.fsync == NULL) {
+ conn->vfs_ops.fsync = default_vfs_ops.fsync;
+ }
- if (conn->vfs_ops.unlink == NULL)
- conn->vfs_ops.unlink = default_vfs_ops.unlink;
+ if (conn->vfs_ops.stat == NULL) {
+ conn->vfs_ops.stat = default_vfs_ops.stat;
+ }
- if (conn->vfs_ops.chmod == NULL)
- conn->vfs_ops.chmod = default_vfs_ops.chmod;
+ if (conn->vfs_ops.fstat == NULL) {
+ conn->vfs_ops.fstat = default_vfs_ops.fstat;
+ }
- if (conn->vfs_ops.fchmod == NULL)
- conn->vfs_ops.fchmod = default_vfs_ops.fchmod;
+ if (conn->vfs_ops.lstat == NULL) {
+ conn->vfs_ops.lstat = default_vfs_ops.lstat;
+ }
- if (conn->vfs_ops.chown == NULL)
- conn->vfs_ops.chown = default_vfs_ops.chown;
+ if (conn->vfs_ops.unlink == NULL) {
+ conn->vfs_ops.unlink = default_vfs_ops.unlink;
+ }
- if (conn->vfs_ops.fchown == NULL)
- conn->vfs_ops.fchown = default_vfs_ops.fchown;
+ if (conn->vfs_ops.chmod == NULL) {
+ conn->vfs_ops.chmod = default_vfs_ops.chmod;
+ }
- if (conn->vfs_ops.chdir == NULL)
- conn->vfs_ops.chdir = default_vfs_ops.chdir;
+ if (conn->vfs_ops.fchmod == NULL) {
+ conn->vfs_ops.fchmod = default_vfs_ops.fchmod;
+ }
- if (conn->vfs_ops.getwd == NULL)
- conn->vfs_ops.getwd = default_vfs_ops.getwd;
+ if (conn->vfs_ops.chown == NULL) {
+ conn->vfs_ops.chown = default_vfs_ops.chown;
+ }
- if (conn->vfs_ops.utime == NULL)
- conn->vfs_ops.utime = default_vfs_ops.utime;
+ if (conn->vfs_ops.fchown == NULL) {
+ conn->vfs_ops.fchown = default_vfs_ops.fchown;
+ }
- if (conn->vfs_ops.ftruncate == NULL)
- conn->vfs_ops.ftruncate = default_vfs_ops.ftruncate;
+ if (conn->vfs_ops.chdir == NULL) {
+ conn->vfs_ops.chdir = default_vfs_ops.chdir;
+ }
- if (conn->vfs_ops.lock == NULL)
- conn->vfs_ops.lock = default_vfs_ops.lock;
+ if (conn->vfs_ops.getwd == NULL) {
+ conn->vfs_ops.getwd = default_vfs_ops.getwd;
+ }
- if (conn->vfs_ops.symlink == NULL)
- conn->vfs_ops.symlink = default_vfs_ops.symlink;
+ if (conn->vfs_ops.utime == NULL) {
+ conn->vfs_ops.utime = default_vfs_ops.utime;
+ }
- if (conn->vfs_ops.readlink == NULL)
- conn->vfs_ops.readlink = default_vfs_ops.readlink;
+ if (conn->vfs_ops.ftruncate == NULL) {
+ conn->vfs_ops.ftruncate = default_vfs_ops.ftruncate;
+ }
- if (conn->vfs_ops.fget_nt_acl == NULL)
- conn->vfs_ops.fget_nt_acl = default_vfs_ops.fget_nt_acl;
+ if (conn->vfs_ops.lock == NULL) {
+ conn->vfs_ops.lock = default_vfs_ops.lock;
+ }
- if (conn->vfs_ops.get_nt_acl == NULL)
- conn->vfs_ops.get_nt_acl = default_vfs_ops.get_nt_acl;
+ if (conn->vfs_ops.fget_nt_acl == NULL) {
+ conn->vfs_ops.fget_nt_acl = default_vfs_ops.fget_nt_acl;
+ }
- if (conn->vfs_ops.fset_nt_acl == NULL)
- conn->vfs_ops.fset_nt_acl = default_vfs_ops.fset_nt_acl;
+ if (conn->vfs_ops.get_nt_acl == NULL) {
+ conn->vfs_ops.get_nt_acl = default_vfs_ops.get_nt_acl;
+ }
- if (conn->vfs_ops.set_nt_acl == NULL)
- conn->vfs_ops.set_nt_acl = default_vfs_ops.set_nt_acl;
+ if (conn->vfs_ops.fset_nt_acl == NULL) {
+ conn->vfs_ops.fset_nt_acl = default_vfs_ops.fset_nt_acl;
+ }
- if (conn->vfs_ops.chmod_acl == NULL)
- conn->vfs_ops.chmod_acl = default_vfs_ops.chmod_acl;
+ if (conn->vfs_ops.set_nt_acl == NULL) {
+ conn->vfs_ops.set_nt_acl = default_vfs_ops.set_nt_acl;
+ }
- if (conn->vfs_ops.fchmod_acl == NULL)
- conn->vfs_ops.fchmod_acl = default_vfs_ops.fchmod_acl;
+ if (conn->vfs_ops.chmod_acl == NULL) {
+ conn->vfs_ops.chmod_acl = default_vfs_ops.chmod_acl;
+ }
+ if (conn->vfs_ops.fchmod_acl == NULL) {
+ conn->vfs_ops.fchmod_acl = default_vfs_ops.fchmod_acl;
+ }
return True;
}
#endif
-/*****************************************************************
- Generic VFS init.
-******************************************************************/
-
-BOOL vfs_init(connection_struct *conn)
-{
- if (*lp_vfsobj(SNUM(conn))) {
-#ifdef HAVE_LIBDL
-
- /* Loadable object file */
-
- if (!vfs_init_custom(conn)) {
- DEBUG(0, ("vfs_init: vfs_init_custom failed\n"));
- return False;
- }
-
- return True;
-#else
- DEBUG(0, ("vfs_init: No libdl present - cannot use VFS objects\n"));
- return False;
-#endif
- }
-
- /* Normal share - initialise with disk access functions */
-
- return vfs_init_default(conn);
-}
-
/*******************************************************************
Check if directory exists.
********************************************************************/
diff --git a/source/smbwrapper/smbw.c b/source/smbwrapper/smbw.c
index 7ee2d9af261..91009af1c58 100644
--- a/source/smbwrapper/smbw.c
+++ b/source/smbwrapper/smbw.c
@@ -281,7 +281,6 @@ static char *smbw_find_workgroup(void)
if (name_status_find(0x1d, ip_list[i], name)) {
slprintf(server, sizeof(server), "%s#1D", name);
if (smbw_server(server, "IPC$")) {
- smbw_setshared("WORKGROUP", name);
free(ip_list);
return name;
}
diff --git a/source/smbwrapper/smbw_dir.c b/source/smbwrapper/smbw_dir.c
index 1600d65a9ef..15977de8b77 100644
--- a/source/smbwrapper/smbw_dir.c
+++ b/source/smbwrapper/smbw_dir.c
@@ -78,7 +78,7 @@ static struct smbw_dir *cur_dir;
/*****************************************************
add a entry to a directory listing
*******************************************************/
-static void smbw_dir_add(struct file_info *finfo, const char *mask, void *state)
+static void smbw_dir_add(struct file_info *finfo, const char *mask)
{
DEBUG(5,("%s\n", finfo->name));
@@ -101,7 +101,7 @@ static void smbw_dir_add(struct file_info *finfo, const char *mask, void *state)
add a entry to a directory listing
*******************************************************/
static void smbw_share_add(const char *share, uint32 type,
- const char *comment, void *state)
+ const char *comment)
{
struct file_info finfo;
@@ -112,7 +112,7 @@ static void smbw_share_add(const char *share, uint32 type,
pstrcpy(finfo.name, share);
finfo.mode = aRONLY | aDIR;
- smbw_dir_add(&finfo, NULL, NULL);
+ smbw_dir_add(&finfo, NULL);
}
@@ -120,7 +120,7 @@ static void smbw_share_add(const char *share, uint32 type,
add a server to a directory listing
*******************************************************/
static void smbw_server_add(const char *name, uint32 type,
- const char *comment, void *state)
+ const char *comment)
{
struct file_info finfo;
@@ -129,7 +129,7 @@ static void smbw_server_add(const char *name, uint32 type,
pstrcpy(finfo.name, name);
finfo.mode = aRONLY | aDIR;
- smbw_dir_add(&finfo, NULL, NULL);
+ smbw_dir_add(&finfo, NULL);
}
@@ -151,7 +151,7 @@ static void smbw_printjob_add(struct print_job_info *job)
finfo.mode = aRONLY;
finfo.size = job->size;
- smbw_dir_add(&finfo, NULL, NULL);
+ smbw_dir_add(&finfo, NULL);
}
@@ -202,30 +202,30 @@ int smbw_dir_open(const char *fname)
if ((p=strstr(srv->server_name,"#01"))) {
*p = 0;
- smbw_server_add(".",0,"",NULL);
- smbw_server_add("..",0,"",NULL);
+ smbw_server_add(".",0,"");
+ smbw_server_add("..",0,"");
cli_NetServerEnum(&srv->cli, srv->server_name, SV_TYPE_DOMAIN_ENUM,
- smbw_server_add,NULL);
+ smbw_server_add);
*p = '#';
} else if ((p=strstr(srv->server_name,"#1D"))) {
DEBUG(4,("doing NetServerEnum\n"));
*p = 0;
- smbw_server_add(".",0,"",NULL);
- smbw_server_add("..",0,"",NULL);
+ smbw_server_add(".",0,"");
+ smbw_server_add("..",0,"");
cli_NetServerEnum(&srv->cli, srv->server_name, SV_TYPE_ALL,
- smbw_server_add,NULL);
+ smbw_server_add);
*p = '#';
} else if (strcmp(srv->cli.dev,"IPC") == 0) {
DEBUG(4,("doing NetShareEnum\n"));
- smbw_share_add(".",0,"",NULL);
- smbw_share_add("..",0,"",NULL);
- if (cli_RNetShareEnum(&srv->cli, smbw_share_add,NULL) < 0) {
+ smbw_share_add(".",0,"");
+ smbw_share_add("..",0,"");
+ if (cli_RNetShareEnum(&srv->cli, smbw_share_add) < 0) {
errno = smbw_errno(&srv->cli);
goto failed;
}
} else if (strncmp(srv->cli.dev,"LPT",3) == 0) {
- smbw_share_add(".",0,"",NULL);
- smbw_share_add("..",0,"",NULL);
+ smbw_share_add(".",0,"");
+ smbw_share_add("..",0,"");
if (cli_print_queue(&srv->cli, smbw_printjob_add) < 0) {
errno = smbw_errno(&srv->cli);
goto failed;
@@ -233,11 +233,11 @@ int smbw_dir_open(const char *fname)
} else {
#if 0
if (strcmp(path,"\\") == 0) {
- smbw_share_add(".",0,"",NULL);
- smbw_share_add("..",0,"",NULL);
+ smbw_share_add(".",0,"");
+ smbw_share_add("..",0,"");
}
#endif
- if (cli_list(&srv->cli, mask, aHIDDEN|aSYSTEM|aDIR, smbw_dir_add,NULL) < 0) {
+ if (cli_list(&srv->cli, mask, aHIDDEN|aSYSTEM|aDIR, smbw_dir_add) < 0) {
errno = smbw_errno(&srv->cli);
goto failed;
}
diff --git a/source/tdb/Makefile b/source/tdb/Makefile
index 5945469737c..01de7d244b6 100644
--- a/source/tdb/Makefile
+++ b/source/tdb/Makefile
@@ -2,22 +2,20 @@
# Makefile for tdb directory
#
-CFLAGS = -DSTANDALONE -DTDB_DEBUG -O2 -g -DHAVE_MMAP=1
+CFLAGS = -DSTANDALONE -DTDB_DEBUG -g -DHAVE_MMAP=1
CC = gcc
-
PROGS = tdbtest tdbtool tdbtorture
-TDB_OBJ = tdb.o spinlock.o
default: $(PROGS)
-tdbtest: tdbtest.o $(TDB_OBJ)
- $(CC) $(CFLAGS) -o tdbtest tdbtest.o $(TDB_OBJ) -lgdbm
+tdbtest: tdbtest.o tdb.o spinlock.o
+ $(CC) $(CFLAGS) -o tdbtest tdbtest.o tdb.o spinlock.o -lgdbm
-tdbtool: tdbtool.o $(TDB_OBJ)
- $(CC) $(CFLAGS) -o tdbtool tdbtool.o $(TDB_OBJ)
+tdbtool: tdbtool.o tdb.o spinlock.o
+ $(CC) $(CFLAGS) -o tdbtool tdbtool.o tdb.o spinlock.o
-tdbtorture: tdbtorture.o $(TDB_OBJ)
- $(CC) $(CFLAGS) -o tdbtorture tdbtorture.o $(TDB_OBJ)
+tdbtorture: tdbtorture.o tdb.o
+ $(CC) $(CFLAGS) -o tdbtorture tdbtorture.o tdb.o spinlock.o
clean:
rm -f $(PROGS) *.o *~ *% core test.db test.tdb test.gdbm
diff --git a/source/tdb/tdb.c b/source/tdb/tdb.c
index 97c8e00ae68..b1335728ab5 100644
--- a/source/tdb/tdb.c
+++ b/source/tdb/tdb.c
@@ -56,7 +56,6 @@
#define TDB_DEAD(r) ((r)->magic == TDB_DEAD_MAGIC)
#define TDB_BAD_MAGIC(r) ((r)->magic != TDB_MAGIC && !TDB_DEAD(r))
#define TDB_HASH_TOP(hash) (FREELIST_TOP + (BUCKET(hash)+1)*sizeof(tdb_off))
-#define TDB_LOG(x) (tdb->log_fn?((tdb->log_fn x),0) : 0)
/* lock offsets */
#define GLOBAL_LOCK 0
@@ -66,45 +65,30 @@
#define MAP_FILE 0
#endif
-#ifndef MAP_FAILED
-#define MAP_FAILED ((void *)-1)
-#endif
-
#define BUCKET(hash) ((hash) % tdb->header.hash_size)
TDB_DATA tdb_null;
/* all contexts, to ensure no double-opens (fcntl locks don't nest!) */
static TDB_CONTEXT *tdbs = NULL;
-static void tdb_munmap(TDB_CONTEXT *tdb)
+static void *tdb_munmap(void *ptr, tdb_len size)
{
#ifdef HAVE_MMAP
- if (tdb->map_ptr) munmap(tdb->map_ptr, tdb->map_size);
+ munmap(ptr, size);
#endif
- tdb->map_ptr = NULL;
+ return NULL;
}
-static void tdb_mmap(TDB_CONTEXT *tdb)
+static void *tdb_mmap(tdb_len size, int read_only, int fd)
{
+ void *ret = NULL;
#ifdef HAVE_MMAP
- if (!(tdb->flags & TDB_NOMMAP)) {
- tdb->map_ptr = mmap(NULL, tdb->map_size,
- PROT_READ|(tdb->read_only? 0:PROT_WRITE),
- MAP_SHARED|MAP_FILE, tdb->fd, 0);
-
- /*
- * NB. When mmap fails it returns MAP_FAILED *NOT* NULL !!!!
- */
-
- if (tdb->map_ptr == MAP_FAILED) {
- tdb->map_ptr = NULL;
- TDB_LOG((tdb, 2, "tdb_mmap failed for size %d (%s)\n",
- tdb->map_size, strerror(errno)));
- }
- }
-#else
- tdb->map_ptr = NULL;
+ ret = mmap(NULL, size, PROT_READ | (read_only ? 0 : PROT_WRITE), MAP_SHARED|MAP_FILE, fd, 0);
+
+ if (ret == (void *)-1)
+ ret = NULL;
#endif
+ return ret;
}
/* Endian conversion: we only ever deal with 4 byte quantities */
@@ -140,7 +124,7 @@ struct list_struct {
/* a byte range locking function - return 0 on success
this functions locks/unlocks 1 byte at the specified offset */
static int tdb_brlock(TDB_CONTEXT *tdb, tdb_off offset,
- int rw_type, int lck_type, int probe)
+ int rw_type, int lck_type)
{
struct flock fl;
@@ -153,40 +137,23 @@ static int tdb_brlock(TDB_CONTEXT *tdb, tdb_off offset,
fl.l_len = 1;
fl.l_pid = 0;
- if (fcntl(tdb->fd,lck_type,&fl)) {
- if (!probe) {
- TDB_LOG((tdb, 5,"tdb_brlock failed at offset %d rw_type=%d lck_type=%d\n",
- offset, rw_type, lck_type));
- }
- return TDB_ERRCODE(TDB_ERR_LOCK, -1);
- }
+ if (fcntl(tdb->fd,lck_type,&fl)) return TDB_ERRCODE(TDB_ERR_LOCK, -1);
return 0;
}
/* lock a list in the database. list -1 is the alloc list */
static int tdb_lock(TDB_CONTEXT *tdb, int list, int ltype)
{
- if (list < -1 || list >= (int)tdb->header.hash_size) {
- TDB_LOG((tdb, 0,"tdb_lock: invalid list %d for ltype=%d\n",
- list, ltype));
- return -1;
- }
+ if (list < -1 || list >= (int)tdb->header.hash_size) return -1;
if (tdb->flags & TDB_NOLOCK) return 0;
/* Since fcntl locks don't nest, we do a lock for the first one,
and simply bump the count for future ones */
if (tdb->locked[list+1].count == 0) {
if (tdb->header.rwlocks) {
- if (tdb_spinlock(tdb, list, ltype)) {
- TDB_LOG((tdb, 0, "tdb_lock spinlock on list ltype=%d\n",
- list, ltype));
- return -1;
- }
- } else if (tdb_brlock(tdb,FREELIST_TOP+4*list,ltype,F_SETLKW, 0)) {
- TDB_LOG((tdb, 0,"tdb_lock failed on list %d ltype=%d (%s)\n",
- list, ltype, strerror(errno)));
+ if (tdb_spinlock(tdb, list, ltype)) return -1;
+ } else if (tdb_brlock(tdb,FREELIST_TOP+4*list,ltype,F_SETLKW))
return -1;
- }
tdb->locked[list+1].ltype = ltype;
}
tdb->locked[list+1].count++;
@@ -205,7 +172,7 @@ static void tdb_unlock(TDB_CONTEXT *tdb, int list, int ltype)
if (tdb->locked[list+1].count == 1) {
/* Down to last nested lock: unlock underneath */
if (tdb->header.rwlocks) tdb_spinunlock(tdb, list, ltype);
- else tdb_brlock(tdb, FREELIST_TOP+4*list, F_UNLCK, F_SETLKW, 0);
+ else tdb_brlock(tdb, FREELIST_TOP+4*list, F_UNLCK, F_SETLKW);
}
tdb->locked[list+1].count--;
}
@@ -225,58 +192,45 @@ static u32 tdb_hash(TDB_DATA *key)
/* check for an out of bounds access - if it is out of bounds then
see if the database has been expanded by someone else and expand
- if necessary
- note that "len" is the minimum length needed for the db
-*/
-static int tdb_oob(TDB_CONTEXT *tdb, tdb_off len, int probe)
+ if necessary */
+static int tdb_oob(TDB_CONTEXT *tdb, tdb_off offset)
{
struct stat st;
- if (len <= tdb->map_size) return 0;
+ if (offset <= tdb->map_size) return 0;
if (tdb->flags & TDB_INTERNAL) return 0;
fstat(tdb->fd, &st);
- if (st.st_size < (size_t)len) {
- if (!probe) {
- TDB_LOG((tdb, 0,"tdb_oob len %d beyond eof at %d\n",
- (int)len, (int)st.st_size));
- }
- return TDB_ERRCODE(TDB_ERR_IO, -1);
- }
+ if (st.st_size <= (size_t)offset) return TDB_ERRCODE(TDB_ERR_IO, -1);
/* Unmap, update size, remap */
- tdb_munmap(tdb);
+ if (tdb->map_ptr) tdb->map_ptr=tdb_munmap(tdb->map_ptr, tdb->map_size);
tdb->map_size = st.st_size;
- tdb_mmap(tdb);
+ if (!(tdb->flags & TDB_NOMMAP))
+ tdb->map_ptr = tdb_mmap(tdb->map_size, tdb->read_only,tdb->fd);
return 0;
}
/* write a lump of data at a specified offset */
static int tdb_write(TDB_CONTEXT *tdb, tdb_off off, void *buf, tdb_len len)
{
- if (tdb_oob(tdb, off + len, 0) != 0) return -1;
+ if (tdb_oob(tdb, off + len) != 0) return -1;
if (tdb->map_ptr) memcpy(off + (char *)tdb->map_ptr, buf, len);
else if (lseek(tdb->fd, off, SEEK_SET) != off
- || write(tdb->fd, buf, len) != (ssize_t)len) {
- TDB_LOG((tdb, 0,"tdb_write failed at %d len=%d (%s)\n",
- off, len, strerror(errno)));
+ || write(tdb->fd, buf, len) != (ssize_t)len)
return TDB_ERRCODE(TDB_ERR_IO, -1);
- }
return 0;
}
/* read a lump of data at a specified offset, maybe convert */
static int tdb_read(TDB_CONTEXT *tdb,tdb_off off,void *buf,tdb_len len,int cv)
{
- if (tdb_oob(tdb, off + len, 0) != 0) return -1;
+ if (tdb_oob(tdb, off + len) != 0) return -1;
if (tdb->map_ptr) memcpy(buf, off + (char *)tdb->map_ptr, len);
else if (lseek(tdb->fd, off, SEEK_SET) != off
- || read(tdb->fd, buf, len) != (ssize_t)len) {
- TDB_LOG((tdb, 0,"tdb_read failed at %d len=%d (%s)\n",
- off, len, strerror(errno)));
+ || read(tdb->fd, buf, len) != (ssize_t)len)
return TDB_ERRCODE(TDB_ERR_IO, -1);
- }
if (cv) convert(buf, len);
return 0;
}
@@ -286,11 +240,7 @@ static char *tdb_alloc_read(TDB_CONTEXT *tdb, tdb_off offset, tdb_len len)
{
char *buf;
- if (!(buf = malloc(len))) {
- TDB_LOG((tdb, 0,"tdb_alloc_read malloc failed len=%d (%s)\n",
- len, strerror(errno)));
- return TDB_ERRCODE(TDB_ERR_OOM, buf);
- }
+ if (!(buf = malloc(len))) return TDB_ERRCODE(TDB_ERR_OOM, buf);
if (tdb_read(tdb, offset, buf, len, 0) == -1) {
free(buf);
return NULL;
@@ -313,11 +263,8 @@ static int ofs_write(TDB_CONTEXT *tdb, tdb_off offset, tdb_off *d)
static int rec_read(TDB_CONTEXT *tdb, tdb_off offset, struct list_struct *rec)
{
if (tdb_read(tdb, offset, rec, sizeof(*rec),DOCONV()) == -1) return -1;
- if (TDB_BAD_MAGIC(rec)) {
- TDB_LOG((tdb, 0,"rec_read bad magic 0x%x at offset=%d\n", rec->magic, offset));
- return TDB_ERRCODE(TDB_ERR_CORRUPT, -1);
- }
- return tdb_oob(tdb, rec->next+sizeof(*rec), 0);
+ if (TDB_BAD_MAGIC(rec)) return TDB_ERRCODE(TDB_ERR_CORRUPT, -1);
+ return tdb_oob(tdb, rec->next);
}
static int rec_write(TDB_CONTEXT *tdb, tdb_off offset, struct list_struct *rec)
{
@@ -326,15 +273,17 @@ static int rec_write(TDB_CONTEXT *tdb, tdb_off offset, struct list_struct *rec)
}
/* read a freelist record and check for simple errors */
-static int rec_free_read(TDB_CONTEXT *tdb, tdb_off off, struct list_struct *rec)
+static int rec_free_read(TDB_CONTEXT *tdb, tdb_off off, struct list_struct*rec)
{
if (tdb_read(tdb, off, rec, sizeof(*rec),DOCONV()) == -1) return -1;
if (rec->magic != TDB_FREE_MAGIC) {
- TDB_LOG((tdb, 0,"rec_free_read bad magic 0x%x at offset=%d\n",
- rec->magic, off));
+#ifdef TDB_DEBUG
+ printf("bad magic 0x%08x at offset %d\n",
+ rec->magic, off);
+#endif
return TDB_ERRCODE(TDB_ERR_CORRUPT, -1);
}
- if (tdb_oob(tdb, rec->next+sizeof(*rec), 0) != 0) return -1;
+ if (tdb_oob(tdb, rec->next) != 0) return -1;
return 0;
}
@@ -351,67 +300,10 @@ static int update_tailer(TDB_CONTEXT *tdb, tdb_off offset,
}
#ifdef TDB_DEBUG
-static tdb_off tdb_dump_record(TDB_CONTEXT *tdb, tdb_off offset)
-{
- struct list_struct rec;
- tdb_off tailer_ofs, tailer;
-
- if (tdb_read(tdb, offset, (char *)&rec, sizeof(rec), DOCONV()) == -1) {
- printf("ERROR: failed to read record at %u\n", offset);
- return 0;
- }
-
- printf(" rec: offset=%u next=%d rec_len=%d key_len=%d data_len=%d full_hash=0x%x magic=0x%x\n",
- offset, rec.next, rec.rec_len, rec.key_len, rec.data_len, rec.full_hash, rec.magic);
-
- tailer_ofs = offset + sizeof(rec) + rec.rec_len - sizeof(tdb_off);
- if (ofs_read(tdb, tailer_ofs, &tailer) == -1) {
- printf("ERROR: failed to read tailer at %u\n", tailer_ofs);
- return rec.next;
- }
-
- if (tailer != rec.rec_len + sizeof(rec)) {
- printf("ERROR: tailer does not match record! tailer=%u totalsize=%u\n", tailer, rec.rec_len + sizeof(rec));
- }
- return rec.next;
-}
-
-static void tdb_dump_chain(TDB_CONTEXT *tdb, int i)
-{
- tdb_off rec_ptr, top;
-
- top = TDB_HASH_TOP(i);
-
- tdb_lock(tdb, i, F_WRLCK);
-
- if (ofs_read(tdb, top, &rec_ptr) == -1) {
- tdb_unlock(tdb, i, F_WRLCK);
- return;
- }
-
- if (rec_ptr) printf("hash=%d\n", i);
-
- while (rec_ptr) {
- rec_ptr = tdb_dump_record(tdb, rec_ptr);
- }
- tdb_unlock(tdb, i, F_WRLCK);
-}
-
-void tdb_dump_all(TDB_CONTEXT *tdb)
-{
- tdb_off off;
- int i;
- for (i=0;i<tdb->header.hash_size;i++) {
- tdb_dump_chain(tdb, i);
- }
- printf("freelist:\n");
- tdb_dump_chain(tdb, -1);
-}
-
void tdb_printfreelist(TDB_CONTEXT *tdb)
{
long total_free = 0;
- tdb_off offset, rec_ptr, last_ptr;
+ tdb_off offset, rec_ptr, last_ptr;
struct list_struct rec, lastrec, newrec;
tdb_lock(tdb, -1, F_WRLCK);
@@ -462,7 +354,6 @@ static int remove_from_freelist(TDB_CONTEXT *tdb, tdb_off off, tdb_off next)
/* Follow chain (next offset is at start of record) */
last_ptr = i;
}
- TDB_LOG((tdb, 0,"remove_from_freelist: not on list at off=%d\n", off));
return TDB_ERRCODE(TDB_ERR_CORRUPT, -1);
}
@@ -475,76 +366,52 @@ static int tdb_free(TDB_CONTEXT *tdb, tdb_off offset, struct list_struct *rec)
/* Allocation and tailer lock */
if (tdb_lock(tdb, -1, F_WRLCK) != 0) return -1;
- /* set an initial tailer, so if we fail we don't leave a bogus record */
- update_tailer(tdb, offset, rec);
-
/* Look right first (I'm an Australian, dammit) */
right = offset + sizeof(*rec) + rec->rec_len;
- if (right + sizeof(*rec) <= tdb->map_size) {
+ if (tdb_oob(tdb, right + sizeof(*rec)) == 0) {
struct list_struct r;
- if (tdb_read(tdb, right, &r, sizeof(r), DOCONV()) == -1) {
- TDB_LOG((tdb, 0, "tdb_free: right read failed at %u\n", right));
- goto left;
- }
+ if (tdb_read(tdb, right, &r, sizeof(r), DOCONV()) == -1)
+ goto fail;
/* If it's free, expand to include it. */
if (r.magic == TDB_FREE_MAGIC) {
- if (remove_from_freelist(tdb, right, r.next) == -1) {
- TDB_LOG((tdb, 0, "tdb_free: right free failed at %u\n", right));
- goto left;
- }
+ if (remove_from_freelist(tdb, right, r.next) == -1)
+ goto fail;
rec->rec_len += sizeof(r) + r.rec_len;
}
}
-left:
/* Look left */
- left = offset - sizeof(tdb_off);
+ left = offset - 4;
if (left > TDB_HASH_TOP(tdb->header.hash_size-1)) {
struct list_struct l;
tdb_off leftsize;
/* Read in tailer and jump back to header */
- if (ofs_read(tdb, left, &leftsize) == -1) {
- TDB_LOG((tdb, 0, "tdb_free: left offset read failed at %u\n", left));
- goto update;
- }
+ if (ofs_read(tdb, left, &leftsize) == -1) goto fail;
left = offset - leftsize;
/* Now read in record */
- if (tdb_read(tdb, left, &l, sizeof(l), DOCONV()) == -1) {
- TDB_LOG((tdb, 0, "tdb_free: left read failed at %u (%u)\n", left, leftsize));
- goto update;
- }
+ if (tdb_read(tdb, left, &l, sizeof(l), DOCONV()) == -1)
+ goto fail;
/* If it's free, expand to include it. */
if (l.magic == TDB_FREE_MAGIC) {
- if (remove_from_freelist(tdb, left, l.next) == -1) {
- TDB_LOG((tdb, 0, "tdb_free: left free failed at %u\n", left));
- goto update;
- } else {
- offset = left;
- rec->rec_len += leftsize;
- }
+ if (remove_from_freelist(tdb, left, l.next) == -1)
+ goto fail;
+ offset = left;
+ rec->rec_len += leftsize;
}
}
-
-update:
- if (update_tailer(tdb, offset, rec) == -1) {
- TDB_LOG((tdb, 0, "tdb_free: update_tailer failed at %u\n", offset));
- goto fail;
- }
+ if (update_tailer(tdb, offset, rec) == -1) goto fail;
/* Now, prepend to free list */
rec->magic = TDB_FREE_MAGIC;
- if (ofs_read(tdb, FREELIST_TOP, &rec->next) == -1 ||
- rec_write(tdb, offset, rec) == -1 ||
- ofs_write(tdb, FREELIST_TOP, &offset) == -1) {
- TDB_LOG((tdb, 0, "tdb_free record write failed at offset=%d\n", offset));
- goto fail;
- }
+ if (ofs_read(tdb, FREELIST_TOP, &rec->next) == -1) goto fail;
+ if (rec_write(tdb, offset, rec) == -1) goto fail;
+ if (ofs_write(tdb, FREELIST_TOP, &offset) == -1) goto fail;
/* And we're done. */
tdb_unlock(tdb, -1, F_WRLCK);
@@ -555,92 +422,37 @@ update:
return -1;
}
-
-/* expand a file. we prefer to use ftruncate, as that is what posix
- says to use for mmap expansion */
-static int expand_file(TDB_CONTEXT *tdb, tdb_off size, tdb_off addition)
-{
- char buf[1024];
-#if HAVE_FTRUNCATE_EXTEND
- if (ftruncate(tdb->fd, size+addition) != 0) {
- TDB_LOG((tdb, 0, "expand_file ftruncate to %d failed (%s)\n",
- size+addition, strerror(errno)));
- return -1;
- }
-#else
- char b = 0;
- if (lseek(tdb->fd, (size+addition) - 1, SEEK_SET) != (size+addition) - 1 ||
- write(tdb->fd, &b, 1) != 1) {
- TDB_LOG((tdb, 0, "expand_file to %d failed (%s)\n",
- size+addition, strerror(errno)));
- return -1;
- }
-#endif
- /* now fill the file with something. This ensures that the file isn't sparse, which would be
- very bad if we ran out of disk. This must be done with write, not via mmap */
- memset(buf, 0x42, sizeof(buf));
- if (lseek(tdb->fd, size, SEEK_SET) != size) return -1;
- while (addition) {
- int n = addition>sizeof(buf)?sizeof(buf):addition;
- int ret = write(tdb->fd, buf, n);
- if (ret != n) {
- TDB_LOG((tdb, 0, "expand_file write of %d failed (%s)\n",
- n, strerror(errno)));
- return -1;
- }
- addition -= n;
- }
- return 0;
-}
-
-
/* expand the database at least size bytes by expanding the underlying
file and doing the mmap again if necessary */
static int tdb_expand(TDB_CONTEXT *tdb, tdb_off size)
{
struct list_struct rec;
tdb_off offset;
+ char b = 0;
- if (tdb_lock(tdb, -1, F_WRLCK) == -1) {
- TDB_LOG((tdb, 0, "lock failed in tdb_expand\n"));
- return 0;
- }
+ if (tdb_lock(tdb, -1, F_WRLCK) == -1) return 0;
/* must know about any previous expansions by another process */
- tdb_oob(tdb, tdb->map_size + 1, 1);
+ tdb_oob(tdb, tdb->map_size + 1);
/* always make room for at least 10 more records, and round
the database up to a multiple of TDB_PAGE_SIZE */
size = TDB_ALIGN(tdb->map_size + size*10, TDB_PAGE_SIZE) - tdb->map_size;
- if (!(tdb->flags & TDB_INTERNAL))
- tdb_munmap(tdb);
-
- /*
- * We must ensure the file is unmapped before doing this
- * to ensure consistency with systems like OpenBSD where
- * writes and mmaps are not consistent.
- */
-
/* expand the file itself */
- if (!(tdb->flags & TDB_INTERNAL)) {
- if (expand_file(tdb, tdb->map_size, size) != 0) goto fail;
- }
+ if (!(tdb->flags & TDB_INTERNAL)) {
+ lseek(tdb->fd, tdb->map_size + size - 1, SEEK_SET);
+ if (write(tdb->fd, &b, 1) != 1) goto fail;
+ }
+
+ if (!(tdb->flags & TDB_INTERNAL) && tdb->map_ptr)
+ tdb->map_ptr = tdb_munmap(tdb->map_ptr, tdb->map_size);
tdb->map_size += size;
if (tdb->flags & TDB_INTERNAL)
tdb->map_ptr = realloc(tdb->map_ptr, tdb->map_size);
- /*
- * We must ensure the file is remapped before adding the space
- * to ensure consistency with systems like OpenBSD where
- * writes and mmaps are not consistent.
- */
-
- /* We're ok if the mmap fails as we'll fallback to read/write */
- tdb_mmap(tdb);
-
/* form a new freelist record */
memset(&rec,'\0',sizeof(rec));
rec.rec_len = size - sizeof(rec);
@@ -649,6 +461,9 @@ static int tdb_expand(TDB_CONTEXT *tdb, tdb_off size)
offset = tdb->map_size - size;
if (tdb_free(tdb, offset, &rec) == -1) goto fail;
+ if (!(tdb->flags & TDB_NOMMAP))
+ tdb->map_ptr = tdb_mmap(tdb->map_size, 0, tdb->fd);
+
tdb_unlock(tdb, -1, F_WRLCK);
return 0;
fail:
@@ -924,18 +739,18 @@ int tdb_exists(TDB_CONTEXT *tdb, TDB_DATA key)
/* record lock stops delete underneath */
static int lock_record(TDB_CONTEXT *tdb, tdb_off off)
{
- return off ? tdb_brlock(tdb, off, F_RDLCK, F_SETLKW, 0) : 0;
+ return off ? tdb_brlock(tdb, off, F_RDLCK, F_SETLKW) : 0;
}
/* write locks override our own fcntl readlocks, so check it here */
static int write_lock_record(TDB_CONTEXT *tdb, tdb_off off)
{
struct tdb_traverse_lock *i;
for (i = &tdb->travlocks; i; i = i->next) if (i->off == off) return -1;
- return tdb_brlock(tdb, off, F_WRLCK, F_SETLK, 1);
+ return tdb_brlock(tdb, off, F_WRLCK, F_SETLK);
}
static int write_unlock_record(TDB_CONTEXT *tdb, tdb_off off)
{
- return tdb_brlock(tdb, off, F_UNLCK, F_SETLK, 0);
+ return tdb_brlock(tdb, off, F_UNLCK, F_SETLK);
}
/* fcntl locks don't stack: avoid unlocking someone else's */
static int unlock_record(TDB_CONTEXT *tdb, tdb_off off)
@@ -945,7 +760,7 @@ static int unlock_record(TDB_CONTEXT *tdb, tdb_off off)
if (off == 0) return 0;
for (i = &tdb->travlocks; i; i = i->next) if (i->off == off) count++;
- return (count == 1 ? tdb_brlock(tdb, off, F_UNLCK, F_SETLKW, 0) : 0);
+ return (count == 1 ? tdb_brlock(tdb, off, F_UNLCK, F_SETLKW) : 0);
}
/* actually delete an entry in the database given the offset */
@@ -1044,10 +859,10 @@ int tdb_traverse(TDB_CONTEXT *tdb, tdb_traverse_func fn, void *state)
struct tdb_traverse_lock tl = { NULL, 0, 0 };
int ret, count = 0;
- /* This was in the initializaton, above, but the IRIX compiler
- * did not like it. crh
- */
- tl.next = tdb->travlocks.next;
+ /* This was in the initializaton, above, but the IRIX compiler
+ * did not like it. crh
+ */
+ tl.next = tdb->travlocks.next;
/* fcntl locks don't stack: beware traverse inside traverse */
tdb->travlocks.next = &tl;
@@ -1080,10 +895,8 @@ int tdb_traverse(TDB_CONTEXT *tdb, tdb_traverse_func fn, void *state)
free(key.dptr);
}
tdb->travlocks.next = tl.next;
- if (ret < 0)
- return -1;
- else
- return count;
+ if (ret < 0) return -1;
+ else return count;
}
/* find the first entry in the database and return its key */
@@ -1237,8 +1050,7 @@ int tdb_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, int flag)
ret = -1;
}
out:
- if (p)
- free(p);
+ free(p);
tdb_unlock(tdb, BUCKET(hash), F_WRLCK);
return ret;
}
@@ -1283,10 +1095,10 @@ TDB_CONTEXT *tdb_open(char *name, int hash_size, int tdb_flags,
if ((tdb.fd = open(name, open_flags, mode)) == -1) goto fail;
/* ensure there is only one process initialising at once */
- tdb_brlock(&tdb, GLOBAL_LOCK, F_WRLCK, F_SETLKW, 0);
+ tdb_brlock(&tdb, GLOBAL_LOCK, F_WRLCK, F_SETLKW);
/* we need to zero database if we are the only one with it open */
- if ((locked = (tdb_brlock(&tdb, ACTIVE_LOCK, F_WRLCK, F_SETLK, 0) == 0))
+ if ((locked = (tdb_brlock(&tdb, ACTIVE_LOCK, F_WRLCK, F_SETLK) == 0))
&& (tdb_flags & TDB_CLEAR_IF_FIRST)) {
open_flags |= O_CREAT;
ftruncate(tdb.fd, 0);
@@ -1323,18 +1135,19 @@ TDB_CONTEXT *tdb_open(char *name, int hash_size, int tdb_flags,
tdb.inode = st.st_ino;
tdb.locked = calloc(tdb.header.hash_size+1, sizeof(tdb.locked[0]));
if (!tdb.locked) goto fail;
- tdb_mmap(&tdb);
+ if (!(tdb.flags & TDB_NOMMAP))
+ tdb.map_ptr = tdb_mmap(st.st_size, tdb.read_only, tdb.fd);
if (locked) {
tdb_clear_spinlocks(&tdb);
- tdb_brlock(&tdb, ACTIVE_LOCK, F_UNLCK, F_SETLK, 0);
+ tdb_brlock(&tdb, ACTIVE_LOCK, F_UNLCK, F_SETLK);
}
/* leave this lock in place to indicate it's in use */
- tdb_brlock(&tdb, ACTIVE_LOCK, F_RDLCK, F_SETLKW, 0);
+ tdb_brlock(&tdb, ACTIVE_LOCK, F_RDLCK, F_SETLKW);
internal:
if (!(ret = malloc(sizeof(tdb)))) goto fail;
*ret = tdb;
- tdb_brlock(&tdb, GLOBAL_LOCK, F_UNLCK, F_SETLKW, 0);
+ tdb_brlock(&tdb, GLOBAL_LOCK, F_UNLCK, F_SETLKW);
ret->next = tdbs;
tdbs = ret;
return ret;
@@ -1342,7 +1155,7 @@ TDB_CONTEXT *tdb_open(char *name, int hash_size, int tdb_flags,
fail:
if (tdb.name) free(tdb.name);
if (tdb.fd != -1) close(tdb.fd);
- tdb_munmap(&tdb);
+ if (tdb.map_ptr) tdb_munmap(tdb.map_ptr, tdb.map_size);
return NULL;
}
@@ -1354,7 +1167,7 @@ int tdb_close(TDB_CONTEXT *tdb)
if (tdb->map_ptr) {
if (tdb->flags & TDB_INTERNAL) free(tdb->map_ptr);
- else tdb_munmap(tdb);
+ else tdb_munmap(tdb->map_ptr, tdb->map_size);
}
if (tdb->name) free(tdb->name);
if (tdb->fd != -1) {
@@ -1463,10 +1276,3 @@ void tdb_chainunlock(TDB_CONTEXT *tdb, TDB_DATA key)
{
tdb_unlock(tdb, BUCKET(tdb_hash(&key)), F_WRLCK);
}
-
-
-/* register a loging function */
-void tdb_logging_function(TDB_CONTEXT *tdb, void (*fn)(TDB_CONTEXT *, int , const char *, ...))
-{
- tdb->log_fn = fn;
-}
diff --git a/source/tdb/tdb.h b/source/tdb/tdb.h
index cc37825e781..f09c6453b53 100644
--- a/source/tdb/tdb.h
+++ b/source/tdb/tdb.h
@@ -94,14 +94,12 @@ typedef struct tdb_context {
struct tdb_context *next; /* all tdbs to avoid multiple opens */
dev_t device; /* uniquely identifies this tdb */
ino_t inode; /* uniquely identifies this tdb */
- void (*log_fn)(struct tdb_context *tdb, int level, const char *, ...); /* logging function */
} TDB_CONTEXT;
typedef int (*tdb_traverse_func)(TDB_CONTEXT *, TDB_DATA, TDB_DATA, void *);
TDB_CONTEXT *tdb_open(char *name, int hash_size, int tdb_flags,
int open_flags, mode_t mode);
-void tdb_logging_function(TDB_CONTEXT *tdb, void (*fn)(TDB_CONTEXT *, int , const char *, ...));
enum TDB_ERROR tdb_error(TDB_CONTEXT *tdb);
const char *tdb_errorstr(TDB_CONTEXT *tdb);
TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key);
diff --git a/source/tdb/tdbtest.c b/source/tdb/tdbtest.c
index 2cc7e887297..9e636eef83a 100644
--- a/source/tdb/tdbtest.c
+++ b/source/tdb/tdbtest.c
@@ -4,7 +4,6 @@
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
-#include <stdarg.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/time.h>
@@ -41,14 +40,6 @@ static void fatal(char *why)
exit(1);
}
-static void tdb_log(TDB_CONTEXT *tdb, int level, const char *format, ...)
-{
- va_list ap;
-
- va_start(ap, format);
- vfprintf(stdout, format, ap);
- va_end(ap);
-}
static void compare_db(void)
{
@@ -239,7 +230,6 @@ int main(int argc, char *argv[])
fatal("db open failed");
}
- tdb_logging_function(db, tdb_log);
#if 1
srand(seed);
diff --git a/source/tdb/tdbtool.c b/source/tdb/tdbtool.c
index 8c09c76df55..27454f73dea 100644
--- a/source/tdb/tdbtool.c
+++ b/source/tdb/tdbtool.c
@@ -363,8 +363,6 @@ int main(int argc, char *argv[])
} else if (strcmp(tok,"dump") == 0) {
bIterate = 0;
tdb_traverse(tdb, print_rec, NULL);
- } else if (strcmp(tok,"list") == 0) {
- tdb_dump_all(tdb);
} else if (strcmp(tok,"info") == 0) {
info_tdb();
} else if (strcmp(tok, "free") == 0) {
diff --git a/source/tdb/tdbtorture.c b/source/tdb/tdbtorture.c
index 1a3b715402d..90dcc38aba1 100644
--- a/source/tdb/tdbtorture.c
+++ b/source/tdb/tdbtorture.c
@@ -4,11 +4,9 @@
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
-#include <stdarg.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/time.h>
-#include <sys/wait.h>
#include "tdb.h"
/* this tests tdb by doing lots of ops from several simultaneous
@@ -17,32 +15,13 @@
-#define DELETE_PROB 10
-#define STORE_PROB 3
-#define TRAVERSE_PROB 8
-#define CULL_PROB 60
+#define DELETE_PROB 7
+#define STORE_PROB 5
#define KEYLEN 3
#define DATALEN 100
static TDB_CONTEXT *db;
-static void tdb_log(TDB_CONTEXT *tdb, int level, const char *format, ...)
-{
- va_list ap;
-
- va_start(ap, format);
- vfprintf(stdout, format, ap);
- va_end(ap);
-#if 0
- {
- char *ptr;
- asprintf(&ptr,"xterm -e gdb /proc/%d/exe %d", getpid(), getpid());
- system(ptr);
- free(ptr);
- }
-#endif
-}
-
static void fatal(char *why)
{
perror(why);
@@ -62,15 +41,6 @@ static char *randbuf(int len)
return buf;
}
-static int cull_traverse(TDB_CONTEXT *db, TDB_DATA key, TDB_DATA dbuf,
- void *state)
-{
- if (random() % CULL_PROB == 0) {
- tdb_delete(db, key);
- }
- return 0;
-}
-
static void addrec_db(void)
{
int klen, dlen;
@@ -89,14 +59,12 @@ static void addrec_db(void)
data.dptr = d;
data.dsize = dlen+1;
- if (random() % DELETE_PROB == 0) {
+ if (rand() % DELETE_PROB == 0) {
tdb_delete(db, key);
- } else if (random() % STORE_PROB == 0) {
+ } else if (rand() % STORE_PROB == 0) {
if (tdb_store(db, key, data, TDB_REPLACE) != 0) {
fatal("tdb_store failed");
}
- } else if (random() % TRAVERSE_PROB == 0) {
- tdb_traverse(db, cull_traverse, NULL);
} else {
data = tdb_fetch(db, key);
if (data.dptr) free(data.dptr);
@@ -114,23 +82,20 @@ static int traverse_fn(TDB_CONTEXT *db, TDB_DATA key, TDB_DATA dbuf,
}
#ifndef NPROC
-#define NPROC 6
+#define NPROC 8
#endif
#ifndef NLOOPS
-#define NLOOPS 200000
+#define NLOOPS 50000
#endif
int main(int argc, char *argv[])
{
int i, seed=0;
int loops = NLOOPS;
- pid_t pids[NPROC];
-
- pids[0] = getpid();
for (i=0;i<NPROC-1;i++) {
- if ((pids[i+1]=fork()) == 0) break;
+ if (fork() == 0) break;
}
db = tdb_open("test.tdb", 0, TDB_CLEAR_IF_FIRST,
@@ -138,34 +103,15 @@ int main(int argc, char *argv[])
if (!db) {
fatal("db open failed");
}
- tdb_logging_function(db, tdb_log);
srand(seed + getpid());
- srandom(seed + getpid() + time(NULL));
for (i=0;i<loops;i++) addrec_db();
- tdb_traverse(db, NULL, NULL);
- tdb_traverse(db, traverse_fn, NULL);
- tdb_traverse(db, traverse_fn, NULL);
+ printf("traversed %d records\n", tdb_traverse(db, NULL, NULL));
+ printf("traversed %d records\n", tdb_traverse(db, traverse_fn, NULL));
+ printf("traversed %d records\n", tdb_traverse(db, traverse_fn, NULL));
tdb_close(db);
- if (getpid() == pids[0]) {
- for (i=0;i<NPROC-1;i++) {
- int status;
- if (waitpid(pids[i+1], &status, 0) != pids[i+1]) {
- printf("failed to wait for %d\n",
- (int)pids[i+1]);
- exit(1);
- }
- if (WEXITSTATUS(status) != 0) {
- printf("child %d exited with status %d\n",
- (int)pids[i+1], WEXITSTATUS(status));
- exit(1);
- }
- }
- printf("OK\n");
- }
-
return 0;
}
diff --git a/source/tdb/tdbutil.c b/source/tdb/tdbutil.c
index 0a2f1f84d45..6b4fe2d0245 100644
--- a/source/tdb/tdbutil.c
+++ b/source/tdb/tdbutil.c
@@ -46,6 +46,9 @@ void tdb_unlock_bystring(TDB_CONTEXT *tdb, char *keyval)
tdb_chainunlock(tdb, key);
}
+/* lock a chain by string key */
+
+
/* fetch a value by a arbitrary blob key, return -1 if not found */
int tdb_fetch_int_byblob(TDB_CONTEXT *tdb, char *keyval, size_t len)
{
@@ -104,7 +107,6 @@ int tdb_store_by_string(TDB_CONTEXT *tdb, char *keystr, void *buffer, int len)
/* Fetch a buffer using a null terminated string key. Don't forget to call
free() on the result dptr. */
-
TDB_DATA tdb_fetch_by_string(TDB_CONTEXT *tdb, char *keystr)
{
TDB_DATA key;
@@ -115,37 +117,6 @@ TDB_DATA tdb_fetch_by_string(TDB_CONTEXT *tdb, char *keystr)
return tdb_fetch(tdb, key);
}
-/* Atomic integer change. Returns old value. To create, set initial value in *oldval. */
-
-int tdb_change_int_atomic(TDB_CONTEXT *tdb, char *keystr, int *oldval, int change_val)
-{
- int val;
- int ret = -1;
-
- if (tdb_lock_bystring(tdb, keystr) == -1)
- return -1;
-
- if ((val = tdb_fetch_int(tdb, keystr)) == -1) {
- if (tdb_error(tdb) != TDB_ERR_NOEXIST)
- goto err_out;
-
- val = *oldval;
-
- } else {
- *oldval = val;
- val += change_val;
- }
-
- if (tdb_store_int(tdb, keystr, val) == -1)
- goto err_out;
-
- ret = 0;
-
- err_out:
-
- tdb_unlock_bystring(tdb, keystr);
- return ret;
-}
/* useful pair of routines for packing/unpacking data consisting of
integers and strings */
@@ -237,7 +208,6 @@ size_t tdb_pack(char *buf, int bufsize, char *fmt, ...)
/* useful pair of routines for packing/unpacking data consisting of
integers and strings */
-
int tdb_unpack(char *buf, int bufsize, char *fmt, ...)
{
va_list ap;
@@ -292,10 +262,7 @@ int tdb_unpack(char *buf, int bufsize, char *fmt, ...)
len = 4;
if (bufsize < len) goto no_space;
*i = IVAL(buf, 0);
- if (! *i) {
- *b = NULL;
- break;
- }
+ if (! *i) break;
len += *i;
if (bufsize < len) goto no_space;
*b = (char *)malloc(*i);
@@ -324,37 +291,3 @@ int tdb_unpack(char *buf, int bufsize, char *fmt, ...)
no_space:
return -1;
}
-
-/****************************************************************************
-log tdb messages via DEBUG()
-****************************************************************************/
-static void tdb_log(TDB_CONTEXT *tdb, int level, const char *format, ...)
-{
- va_list ap;
- char *ptr = NULL;
-
- va_start(ap, format);
- vasprintf(&ptr, format, ap);
- va_end(ap);
-
- if (!ptr || !*ptr) return;
-
- DEBUG(level, ("tdb(%s): %s", tdb->name, ptr));
- free(ptr);
-}
-
-
-
-/* like tdb_open() but also setup a logging function that redirects to
- the samba DEBUG() system */
-TDB_CONTEXT *tdb_open_log(char *name, int hash_size, int tdb_flags,
- int open_flags, mode_t mode)
-{
- TDB_CONTEXT *tdb = tdb_open(name, hash_size, tdb_flags,
- open_flags, mode);
- if (!tdb) return NULL;
-
- tdb_logging_function(tdb, tdb_log);
-
- return tdb;
-}
diff --git a/source/tests/fcntl_lock.c b/source/tests/fcntl_lock.c
index 3dc12a38973..32aecb87439 100644
--- a/source/tests/fcntl_lock.c
+++ b/source/tests/fcntl_lock.c
@@ -16,10 +16,6 @@
#include <sys/fcntl.h>
#endif
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-
#include <errno.h>
static int sys_waitpid(pid_t pid,int *status,int options)
@@ -43,22 +39,12 @@ int main(int argc, char *argv[])
struct flock lock;
int fd, ret, status=1;
pid_t pid;
- char *testdir = NULL;
-
- testdir = getenv("TESTDIR");
- if (testdir) chdir(testdir);
-
- alarm(10);
if (!(pid=fork())) {
sleep(2);
fd = open(DATA, O_RDONLY);
- if (fd == -1) {
- fprintf(stderr,"ERROR: failed to open %s (errno=%d)\n",
- DATA, (int)errno);
- exit(1);
- }
+ if (fd == -1) exit(1);
lock.l_type = F_WRLCK;
lock.l_whence = SEEK_SET;
@@ -73,21 +59,13 @@ int main(int argc, char *argv[])
if ((ret == -1) ||
(lock.l_type == F_UNLCK)) {
- fprintf(stderr,"ERROR: lock test failed (ret=%d errno=%d)\n", ret, (int)errno);
exit(1);
} else {
exit(0);
}
}
- unlink(DATA);
- fd = open(DATA, O_RDWR|O_CREAT|O_EXCL, 0600);
-
- if (fd == -1) {
- fprintf(stderr,"ERROR: failed to open %s (errno=%d)\n",
- DATA, (int)errno);
- exit(1);
- }
+ fd = open(DATA, O_RDWR|O_CREAT|O_TRUNC, 0600);
lock.l_type = F_WRLCK;
lock.l_whence = SEEK_SET;
@@ -112,10 +90,5 @@ int main(int argc, char *argv[])
status = (status == 0) ? 0 : 1;
#endif /* defined(WIFEXITED) && defined(WEXITSTATUS) */
- if (status) {
- fprintf(stderr,"ERROR: lock test failed with status=%d\n",
- status);
- }
-
exit(status);
}
diff --git a/source/utils/masktest.c b/source/utils/masktest.c
index a654b5bfd11..3fc7431519a 100644
--- a/source/utils/masktest.c
+++ b/source/utils/masktest.c
@@ -27,130 +27,34 @@ extern int DEBUGLEVEL;
static fstring password;
static fstring username;
static int got_pass;
-static int max_protocol = PROTOCOL_NT1;
+
static BOOL showall = False;
static BOOL old_list = False;
static char *maskchars = "<>\"?*abc.";
static char *filechars = "abcdefghijklm.";
-static int verbose;
-static int die_on_error;
-
-/* a test fn for LANMAN mask support */
-int ms_fnmatch_lanman_core(char *pattern, char *string)
-{
- char *p = pattern, *n = string;
- char c;
-
- if (strcmp(p,"?")==0 && strcmp(n,".")==0) goto match;
-
- while ((c = *p++)) {
- switch (c) {
- case '.':
- /* if (! *n && ! *p) goto match; */
- if (*n != '.') goto nomatch;
- n++;
- break;
-
- case '?':
- if ((*n == '.' && n[1] != '.') || ! *n) goto next;
- n++;
- break;
-
- case '>':
- if (n[0] == '.') {
- if (! n[1] && ms_fnmatch_lanman_core(p, n+1) == 0) goto match;
- if (ms_fnmatch_lanman_core(p, n) == 0) goto match;
- goto nomatch;
- }
- if (! *n) goto next;
- n++;
- break;
-
- case '*':
- if (! *p) goto match;
- for (; *n; n++) {
- if (ms_fnmatch_lanman_core(p, n) == 0) goto match;
- }
- break;
-
- case '<':
- for (; *n; n++) {
- if (ms_fnmatch_lanman_core(p, n) == 0) goto match;
- if (*n == '.' && !strchr(n+1,'.')) {
- n++;
- break;
- }
- }
- break;
-
- case '"':
- if (*n == 0 && ms_fnmatch_lanman_core(p, n) == 0) goto match;
- if (*n != '.') goto nomatch;
- n++;
- break;
-
- default:
- if (c != *n) goto nomatch;
- n++;
- }
- }
-
- if (! *n) goto match;
-
- nomatch:
- if (verbose) printf("NOMATCH pattern=[%s] string=[%s]\n", pattern, string);
- return -1;
-
-next:
- if (ms_fnmatch_lanman_core(p, n) == 0) goto match;
- goto nomatch;
-
- match:
- if (verbose) printf("MATCH pattern=[%s] string=[%s]\n", pattern, string);
- return 0;
-}
-
-int ms_fnmatch_lanman(char *pattern, char *string)
-{
- if (!strpbrk(pattern, "?*<>\"")) {
- if (strcmp(string,"..") == 0) string = ".";
- return strcmp(pattern, string);
- }
-
- if (strcmp(string,"..") == 0 || strcmp(string,".") == 0) {
- return ms_fnmatch_lanman_core(pattern, "..") &&
- ms_fnmatch_lanman_core(pattern, ".");
- }
-
- return ms_fnmatch_lanman_core(pattern, string);
-}
static BOOL reg_match_one(char *pattern, char *file)
{
- /* oh what a weird world this is */
- if (old_list && strcmp(pattern, "*.*") == 0) return True;
-
+ if (strcmp(file,"..") == 0) file = ".";
if (strcmp(pattern,".") == 0) return False;
- if (max_protocol <= PROTOCOL_LANMAN2) {
- return ms_fnmatch_lanman(pattern, file)==0;
- }
-
- if (strcmp(file,"..") == 0) file = ".";
+ /* oh what a weird world this is */
+ if (old_list && strcmp(pattern, "*.*") == 0) return True;
return ms_fnmatch(pattern, file)==0;
}
-static char *reg_test(char *pattern, char *long_name, char *short_name)
+static char *reg_test(char *pattern, char *file, char *short_name)
{
static fstring ret;
fstrcpy(ret, "---");
pattern = 1+strrchr(pattern,'\\');
+ file = 1+strrchr(file,'\\');
if (reg_match_one(pattern, ".")) ret[0] = '+';
if (reg_match_one(pattern, "..")) ret[1] = '+';
- if (reg_match_one(pattern, long_name) ||
+ if (reg_match_one(pattern, file) ||
(*short_name && reg_match_one(pattern, short_name))) ret[2] = '+';
return ret;
}
@@ -191,8 +95,6 @@ struct cli_state *connect_one(char *share)
return NULL;
}
- c->protocol = max_protocol;
-
if (!cli_session_request(c, &calling, &called)) {
DEBUG(0,("session request to %s failed\n", called.name));
cli_shutdown(c);
@@ -255,7 +157,7 @@ struct cli_state *connect_one(char *share)
static char *resultp;
static file_info *finfo;
-void listfn(file_info *f, const char *s, void *state)
+void listfn(file_info *f, const char *s)
{
if (strcmp(f->name,".") == 0) {
resultp[0] = '+';
@@ -267,32 +169,14 @@ void listfn(file_info *f, const char *s, void *state)
finfo = f;
}
-static void get_real_name(struct cli_state *cli,
- pstring long_name, fstring short_name)
+static void get_short_name(struct cli_state *cli,
+ char *name, fstring short_name)
{
- /* nasty hack to force level 260 listings - tridge */
- cli->capabilities |= CAP_NT_SMBS;
- if (max_protocol <= PROTOCOL_LANMAN1) {
- cli_list_new(cli, "\\masktest\\*.*", aHIDDEN | aDIR, listfn, NULL);
- } else {
- cli_list_new(cli, "\\masktest\\*", aHIDDEN | aDIR, listfn, NULL);
- }
+ cli_list(cli, name, aHIDDEN | aDIR, listfn);
if (finfo) {
fstrcpy(short_name, finfo->short_name);
strlower(short_name);
- pstrcpy(long_name, finfo->name);
- strlower(long_name);
- }
-
- if (*short_name == 0) {
- fstrcpy(short_name, long_name);
}
-
-#if 0
- if (!strchr(short_name,'.')) {
- fstrcat(short_name,".");
- }
-#endif
}
static void testpair(struct cli_state *cli, char *mask, char *file)
@@ -302,7 +186,6 @@ static void testpair(struct cli_state *cli, char *mask, char *file)
char *res2;
static int count;
fstring short_name;
- pstring long_name;
count++;
@@ -318,17 +201,20 @@ static void testpair(struct cli_state *cli, char *mask, char *file)
resultp = res1;
fstrcpy(short_name, "");
finfo = NULL;
- get_real_name(cli, long_name, short_name);
- finfo = NULL;
- fstrcpy(res1, "---");
- cli_list(cli, mask, aHIDDEN | aDIR, listfn, NULL);
+ if (old_list) {
+ cli_list_old(cli, mask, aHIDDEN | aDIR, listfn);
+ } else {
+ get_short_name(cli, file, short_name);
+ finfo = NULL;
+ fstrcpy(res1, "---");
+ cli_list(cli, mask, aHIDDEN | aDIR, listfn);
+ }
- res2 = reg_test(mask, long_name, short_name);
+ res2 = reg_test(mask, file, short_name);
if (showall || strcmp(res1, res2)) {
- DEBUG(0,("%s %s %d mask=[%s] file=[%s] rfile=[%s/%s]\n",
- res1, res2, count, mask, file, long_name, short_name));
- if (die_on_error) exit(1);
+ DEBUG(0,("%s %s %d mask=[%s] file=[%s] mfile=[%s]\n",
+ res1, res2, count, mask, file, short_name));
}
cli_unlink(cli, file);
@@ -381,8 +267,6 @@ static void test_mask(int argc, char *argv[],
strcmp(file+l,"..") == 0 ||
strcmp(mask+l,"..") == 0) continue;
- if (strspn(file+l, ".") == strlen(file+l)) continue;
-
testpair(cli, mask, file);
}
@@ -457,17 +341,8 @@ static void usage(void)
seed = time(NULL);
- while ((opt = getopt(argc, argv, "U:s:hm:f:aoW:M:vE")) != EOF) {
+ while ((opt = getopt(argc, argv, "U:s:hm:f:aoW:")) != EOF) {
switch (opt) {
- case 'E':
- die_on_error = 1;
- break;
- case 'v':
- verbose++;
- break;
- case 'M':
- max_protocol = interpret_protocol(optarg, max_protocol);
- break;
case 'U':
pstrcpy(username,optarg);
p = strchr(username,'%');
diff --git a/source/utils/nmblookup.c b/source/utils/nmblookup.c
index 0f978a6cf3f..4e85f6ac456 100644
--- a/source/utils/nmblookup.c
+++ b/source/utils/nmblookup.c
@@ -118,7 +118,7 @@ static void do_node_status(int fd, char *name, int type, struct in_addr ip)
for (i=0;i<count;i++) {
fstrcpy(cleanname, status[i].name);
for (j=0;cleanname[j];j++) {
- if (!isprint((int)cleanname[j])) cleanname[j] = '.';
+ if (!isprint(cleanname[j])) cleanname[j] = '.';
}
printf("\t%-15s <%02x> - %s\n",
cleanname,status[i].type,
diff --git a/source/utils/smbcacls.c b/source/utils/smbcacls.c
index 028eb481a65..4803da9f33d 100644
--- a/source/utils/smbcacls.c
+++ b/source/utils/smbcacls.c
@@ -92,7 +92,7 @@ static BOOL cacls_open_policy_hnd(void)
/* Some systems don't support SEC_RIGHTS_MAXIMUM_ALLOWED,
but NT sends 0x2000000 so we might as well do it too. */
- if (cli_lsa_open_policy(&lsa_cli, lsa_cli.mem_ctx, True,
+ if (cli_lsa_open_policy(&lsa_cli, True,
GENERIC_EXECUTE_ACCESS, &pol)
!= NT_STATUS_NOPROBLEMO) {
return False;
@@ -118,7 +118,7 @@ static void SidToString(fstring str, DOM_SID *sid)
/* Ask LSA to convert the sid to a name */
if (!cacls_open_policy_hnd() ||
- cli_lsa_lookup_sids(&lsa_cli, lsa_cli.mem_ctx, &pol, 1, sid, &names, &types,
+ cli_lsa_lookup_sids(&lsa_cli, &pol, 1, sid, &names, &types,
&num_names) != NT_STATUS_NOPROBLEMO ||
!names || !names[0]) {
return;
@@ -127,6 +127,10 @@ static void SidToString(fstring str, DOM_SID *sid)
/* Converted OK */
fstrcpy(str, names[0]);
+
+ safe_free(names[0]);
+ safe_free(names);
+ safe_free(types);
}
/* convert a string to a SID, either numeric or username/group */
@@ -142,7 +146,7 @@ static BOOL StringToSid(DOM_SID *sid, char *str)
}
if (!cacls_open_policy_hnd() ||
- cli_lsa_lookup_names(&lsa_cli, lsa_cli.mem_ctx, &pol, 1, &str, &sids, &types,
+ cli_lsa_lookup_names(&lsa_cli, &pol, 1, &str, &sids, &types,
&num_sids) != NT_STATUS_NOPROBLEMO) {
result = False;
goto done;
@@ -150,6 +154,9 @@ static BOOL StringToSid(DOM_SID *sid, char *str)
sid_copy(sid, &sids[0]);
+ safe_free(sids);
+ safe_free(types);
+
done:
return result;
@@ -340,7 +347,7 @@ static SEC_DESC *sec_desc_parse(char *str)
char *p = str;
fstring tok;
SEC_DESC *ret;
- size_t sd_size;
+ unsigned sd_size;
DOM_SID *grp_sid=NULL, *owner_sid=NULL;
SEC_ACL *dacl=NULL;
int revision=1;
@@ -451,7 +458,7 @@ static int cacl_dump(struct cli_state *cli, char *filename)
return EXIT_FAILED;
}
- sd = cli_query_secdesc(cli, fnum, ctx);
+ sd = cli_query_secdesc(cli, fnum);
if (!sd) {
printf("ERROR: secdesc query failed: %s\n", cli_errstr(cli));
@@ -488,7 +495,7 @@ static int owner_set(struct cli_state *cli, enum chown_mode change_mode,
if (!StringToSid(&sid, new_username))
return EXIT_PARSE_ERROR;
- old = cli_query_secdesc(cli, fnum, ctx);
+ old = cli_query_secdesc(cli, fnum);
cli_close(cli, fnum);
@@ -582,7 +589,7 @@ static int cacl_set(struct cli_state *cli, char *filename,
return EXIT_FAILED;
}
- old = cli_query_secdesc(cli, fnum, ctx);
+ old = cli_query_secdesc(cli, fnum);
if (!old) {
printf("calc_set: Failed to query old descriptor\n");
@@ -810,7 +817,7 @@ You can string acls together with spaces, commas or newlines\n\
char *p;
static pstring servicesf = CONFIGFILE;
struct cli_state *cli=NULL;
- enum acl_mode mode = SMB_ACL_SET;
+ enum acl_mode mode;
char *the_acl = NULL;
enum chown_mode change_mode = REQUEST_NONE;
int result;
diff --git a/source/utils/smbcontrol.c b/source/utils/smbcontrol.c
index 631bcf9bb90..c5462ea1fb7 100644
--- a/source/utils/smbcontrol.c
+++ b/source/utils/smbcontrol.c
@@ -32,7 +32,6 @@ static struct {
{"profilelevel", MSG_REQ_PROFILELEVEL},
{"debuglevel", MSG_REQ_DEBUGLEVEL},
{"printer-notify", MSG_PRINTER_NOTIFY},
- {"close-share", MSG_SMB_FORCE_TDIS},
{NULL, -1}
};
@@ -70,7 +69,7 @@ a useful function for testing the message system
void pong_function(int msg_type, pid_t src, void *buf, size_t len)
{
pong_count++;
- printf("PONG from PID %u\n",(unsigned int)src);
+ printf("PONG from PID %d\n",src);
}
/****************************************************************************
@@ -83,7 +82,7 @@ void debuglevel_function(int msg_type, pid_t src, void *buf, size_t len)
memcpy(debuglevel_class, buf, len);
- printf("Current debug level of PID %u is %d ",(unsigned int)src, debuglevel_class[0]);
+ printf("Current debug level of PID %d is %d ",src, debuglevel_class[0]);
for (i=1;i<DBGC_LAST;i++)
if (debuglevel_class[i])
printf("%s:%d ", debug_classname_from_index(i), debuglevel_class[i]);
@@ -113,9 +112,9 @@ void profilelevel_function(int msg_type, pid_t src, void *buf, size_t len)
s = "count and time";
break;
}
- printf("Profiling %s on PID %u\n",s,(unsigned int)src);
+ printf("Profiling %s on PID %d\n",s,src);
} else {
- printf("Profiling not available on PID %u\n",(unsigned int)src);
+ printf("Profiling not available on PID %d\n",src);
}
got_level = True;
}
@@ -128,7 +127,7 @@ static BOOL send_message(char *dest, int msg_type, void *buf, int len, BOOL dupl
pid_t pid;
TDB_CONTEXT *the_tdb;
- the_tdb = tdb_open_log(lock_path("connections.tdb"), 0, 0, O_RDONLY, 0);
+ the_tdb = tdb_open(lock_path("connections.tdb"), 0, 0, O_RDONLY, 0);
if (!the_tdb) {
fprintf(stderr,"Failed to open connections database in send_message.\n");
return False;
@@ -172,7 +171,7 @@ static int parse_type(char *mtype)
/****************************************************************************
do command
****************************************************************************/
-static BOOL do_command(char *dest, char *msg_name, char **params)
+static BOOL do_command(char *dest, char *msg_name, char *params[])
{
int i, n, v;
int mtype;
@@ -187,7 +186,7 @@ static BOOL do_command(char *dest, char *msg_name, char **params)
switch (mtype) {
case MSG_DEBUG:
- if (!params || !params[0]) {
+ if (!params[0]) {
fprintf(stderr,"MSG_DEBUG needs a parameter\n");
return(False);
}
@@ -201,7 +200,7 @@ static BOOL do_command(char *dest, char *msg_name, char **params)
break;
case MSG_PROFILE:
- if (!params || !params[0]) {
+ if (!params[0]) {
fprintf(stderr,"MSG_PROFILE needs a parameter\n");
return(False);
}
@@ -272,7 +271,7 @@ static BOOL do_command(char *dest, char *msg_name, char **params)
fprintf(stderr,"printer-notify can only be sent to smbd\n");
return(False);
}
- if (!params || !params[0]) {
+ if (!params[0]) {
fprintf(stderr, "printer-notify needs a printer name\n");
return (False);
}
@@ -280,25 +279,12 @@ static BOOL do_command(char *dest, char *msg_name, char **params)
strlen(params[0]) + 1, False);
break;
- case MSG_SMB_FORCE_TDIS:
- if (!strequal(dest, "smbd")) {
- fprintf(stderr,"close-share can only be sent to smbd\n");
- return(False);
- }
- if (!params || !params[0]) {
- fprintf(stderr, "close-share needs a share name or '*'\n");
- return (False);
- }
- retval = send_message(dest, MSG_SMB_FORCE_TDIS, params[0],
- strlen(params[0]) + 1, False);
- break;
-
case MSG_PING:
if (!pong_registered) {
message_register(MSG_PONG, pong_function);
pong_registered = True;
}
- if (!params || !params[0]) {
+ if (!params[0]) {
fprintf(stderr,"MSG_PING needs a parameter\n");
return(False);
}
diff --git a/source/utils/smbfilter.c b/source/utils/smbfilter.c
index db83873e694..5d11c74d149 100644
--- a/source/utils/smbfilter.c
+++ b/source/utils/smbfilter.c
@@ -26,11 +26,11 @@
#define SECURITY_SET 0
/* this forces non-unicode */
-#define CAPABILITY_MASK (CAP_NT_SMBS | CAP_RPC_REMOTE_APIS)
+#define CAPABILITY_MASK CAP_UNICODE
#define CAPABILITY_SET 0
/* and non-unicode for the client too */
-#define CLI_CAPABILITY_MASK 0
+#define CLI_CAPABILITY_MASK CAP_UNICODE
#define CLI_CAPABILITY_SET 0
static char *netbiosname;
@@ -179,7 +179,7 @@ static void start_filter(char *desthost)
fd_set fds;
int num;
struct sockaddr addr;
- socklen_t in_addrlen = sizeof(addr);
+ int in_addrlen = sizeof(addr);
FD_ZERO(&fds);
FD_SET(s, &fds);
diff --git a/source/utils/smbpasswd.c b/source/utils/smbpasswd.c
index dfad834c8f0..524cd5b8ad0 100644
--- a/source/utils/smbpasswd.c
+++ b/source/utils/smbpasswd.c
@@ -319,13 +319,10 @@ static int process_root(int argc, char *argv[])
argv += optind;
/*
- * Ensure both add/delete user are not set
* Ensure add/delete user and either remote machine or join domain are
* not both set.
*/
- if(((local_flags & (LOCAL_ADD_USER|LOCAL_DELETE_USER)) == (LOCAL_ADD_USER|LOCAL_DELETE_USER)) ||
- ((local_flags & (LOCAL_ADD_USER|LOCAL_DELETE_USER)) &&
- ((remote_machine != NULL) || joining_domain))) {
+ if((local_flags & (LOCAL_ADD_USER|LOCAL_DELETE_USER)) && ((remote_machine != NULL) || joining_domain)) {
usage();
}
diff --git a/source/utils/smbw_sample.c b/source/utils/smbw_sample.c
index db92af95108..999dcaef477 100644
--- a/source/utils/smbw_sample.c
+++ b/source/utils/smbw_sample.c
@@ -34,8 +34,6 @@ int main(int argc, char *argv[])
char *path;
charset_initialise();
- lp_load(CONFIGFILE,1,0,0);
- codepage_initialise(lp_client_code_page());
smbw_setup_shared();
while ((opt = getopt(argc, argv, "W:U:R:d:P:l:hL:")) != EOF) {
diff --git a/source/utils/status.c b/source/utils/status.c
index 4d7792e515a..06abd09d929 100644
--- a/source/utils/status.c
+++ b/source/utils/status.c
@@ -186,13 +186,9 @@ static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *st
struct session_record *ptr;
struct connections_data crec;
- if (dbuf.dsize != sizeof(crec))
- return 0;
-
memcpy(&crec, dbuf.dptr, sizeof(crec));
- if (crec.cnum == -1)
- return 0;
+ if (crec.cnum == -1) return 0;
if (!process_exists(crec.pid) || !Ucrit_checkUsername(uidtoname(crec.uid))) {
return 0;
@@ -310,7 +306,7 @@ static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *st
return profile_dump();
}
- tdb = tdb_open_log(lock_path("connections.tdb"), 0, 0, O_RDONLY, 0);
+ tdb = tdb_open(lock_path("connections.tdb"), 0, 0, O_RDONLY, 0);
if (!tdb) {
printf("connections.tdb not initialised\n");
if (!lp_status(-1))
diff --git a/source/utils/testparm.c b/source/utils/testparm.c
index ae4a12a8825..20f36fcffe4 100644
--- a/source/utils/testparm.c
+++ b/source/utils/testparm.c
@@ -93,37 +93,29 @@ to a valid password server.\n", sec_setting );
if(lp_security() == SEC_USER && lp_unix_password_sync()) {
/*
- * Check that we have a valid lp_passwd_program() if not using pam.
+ * Check that we have a valid lp_passwd_program().
*/
-#ifdef WITH_PAM
- if (!lp_pam_password_change()) {
-#endif
-
- if(lp_passwd_program() == NULL) {
- printf("ERROR: the 'unix password sync' parameter is set and there is no valid 'passwd program' \
+ if(lp_passwd_program() == NULL) {
+ printf("ERROR: the 'unix password sync' parameter is set and there is no valid 'passwd program' \
parameter.\n" );
- ret = 1;
- } else {
- pstring passwd_prog;
- pstring truncated_prog;
- char *p;
-
- pstrcpy( passwd_prog, lp_passwd_program());
- p = passwd_prog;
- *truncated_prog = '\0';
- next_token(&p, truncated_prog, NULL, sizeof(pstring));
-
- if(access(truncated_prog, F_OK) == -1) {
- printf("ERROR: the 'unix password sync' parameter is set and the 'passwd program' (%s) \
+ ret = 1;
+ } else {
+ pstring passwd_prog;
+ pstring truncated_prog;
+ char *p;
+
+ pstrcpy( passwd_prog, lp_passwd_program());
+ p = passwd_prog;
+ *truncated_prog = '\0';
+ next_token(&p, truncated_prog, NULL, sizeof(pstring));
+
+ if(access(truncated_prog, F_OK) == -1) {
+ printf("ERROR: the 'unix password sync' parameter is set and the 'passwd program' (%s) \
cannot be executed (error was %s).\n", truncated_prog, strerror(errno) );
- ret = 1;
- }
+ ret = 1;
}
-
-#ifdef WITH_PAM
}
-#endif
if(lp_passwd_chat() == NULL) {
printf("ERROR: the 'unix password sync' parameter is set and there is no valid 'passwd chat' \
diff --git a/source/utils/torture.c b/source/utils/torture.c
index a1ac210b380..aaeb55eff7c 100644
--- a/source/utils/torture.c
+++ b/source/utils/torture.c
@@ -22,6 +22,8 @@
#define NO_SYSLOG
#include "includes.h"
+#include <sys/ipc.h>
+#include <sys/shm.h>
static fstring host, workgroup, share, password, username, myname;
static int max_protocol = PROTOCOL_NT1;
@@ -483,65 +485,6 @@ static void run_readwritemulti(int dummy)
close_connection(&cli);
}
-static void run_readwritelarge(int dummy)
-{
- static struct cli_state cli1;
- int fnum1;
- char *lockfname = "\\large.dat";
- size_t fsize;
- char buf[0x10000];
-
- if (!open_connection(&cli1)) {
- return;
- }
- cli_sockopt(&cli1, sockops);
- memset(buf,'\0',sizeof(buf));
-
- cli1.max_xmit = 0x11000;
-
- printf("starting readwritelarge\n");
-
- cli_unlink(&cli1, lockfname);
-
- fnum1 = cli_open(&cli1, lockfname, O_RDWR | O_CREAT | O_EXCL, DENY_NONE);
- if (fnum1 == -1) {
- printf("open read/write of %s failed (%s)\n", lockfname, cli_errstr(&cli1));
- return;
- }
-
- cli_write(&cli1, fnum1, 0, buf, 0, sizeof(buf));
-
- if (!cli_close(&cli1, fnum1)) {
- printf("close failed (%s)\n", cli_errstr(&cli1));
- }
-
- if (!cli_qpathinfo(&cli1, lockfname, NULL, NULL, NULL, &fsize, NULL)) {
- printf("qpathinfo failed (%s)\n", cli_errstr(&cli1));
- }
-
- if (fsize == sizeof(buf))
- printf("readwritelarge test 1 succeeded (size = %x)\n", fsize);
- else
- printf("readwritelarge test 1 failed (size = %x)\n", fsize);
-
- if (!cli_unlink(&cli1, lockfname)) {
- printf("unlink failed (%s)\n", cli_errstr(&cli1));
- }
-
- fnum1 = cli_open(&cli1, lockfname, O_RDWR | O_CREAT | O_EXCL, DENY_NONE);
- if (fnum1 == -1) {
- printf("open read/write of %s failed (%s)\n", lockfname, cli_errstr(&cli1));
- return;
- }
-
- cli_smbwrite(&cli1, fnum1, buf, 0, sizeof(buf));
-
- if (!cli_close(&cli1, fnum1)) {
- printf("close failed (%s)\n", cli_errstr(&cli1));
- }
- close_connection(&cli1);
-}
-
int line_count = 0;
/* run a test that simulates an approximate netbench client load */
@@ -920,16 +863,8 @@ static void run_locktest2(int dummy)
cli_setpid(&cli, 2);
- if (cli_unlock(&cli, fnum1, 0, 4)) {
- printf("unlock1 succeeded! This is a locking bug\n");
- } else {
- if (!check_error(&cli, ERRDOS, ERRnotlocked, 0)) return;
- }
-
if (cli_unlock(&cli, fnum1, 0, 8)) {
- printf("unlock2 succeeded! This is a locking bug\n");
- } else {
- if (!check_error(&cli, ERRDOS, ERRnotlocked, 0)) return;
+ printf("unlock1 succeeded! This is a locking bug\n");
}
if (cli_lock(&cli, fnum3, 0, 4, 0, WRITE_LOCK)) {
@@ -1755,7 +1690,7 @@ static void run_randomipc(int dummy)
static void browse_callback(const char *sname, uint32 stype,
- const char *comment, void *state)
+ const char *comment)
{
printf("\t%20.20s %08x %s\n", sname, stype, comment);
}
@@ -1779,12 +1714,12 @@ static void run_browsetest(int dummy)
printf("domain list:\n");
cli_NetServerEnum(&cli, cli.server_domain,
SV_TYPE_DOMAIN_ENUM,
- browse_callback, NULL);
+ browse_callback);
printf("machine list:\n");
cli_NetServerEnum(&cli, cli.server_domain,
SV_TYPE_ALL,
- browse_callback, NULL);
+ browse_callback);
close_connection(&cli);
@@ -1948,52 +1883,6 @@ static void run_trans2test(int dummy)
printf("trans2 test finished\n");
}
-/*
- This checks new W2K calls.
-*/
-
-void new_trans(struct cli_state *pcli, int fnum, int level)
-{
- char buf[4096];
-
- memset(buf, 0xff, sizeof(buf));
-
- if (!cli_qfileinfo_test(pcli, fnum, level, buf)) {
- printf("ERROR: qfileinfo (%d) failed (%s)\n", level, cli_errstr(pcli));
- } else {
- printf("qfileinfo: level %d\n", level);
- dump_data(0, buf, 256);
- printf("\n");
- }
-}
-
-static void run_w2ktest(int dummy)
-{
- static struct cli_state cli;
- int fnum;
- char *fname = "\\w2ktest\\w2k.tst";
- int level;
-
- printf("starting w2k test\n");
-
- if (!open_connection(&cli)) {
- return;
- }
-
- fnum = cli_open(&cli, fname,
- O_RDWR | O_CREAT , DENY_NONE);
-
- for (level = 1004; level < 1040; level++)
- new_trans(&cli, fnum, level);
-
- cli_close(&cli, fnum);
-
-
- close_connection(&cli);
-
- printf("w2k test finished\n");
-}
-
/*
this is a harness for some oplock tests
@@ -2651,25 +2540,11 @@ static void run_opentest(int dummy)
cli_unlink(&cli1, fname);
-
- printf("testing ctemp\n");
- {
- char *tmp_path;
- fnum1 = cli_ctemp(&cli1, "\\", &tmp_path);
- if (fnum1 == -1) {
- printf("ctemp failed (%s)\n", cli_errstr(&cli1));
- return;
- }
- printf("ctemp gave path %s\n", tmp_path);
- cli_close(&cli1, fnum1);
- cli_unlink(&cli1, tmp_path);
- }
-
close_connection(&cli1);
}
-static void list_fn(file_info *finfo, const char *name, void *state)
+static void list_fn(file_info *finfo, const char *name)
{
}
@@ -2706,9 +2581,9 @@ static void run_dirtest(int dummy)
t1 = end_timer();
- printf("Matched %d\n", cli_list(&cli, "a*.*", 0, list_fn, NULL));
- printf("Matched %d\n", cli_list(&cli, "b*.*", 0, list_fn, NULL));
- printf("Matched %d\n", cli_list(&cli, "xyzabc", 0, list_fn, NULL));
+ printf("Matched %d\n", cli_list(&cli, "a*.*", 0, list_fn));
+ printf("Matched %d\n", cli_list(&cli, "b*.*", 0, list_fn));
+ printf("Matched %d\n", cli_list(&cli, "xyzabc", 0, list_fn));
printf("dirtest core %g seconds\n", end_timer() - t1);
@@ -2835,10 +2710,8 @@ static struct {
{"TCON", run_tcon_test, 0},
{"RW1", run_readwritetest, 0},
{"RW2", run_readwritemulti, FLAG_MULTIPROC},
- {"RW3", run_readwritelarge, 0},
{"OPEN", run_opentest, 0},
{"DELETE", run_deletetest, 0},
- {"W2K", run_w2ktest, 0},
{NULL, NULL, 0}};
@@ -2924,8 +2797,6 @@ static void usage(void)
charset_initialise();
- codepage_initialise(lp_client_code_page());
-
lp_load(servicesf,True,False,False);
load_interfaces();
diff --git a/source/web/statuspage.c b/source/web/statuspage.c
index f3b07425b78..27a40d16958 100644
--- a/source/web/statuspage.c
+++ b/source/web/statuspage.c
@@ -1,6 +1,6 @@
/*
Unix SMB/Netbios implementation.
- Version 2.2.
+ Version 1.9.
web status page
Copyright (C) Andrew Tridgell 1997-1998
@@ -76,10 +76,6 @@ static void print_share_mode(share_mode_entry *e, char *fname)
static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* state)
{
struct connections_data crec;
-
- if (dbuf.dsize != sizeof(crec))
- return 0;
-
memcpy(&crec, dbuf.dptr, sizeof(crec));
if (crec.cnum == -1 && process_exists(crec.pid)) {
@@ -96,14 +92,10 @@ static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* st
static int traverse_fn2(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* state)
{
struct connections_data crec;
-
- if (dbuf.dsize != sizeof(crec))
- return 0;
-
memcpy(&crec, dbuf.dptr, sizeof(crec));
- if (crec.cnum != -1 || !process_exists(crec.pid) || (crec.pid == smbd_pid))
- return 0;
+ if (crec.cnum != -1 || !process_exists(crec.pid) ||
+ (crec.pid == smbd_pid)) return 0;
printf("<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td>\n",
(int)crec.pid,
@@ -122,14 +114,9 @@ static int traverse_fn2(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* st
static int traverse_fn3(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* state)
{
struct connections_data crec;
-
- if (dbuf.dsize != sizeof(crec))
- return 0;
-
memcpy(&crec, dbuf.dptr, sizeof(crec));
- if (crec.cnum == -1 || !process_exists(crec.pid))
- return 0;
+ if (crec.cnum == -1 || !process_exists(crec.pid)) return 0;
printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td></tr>\n",
crec.name,uidtoname(crec.uid),
@@ -187,7 +174,7 @@ void status_page(void)
refresh_interval = atoi(v);
}
- tdb = tdb_open_log(lock_path("connections.tdb"), 0, 0, O_RDONLY, 0);
+ tdb = tdb_open(lock_path("connections.tdb"), 0, 0, O_RDONLY, 0);
if (tdb) tdb_traverse(tdb, traverse_fn1, NULL);
printf("<H2>Server Status</H2>\n");
@@ -291,3 +278,4 @@ void status_page(void)
printf("//-->\n</script>\n");
}
}
+
diff --git a/source/web/swat.c b/source/web/swat.c
index 2a141e9898e..54b8b27a6dd 100644
--- a/source/web/swat.c
+++ b/source/web/swat.c
@@ -344,7 +344,6 @@ static void write_config(FILE *f, BOOL show_defaults, char *(*dos_to_ext)(char *
static int save_reload(int snum)
{
FILE *f;
- struct stat st;
f = sys_fopen(servicesf,"w");
if (!f) {
@@ -352,12 +351,6 @@ static int save_reload(int snum)
return 0;
}
- /* just in case they have used the buggy xinetd to create the file */
- if (fstat(fileno(f), &st) == 0 &&
- (st.st_mode & S_IWOTH)) {
- fchmod(fileno(f), S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
- }
-
write_config(f, False, _dos_to_unix);
if (snum)
lp_dump_one(f, False, snum, _dos_to_unix);
@@ -426,7 +419,7 @@ static void commit_parameters(int snum)
****************************************************************************/
static void image_link(char *name,char *hlink, char *src)
{
- printf("<A HREF=\"%s/%s\"><img border=\"0\" src=\"/swat/%s\" alt=\"%s\"></A>\n",
+ printf("<A HREF=\"%s/%s\"><img src=\"/swat/%s\" alt=\"%s\"></A>\n",
cgi_baseurl(), hlink, src, name);
}
@@ -991,7 +984,6 @@ static void printers_page(void)
char *page;
fault_setup(NULL);
- umask(S_IWGRP | S_IWOTH);
#if defined(HAVE_SET_AUTH_PARAMETERS)
set_auth_parameters(argc, argv);
diff --git a/swat/help/welcome.html b/swat/help/welcome.html
index 1c23d35a27c..db3b2ae0914 100644
--- a/swat/help/welcome.html
+++ b/swat/help/welcome.html
@@ -57,8 +57,6 @@ Please choose a configuration action using one of the above buttons
<li><a href="/swat/help/OS2-Client-HOWTO.html">OS/2 Clients and Samba</a>
<li><a href="/swat/help/printer_driver2.html">Printing under Samba 2.2.x</a>
<li><a href="/swat/help/UNIX_INSTALL.html">HOWTO Install and Test Samba</a>
- <li><a href="/swat/help/Integrating-with-Windows.html">Integrating Name Resolution and Authentication Services</a>
- <li><a href="/swat/help/CVS-Access.html">CVS Access to Samba code</a>
</ul>
</ul>
diff --git a/testsuite/build_farm/basicsmb.fns b/testsuite/build_farm/basicsmb.fns
deleted file mode 100644
index 3929c48a399..00000000000
--- a/testsuite/build_farm/basicsmb.fns
+++ /dev/null
@@ -1,63 +0,0 @@
-test_smb_conf_setup() {
- cat basicsmb.smb.conf.template | \
- sed "s|PREFIX|$prefix|g" | \
- sed "s|BUILD_FARM|$pwd|g" | \
- sed "s|WHOAMI|$whoami|g" \
- > $prefix/lib/smb.conf
-
- echo "127.0.0.1 localhost">$prefix/lib/lmhosts
- echo "127.0.0.1 SHARE">>$prefix/lib/lmhosts
- echo "127.0.0.1 USER">>$prefix/lib/lmhosts
- echo "127.0.0.1 SERVER">>$prefix/lib/lmhosts
- echo "127.0.0.1 DOMAIN">>$prefix/lib/lmhosts
- cp -f basicsmb.smb.conf.share $prefix/lib/smb.conf.share
- cp -f basicsmb.smb.conf.user $prefix/lib/smb.conf.user
- cp -f basicsmb.smb.conf.server $prefix/lib/smb.conf.server
- cp -f basicsmb.smb.conf.domain $prefix/lib/smb.conf.domain
- touch $prefix/lib/smb.conf.
- touch $prefix/lib/smb.conf.localhost
-}
-
-test_smbpasswd() {
- test_smbpasswd_password="$1"
- rm -f $prefix/private/smbpasswd
- echo "( echo $test_smbpasswd_password ; echo $test_smbpasswd_password; ) | $prefix/bin/smbpasswd -L -s -a $whoami"
- ( echo $password ; echo $password; ) | $prefix/bin/smbpasswd -L -s -a $whoami
- status=$?
- if [ $status = 0 ]; then
- echo "smbpasswd correctly set inital password ($test_smbpasswd_password)"
- else
- echo "smbpasswd failed to set inital password ($test_smbpasswd_password)! (status $status)"
- return 1
- fi
- return 0
-}
-
-test_listfilesauth() {
- remote_name="$1"
- echo $prefix/bin/smbclient//$remote_name/samba -n buildclient -U$whoami%$password -c 'ls'
- $prefix/bin/smbclient //$remote_name/samba -n buildclient -U$whoami%$password -c 'ls'
- status=$?
- if [ $status = 0 ]; then
- echo "listed files OK"
- else
- echo "listing files with smbd failed with status $status"
- return 1
- fi
- return 0
-}
-
-test_listfilesnpw() {
- remote_name="$1"
- echo $prefix/bin/smbclient //$remote_name/samba -n buildclient -U$whoami% -c 'ls'
- $prefix/bin/smbclient //$remote_name/samba -n buildclient -U$whoami% -c 'ls'
- status=$?
- if [ $status = 0 ]; then
- echo "smbd listed files with NO PASSWORD on an authenticated share!"
- return 1
- else
- echo "listing files with smbd failed with status $status (correct)"
- fi
- return 0
-}
-
diff --git a/testsuite/build_farm/basicsmb.smb.conf.server b/testsuite/build_farm/basicsmb.smb.conf.server
deleted file mode 100644
index 5db63b0473e..00000000000
--- a/testsuite/build_farm/basicsmb.smb.conf.server
+++ /dev/null
@@ -1,2 +0,0 @@
-security=server
-password server=localhost
diff --git a/testsuite/build_farm/basicsmb.smb.conf.template b/testsuite/build_farm/basicsmb.smb.conf.template
deleted file mode 100644
index 78f1da3d4ef..00000000000
--- a/testsuite/build_farm/basicsmb.smb.conf.template
+++ /dev/null
@@ -1,37 +0,0 @@
-[global]
- netbios name = BUILDFARM
- workgroup = TESTWG
- log level = 3
- debug timestamp = no
- encrypt passwords = yes
- server string = Samba %v Build Farm Tests
- name resolve order = lmhosts
- guest account = WHOAMI
- domain logons = yes
-
- include = PREFIX/lib/smb.conf.%L
-
-[test]
- path = PREFIX/testdir
- read only = no
-
-[samba]
- path = BUILD_FARM/samba
- read only = yes
- comment = Samba HEAD Sources
-
-[samba_2_2]
- path = BUILD_FARM/samba_2_2
- read only = yes
- comment = Samba 2.2. Sources
-
-[rsync]
- path = BUILD_FARM/rsync
- read only = yes
- comment = Rsync Sources
-
-[guest_share]
- path = PREFIX
- guest ok = yes
- read only = yes
- comment = Unauthenticated share for use in share level test \ No newline at end of file
diff --git a/testsuite/build_farm/basicsmb.smb.conf.user b/testsuite/build_farm/basicsmb.smb.conf.user
deleted file mode 100644
index 412d79ad021..00000000000
--- a/testsuite/build_farm/basicsmb.smb.conf.user
+++ /dev/null
@@ -1 +0,0 @@
- security = user \ No newline at end of file
diff --git a/testsuite/build_farm/runlist b/testsuite/build_farm/runlist
deleted file mode 100644
index f269fac7f22..00000000000
--- a/testsuite/build_farm/runlist
+++ /dev/null
@@ -1 +0,0 @@
-TEST_ALL="basicsmb-sharelist basicsmb-sharesec basicsmb-usersec basicsmb-serversec basicsmb-shareguest"