This commit was manufactured by cvs2svn to create branch 'SAMBA_3_0'.
authorcvs2svn Import User <samba-bugs@samba.org>
Wed, 26 Nov 2003 20:58:52 +0000 (20:58 +0000)
committercvs2svn Import User <samba-bugs@samba.org>
Wed, 26 Nov 2003 20:58:52 +0000 (20:58 +0000)
117 files changed:
WHATSNEW.txt
examples/LDAP/samba.schema
examples/libsmbclient/Makefile
examples/nss/wbtest.c [new file with mode: 0644]
examples/pdb/mysql/mysql.dump
examples/printing/smbprint.old [deleted file]
packaging/RedHat/samba.spec.tmpl
packaging/SuSE/samba3.spec
source/Makefile.in
source/VERSION
source/bin/.cvsignore
source/configure.in
source/include/genparser.h [deleted file]
source/include/genparser_samba.h [deleted file]
source/include/gums.h [deleted file]
source/include/includes.h
source/include/modconf.h [deleted file]
source/include/ntdomain.h
source/include/passdb.h
source/include/printing.h
source/include/rpc_client_proto.h [deleted file]
source/include/rpc_dce.h
source/include/rpc_ds.h
source/include/rpc_epmapper.h [deleted file]
source/include/rpc_lsa.h
source/include/rpc_secdes.h
source/include/smb.h
source/include/tdbsam2.h [deleted file]
source/include/tdbsam2_parse_info.h [deleted file]
source/intl/lang_tdb.c
source/lib/charcnv.c
source/lib/domain_namemap.c [deleted file]
source/lib/genparser.c [deleted file]
source/lib/genparser_samba.c [deleted file]
source/lib/secace.c
source/lib/smbldap.c
source/lib/smbldap_util.c [deleted file]
source/lib/talloctort.c
source/lib/time.c
source/lib/util_sid.c
source/lib/util_str.c
source/lib/util_uuid.c
source/libads/ldap.c
source/locking/locking.c
source/modules/developer.c [deleted file]
source/nmbd/nmbd_processlogon.c
source/nsswitch/wbinfo.c
source/nsswitch/winbind_nss_linux.c
source/nsswitch/winbindd.c
source/nsswitch/winbindd.h
source/nsswitch/winbindd_acct.c
source/nsswitch/winbindd_ads.c
source/nsswitch/winbindd_cache.c
source/nsswitch/winbindd_cm.c
source/nsswitch/winbindd_dual.c
source/nsswitch/winbindd_group.c
source/nsswitch/winbindd_misc.c
source/nsswitch/winbindd_nss.h
source/nsswitch/winbindd_pam.c
source/nsswitch/winbindd_passdb.c [deleted file]
source/nsswitch/winbindd_rpc.c
source/nsswitch/winbindd_sid.c
source/nsswitch/winbindd_user.c
source/nsswitch/winbindd_util.c
source/nsswitch/winbindd_wins.c
source/param/config_ldap.c [deleted file]
source/param/loadparm.c
source/param/modconf.c [deleted file]
source/passdb/passdb.c
source/passdb/pdb_guest.c
source/passdb/pdb_gums.c [deleted file]
source/passdb/pdb_tdb.c
source/passdb/pdb_xml.c
source/passdb/secrets.c
source/printing/notify.c
source/printing/nt_printing.c
source/printing/print_cups.c
source/printing/print_generic.c
source/printing/printing.c
source/printing/printing_db.c
source/rpc_client/cli_epmapper.c [deleted file]
source/rpc_client/cli_lsarpc.c
source/rpc_parse/parse_ds.c
source/rpc_parse/parse_epmapper.c [deleted file]
source/rpc_parse/parse_lsa.c
source/rpc_parse/parse_misc.c
source/rpc_parse/parse_rpc.c
source/rpc_parse/parse_sec.c
source/rpc_server/srv_epmapper.c [deleted file]
source/rpc_server/srv_epmapper_nt.c [deleted file]
source/rpc_server/srv_lsa_nt.c
source/rpc_server/srv_netlog.c
source/rpc_server/srv_netlog_nt.c
source/rpc_server/srv_pipe.c
source/rpc_server/srv_spoolss_nt.c
source/rpcclient/cmd_epmapper.c [deleted file]
source/rpcclient/cmd_lsarpc.c
source/rpcclient/rpcclient.c
source/sam/account.c [deleted file]
source/sam/group.c [deleted file]
source/sam/gums.c [deleted file]
source/sam/gums_api.c [deleted file]
source/sam/gums_helper.c [deleted file]
source/sam/gums_tdbsam2.c [deleted file]
source/sam/interface.c [deleted file]
source/script/genstruct.pl [deleted file]
source/script/installswat.sh
source/script/mkbuildoptions.awk
source/smbd/nttrans.c
source/torture/denytest.c
source/torture/torture.c
source/torture/utable.c
source/utils/net_ads_cldap.c
source/utils/ntlm_auth.c
source/utils/smbcontrol.c
source/utils/smbfilter.c
swat/lang/ja/help/welcome.html

index 69036fae3c635d6c3c25c9180fa2d16f5ad91937..f01dc7456d4a21f9893045745412acdf006ab002 100644 (file)
-                    WHATS NEW IN Samba 3.0.0
-                        September 24, 2003
+                   WHATS NEW IN Samba 3.0.1pre3
+                        November 14, 2003
                   ==============================
 
-This is the first official release of Samba 3.0.0 code base.  Work
-on the SAMBA_3_0 CVS branch continues.  Please refer to the section 
-on "Known Issues" for more details.
+This is a preview release of the Samba 3.0.1 code base and is
+provided for testing only.  This release is *not* intended for
+production servers.  Use at your own risk.
+
+There have been several bug fixes since the 3.0.0 release that
+we feel are important to make available to the Samba community
+for wider testings.  See the "Changes" section for details on
+exact updates.
+
+
+######################################################################
+Changes
+#######
+Changes since 3.0.1pre2
+-----------------------
+
+Please refer to the CVS log for the SAMBA_3_0 branch for complete
+details:
+
+1)  Skip over the winbind separator when looking up a user.
+    This fixes the bug that prevented local users from
+    matching an AD user when not running winbindd (bug 698).
+2)  Fix a problem with configure on *BSD systems. Make sure
+    we add -liconv etc to LDFLAGS.
+3)  Fix core dump bug when "security = server" and the authentication
+    server goes away.
+4)  Correct crash bug due to an empty munged dial string.
+5)  Show files locked by a specific user (smbstatus -u 'user') 
+    (bug 590).
+6)  Fix bug preventing print jobs from display in the queue
+    monitor used by Windows NT and later clients (bug 660).
+7)  Fix several reported problems with point-n-print from
+    Windows 2000/XP clients due to a bug in the EnumPrinterDataEx()
+    reply (bug 338, 527 & 643).
+8)  Fix a handful of potential memory leaks in the LDAP code used
+    by ldapsam[_compat] and the LDAP idmap backend.
+
+
+Changes since 3.0.1pre1
+-----------------------
+
+1)  Match Samba 2.2 behavior; make ACB_NORMAL the default ACB value.
+2)  Updated Japanese welcome file in SWAT.
+3)  Fix to  nt-time <-> unix-time functions reversible.
+4)  Ensure that winbindd uses the the escaped DN when querying
+    an AD ldap server.
+5)  Fix portability issues when compiling (bug 505, 550)
+6)  Compile fix for tdbbackup when Samba needs to override 
+    non-C99 compliant implementations of snprintf().
+7)  Use @PICSUFFIX@ instead of .po in Makefile.in (bug 574).
+8)  Make sure we break out of samsync loop on error.
+9)  Ensure error code path doesn't free unmalloc()'d memory
+    (bug 628).
+10) Add configure test for krb5_keytab_entry keyblock vs key 
+    member (bug 636).
+11) Fixed spinlocks.
+12) Modified testparm so that all output so all debug output goes 
+    to stderr, and all file processing goes to stdout.
+13) Fix error return code for BUFFER_TOO_SMALL in smbcacls 
+    and smbcquotas.
+14) Fix "NULL dest in safe_strcpy()" log message by ensuring that 
+    we have a devmode before copying a string to the devicename.
+15) Support mapping REALM.COM\user to a local user account (without 
+    running winbindd)  for compatibility with 2.2.x release.
+16) Ensure we don't use mmap() on blacklisted systems.
+17) fixed a number of bugs and memory leaks in the AIX 
+    winbindd shim
+18) Call initgroups() in SWAT before becomming the user so that
+    secondary group permissions can be used when writing to 
+    smb.conf.
+19) Fix signing problems when reverse connecting back to a 
+    client for printer notify
+20) Fix signing problems caused by a miss-sequence bug.
+21) Missing map in errormap for ERROR_MORE_DATA -> ERRDOS, ERRmoredata.
+    Fixes NEXUS tools running on Win9x clients (bug 64).
+22) Don't leave the domain field uninitialized in cli_lsa.c if some 
+    SID could not be mapped.
+23) Fix segfault in mount.cifs helper when there is no options 
+    specified during mount.
+24) Change the \n after the password prompt to go to tty instead 
+    of stdout (bug 668).
+25) Stop net -P from prompting for machine account password (bug 451).
+26) Change in behavior to Not only change the effective uid but also
+    the real uid when becoming unprivileged.
+27) Cope with Exchange 5.5 cleartext pop password auth.
+28) New files for support of initshutdown pipe.  Win2k doesn't 
+    respond properly to all requests on the winreg pipe, so we need 
+    to handle this new pipe (bug 534).
+29) Added more va_copy() checks in configure.in.
+30) Include fixes for libsmbclient build problems.
+31) Missing UNIX -> DOS codepage conversion in lanman.c.
+32) Allow DFMS-S filenames can now have arbitrary case (bug 667).
+33) Parameterize the listen backlog in smbd and make it larger by
+    default. A backlog of 5 is way too small these days.
+34) Check for an invalid fid before dereferencing the fsp pointer
+    (bug 696).
+35) Remove invalid memory frees and return codes in pdb_ldap.c.
+36) Prompt for password when invoking --set-auth-user and no 
+    password is given.
+37) Bind the nmbd sending socket to the 'socket address'.
+38) Re-order link command for smbd, rpcclient and smbpasswd to ensure 
+    $LDFLAGS occurs before any library specification (bug 661).
+39) Fix large number of printf() calls for 64-bit size_t.
+40) Fix AC_CHECK_MEMBER so that SLES8 does correctly finds the 
+    keyblock in the krb5 structs.
+41) Remove #include <compat.h> in hopes to avoid problems with 
+    apache header files.
+42) COrrect winbindd build problems on HP-UX 11
+43) Lowercase netgroups lookups (bug 703).
+44) Use the actual size of the buffer in strftime instead of a made
+    up value which just happens to be less than sizeof(fstring).  
+    (bug 713).
+45) Add ldaplibs to pdbedit link line (bug 651).
+46) Fix crash bug in smbclient completion (bug 659).
+47) Fix packet length for browse list reply (bug 771).
+48) Fix coredump in cli_get_backup_list().
+49) Make sure that we expand %N (bug 612).
+50) Allow rpcclient adddriver command to specify printer driver 
+    version (bug 514).
+51) Compile tdbdump by default.
+52) Apply patches to fix iconv detection for FreeBSD.
+53) Do not allow the 'guest account' to be added to a passdb backend 
+    using smbpasswd or pdbedit (bug 624).
+54) Save LDFLAGS during iconv detection (bug 57).
+55) Run krb5 logins through the username map if the winbindd 
+    lookup fails (bug 698).
+56) Add const for lp_set_name_resolve_order() to avoid compiler 
+    warnings (bug 471).
+57) Add support for the %i macro in smb.conf to stand in for the for
+    the local IP address to which a client connected.
+58) Allow winbindd to match local accounts to domain SID when 
+    'winbind trusted domains only = yes' (bug 680).
+59) Remove code in idmap_ldap that searches the user suffix and group 
+    suffix.  It's not needed and provides inconsistent functionality 
+    from the tdb backend.
+60) Patch to handle munged dial string for Windows 200 TSE.
+61) Correct the "smbldap_open: cannot access when not root error"
+    messages when looking up group information (bug 281).
+
+
+    
+Changes since 3.0.0
+-------------------
+
+Modified parameters
+  * mangled map (deprecated)
+  
+Removed Parameters
+  * mangled stack (unused)
+
+
+1)  Change the interface for init_unistr2 to not take a length 
+    but a flags field.  We were assuming that 
+    2*strlen(mb_string) == length of ucs2-le string.  (bug 480).
+2)  Allow d_printf() to handle strings with escaped quotation 
+    marks since the msg file includes the escape character (bug 489).
+3)  Fix bad html table row termination in SWAT wizard code (bug 413).
+4)  Fix to parse the level-2 strings.
+5)  Fix for "valid users = %S" in [homes].  Fix read/write 
+    list as well. 
+6)  Change AC_CHECK_LIB_EXT to prepend libraries instead of append.  
+    This is the same way AC_CHECK_LIB works (bug 508).
+7)  Testparm output fixes for clarity.
+8)  Fix broken wins hook functionality -- i18n bug (bug 528).
+9)  Take care of condition where DOS and NT error codes must differ.
+10) Default to using only built-in charsets when a working iconv 
+    implementation cannot be located.
+11) Wrap internals of sys_setgroups() so the sys_XX() call can 
+    be done unconditionally (bug 550).
+12) Remove duplicate smbspool link on SWAT's front page (bug 541).
+13) Save and restore CFLAGS before/after AC_PROG_CC.  Ensures that
+    --enable-debug=[yes|no] works correctly.
+14) Allow ^C to interrupt smbpasswd if using our getpass 
+    (e.g. smbpasswd command).
+15) Support signing only on RPC's (bug 167).
+16) Correct bug that prevented  Excel 2000 clients from opening 
+    files marked as read-only.
+17) Portability fix bugs 546 - 549).
+18) Explicitly initialize the value of AR for vendor makes that don't
+    do this (e.g. HPUX 11).  (bug 552).
+19) More i18n fixes for SWAT (bug 413).
+20) Change the cwd before the postexec script to ensure that a
+    umount will succeed.
+21) Correct double free that caused winbindd to crash when a DC 
+    is rebooted (bug 437).
+22) Fix incorrect mode sum (bug 562).
+23) Canonicalize SMB_INFO_ALLOCATION in the same was as
+    SMB_FS_FULL_SIZE_INFORMATION (bug 564).
+24) Add script to generate *msg files.
+25) Add Dutch SWAT translation file.
+26) Make sure to call get_user_groups() with the full winbindd 
+    name for a user if he/she has one (bug 406).
+27) Fix up error code returns from Samba4 tester. Ensure invalid 
+    paths are validated the same way.  
+28) Allow Samba3 to pass the Samba4 RAW-READ tests.
+29) Refuse to configure if --with-expsam=$BACKEND was used but no 
+    libraries were found for $BACKEND.
+30) Move sysquotas autoconf tests to a separate file.
+31) Match W2K w.r.t. writelock and writeclose.  Samba4 torture 
+    tester
+32) Make sure that the files that contain the static_init_$subsystem; 
+    macro get recompiled after configure by removing the object 
+    files.
+33) Ensure canceling a blocking lock returns the correct error 
+    message.
+34) Match Samba 2.2, and make ACB_NORMAL the default ACB value.
+
+
+
+######################################################################
+
+              =======================================
+              The original 3.0.0 release notes follow         
+              =======================================
 
 
 Major new features:
@@ -80,442 +291,6 @@ publisher for making "Using Samba" under the GNU Free Documentation
 License.
 
 
-######################################################################
-Changes since 3.0rc4
-####################
-
-Please refer to the CVS log for the SAMBA_3_0 branch for complete 
-details:
-
-1)  Fix bug that prevented restoring filenames of length
-    >100 characters.
-2)  Fix bug that prevented fast path code in strchr_m 
-    from being used.
-3)  Make sure we store the desired access flag on incoming 
-    SAMR rpc calls.
-4)  Fix smbd crash when dealing with mangled file names.
-5)  Ensure that the group comment field is not overwritten
-    if it already exists.
-6)  Fix bug that prevented 'net rpc join' from working
-    with mixed mode AD domains (bug 442).
-7)  Fix crash in smbd when a Samba PDC is not able to 
-    enumerate trusted domains (bug 450).
-8)  Fix crash bug found by the Samba4 testsuite.
-9)  Fix bug that prevented smbd from returning an ACL list
-    if one of the SIDs could not be resolved (bug 470).
-10) Remove -P option from smbclient printing scripts since it
-    has a different meaning in Samba 3.0 (bug 473).
-11) Sync smbldap-tools with latest version 
-12) Cleanup some warnings produced by the Sun C compiler.
-13) Several fixes for SWAT relating to international character 
-    sets.
-
-
-Changes since 3.0rc3
-####################
-
-1)  Fix incorrect error message in testparm.c regarding 'map system'.
-2)  Protect against core dump if ioctl for print job sends invalid 
-    fid.
-3)  Fix bug in generic hash cacluation.
-4)  Remove references to unused 'strip dot' parameter
-5)  Fix CPU burn bug in multi-byte character conversion.
-6)  Use opt_target_workgroup instead of lp_workgroup() in vampire 
-    code so we can override the value in smb.conf with the -w option.
-7)  Display an error if we can't create a posix account for the 
-    user when running 'net rpc vampire' (bug 323).
-8)  Fix UTF8 conversion bugs in LDAP passdb and idmap code (bug 296).
-9)  Fix smbd crash when changing the machine trust account password 
-    (bug 273).
-10) Remove getpwnam() calls from init_sam_from_xxx().  This means 
-    that %u & %g will no longer expand in the "login ..." set of 
-    smb.conf options, but %U and %G still do. The payback is that 
-    winbindd local accounts for users work with 'wbinfo -u' 
-    when winbind is running on a Samba PDC.
-11) Fix unitiailized timestamp where merging print_jobs and 
-    lpq listing.
-12) Fix bug in debian packaging files affecting non-i386 platforms.
-
-
-Changes since 3.0rc2
-####################
-
-1)  Remove Perl module dependencies in generated RedHat 8/9 RPMS.
-2)  Update mount helper to take synonyms for file_mode and 
-    dir_mode (fmask and dmask).
-3)  Fix portability bug with log2pcaphex.
-4)  Use different algorithm to generate codepages source code which 
-    allows to take gaps into account thus making unnecessary 
-    extended [index] = value, syntax in to_ucs2 array (bug 380).
-5)  Fix comment strings to 43 bytes as per spec.
-6)  Fix pam_winbind compile bug on FreeBSD (bug 261).
-7)  Support for in-memory keytabs, which are needed to make heimdal 
-    work properly.  MIT does not support them, so this check will be 
-    used to decide whether to use them.  (partial fix for bug 372).
-8)  Disable RC4-HMAC on broken heimdal setups.  (remainder of bug 
-    372).
-9)  Correct bug in smbclient that resulted in errors when untarring
-    long filenames (bug 308).
-10) Improve autoconf checks for PAM header files and libs.
-11) Added fast path to convert_string() when dealing with 
-    ASCII->ASCII, UCS2-LE->ASCII, and ASCII->UCS2-LE with 
-    values <= 0x7F. 
-12) Quiet debug messages when we don't find a module and it is not
-    a critical error (bug 375).
-13) Fix UNIX passwd sync properly.
-14) Fix more transitive trust issues in winbindd (bug 305).
-15) Ensure that winbindd functions with 'disable netbios = yes'
-16) Store the real short domain name in secrets.tdb as soon as we
-    know it.  Also display an error message when joining an AD
-    domain and the 'workgroup' parameter has not been specified.
-17) Return 0 DFS links instead of -1 when dfs support is not enabled.
-18) Update LDAP schema for Netscape DS 4.x and Novell eDirectory 8.7
-19) Ensure that name types can be specified using name#type notation
-    in the 'net' command (bug 73).
-20) Add retry looks to ADS sequence number and domain SID lookups 
-    (bug 364).
-21) use a variant of alloc_sub_basic() for string lists such as 
-    'valid users', 'write list', and 'read list' (bug 397).
-22) Fix seg fault when winbindd receives an error from the AD server
-    in response to an LDAP search (bug 282).
-23) Update findsmb to use the new syntax for smbclient and nmblookup.
-24) Fix bug that prevented variables from being used in explicitly 
-    defined path in [homes].
-25) Only set SIDs when they're returned by the MySQL query 
-    (pdb_mysql.so).
-26) Include support for NTLMv2 key exchange.
-27) Revert default for 'client ntlmv2 auth' to off (bug 359).
-28) Fix crash in winbindd when the trust account password gets 
-    changed underneath us via 'net rpc changetrustpw' (bug 382).
-29) Use djb-algorithm string hash - faster than the tdb one we 
-    used to use.  Does not change on disk format or hashing location.
-30) Implements some kind of improved AFS support for Samba on
-    Linux with OpenAFS 1.2.10. './configure --with-fake-kaserver'
-    assumes that you have OpenAFS on your machine.
-31) When enumerating dfs shares loop from 0 to lp_numservices() instead 
-    of relying on lp_servicename(n) to return an empty string for 
-    invalid service numbers (bug 403).
-32) Fix crash bug in 'net rpc samdump' (bug 334).
-33) Fix crash bug in WINS NSS module (bug 299).
-34) Fix a few minor compile errors on HP-UX.
-
-
-
-Changes since 3.0rc1
-####################
-
-1)  Add levels 261 and 262 to search. Found using Samba4 tester.
-2)  Correct bad error return code in session setup reply
-3)  Fix bug where smbd returned DOS error codes from SMBsearch
-    even when NT1 protocol was negotiated.
-4)  Implement SMBexit properly.
-5)  Return group lists from a Samba PDC to a Windows 9x/ME box
-    in implementing user level access control (bug 314).
-6)  Prevent SWAT from crashing when adding shares (bug 254)
-7)  Fix various documentation issues (bugs 304 & 214)
-8)  Fix wins server listing in SWAT (bug 197)
-9)  Fix problem in rpcclient that caused enumerating printer 
-    drivers to report failure (bug 294).
-10) Use kerberos 5 authentication in our client code whenever possible
-11) Fix schannel bug that caused Active Directory DC's to downgrade our
-    machine account to an NT member.
-12) Implement missing SAMR_REMOVE_USER_FOREIGN_DOMAIN call (bug 252).
-13) Implement automatic generation of include/version.h
-14) Include initial version of smbldap-tool scripts for the Samba 
-    3.0 schema.
-15) Implement numerous fixes for multi-byte character strings.
-16) Enable 'unix extensions' parameter by default.
-17) Make sure we set the SID type when falling back to the rid 
-    algorithm (bug 245).
-18) Correct linking problems with pam_smbpass (bug 327).
-19) Add SYSV defines for Irix and Solaris to ensure the 'printing'
-    parameter default to the correct value (bug 230)
-20) Fix recursion bug in alloc_string_sub() (bug 289, et. al.)
-21) Ensure that 'make install' includes the static and shared 
-    versions of the libsmbclient libraries.
-22) Add CP850 and CP437 internal character set support (bug 150).
-23) Add support to examples/LDAP/convertSambaAccount for generating
-    LDIF modify files instead of just add (303).
-24) Fix support for -W option in smbclient (bug 39)
-25) Remove 'ldap trust ids' parameter since it could not be supported
-    by the current architecture.
-26) Don't crash when no argument is given to -T in smbclient (bug 345).
-27) Ensure smbadduser contains the same paths for the smbpasswd file 
-    as the other Samba tools (bug 290).
-28) Port of 'available = no' fix for [homes] from SAMBA_2_2 cvs tree.
-29) Add sanity checks to DeletePrinterData[Ex]() and ensure that the
-    modified printer is written to disk.
-30) Force winbindd to periodically update the trusted domain cache.
-31) Remove outdated import/export script to convert an smbpasswd file
-    to and from and LDAP directory.  Use the pdbedit tool instead.
-32) Ensure that %U substitution is restored on next valid packet
-    if a logon fails.
-
-
-Changes since 3.0beta3
-######################
-
-1)  Various memory leak fixes.
-2)  Provide full support for SMB signing (server and client)
-3)  Check for broken getgrouplist() in glibc.
-4)  Don't get stuck in an infinite loop listing directories 
-    recursively if the server returns an empty directory name
-    (bug 222).
-5)  Idle LDAP connections after 150 seconds.
-6)  Patched make uninstallmodules (bug 236).
-7)  Fix bug that caused smbd to return incomplete directory listings
-    when UNIX files contained MS wildcard characters.
-8)  Quiet default debug messages in command line tools.
-9)  Fixes to avoid panics on invalid multi-byte strings.
-10) Fix error messages when creating a new smbpasswd file (bug 198).
-11) Implemented better detection routines in autoconf scripts for 
-    locating ads support on the host OS.
-12) Fix bug that caused libraries in /usr/local/lib to be ignored 
-    (bug 174).
-13) Ensure winbindd_ads uses the correct realm or domain name when 
-    connecting to trusted DC.
-14) Ensure a correct prototype is created for snprintf() (bug 187)
-15) Stop files being created on read-only shares in some circumstances.
-16) Fix wbinfo -p (bug 251)
-17) Support schannel on any tcp/ip connection if necessary
-18) Correct bug in user_in_list() so that it works with winbind groups 
-    again.
-19) Ensure the schannel bind credentials default to the domain 
-    of the destination host.
-20) Default password expiration time in account_pol.tdb to never 
-    expire.  Remove any existing account_pol.tdb file to reset
-    the new default policy (bug 184). 
-21) Add buttons to SWAT to change the view of smb.conf (bug 212)
-22) Fix incorrect checks that determine whether or not the 'add user 
-    script' has been set.
-23) More cleanup for internal character set conversions.
-24) Fixes for multi-byte strings in stat cache code.
-25) Ensure that the net command honors the 'workgroup' parameter 
-    in smb.conf when not overridden from the command line.
-26) Add gss-spnego support to the ntlm_auth tool.
-27) Add vfs_default_quota VFS module.
-28) Added server support for NT quota interfaces.
-29) Prevent Krb5 replay attacks by adding a replay_cache.
-30) Fix problems with winbindd and transitive trusts in AD domains.
-31) Added -S to client tools for setting SMB signing options on the 
-    command line.
-32) Fix bug causing the 'passwd change program' to be called as the 
-    connected user and not root.
-33) Fixed data corruption bug in byte-range locking (e.g. affected MS Excel).
-34) Support winbindd on FreeBSD is possible.
-35) Look at only the first OID in the security blob sent in the session 
-    setup request to determine the token type.
-36) Only push locks onto a blocking lock queue if the posix lock failed with 
-    EACCES or EAGAIN (this means another lock conflicts). Else return an 
-    error and don't queue the request.
-37) Fix command line argument processing for smbtar.
-38) Correct issue that caused smbd to return generic unix_user.<uid> 
-    for lookupsid().
-39) Default to algorithmic mapping when generating a rid for a group
-    mapping.
-40) Expand %g and %G in logon script, profile path, etc... during
-    a domain logon (bug 208).
-41) Make sure smbclient obeys '-s <config>'
-42) Added win2k3 shadow copy operations to VFS interface.
-43) Allow connections to samba domain member as SERVER\user (don't
-    always default to DOMAIN\user).
-44) Remove checks in winbindd that caused it to attempt to use 
-    non-transitive trust relationships.
-45) Remove delays in winbindd caused by invalid DNS lookups.
-46) Fix supplementary group memberships on systems with slightly 
-    broken NSS implementations (bug 267).
-47) Correct issue that prevented smbclient from viewing shares on 
-    a win2k server when using a non-anonymous connection (bug 284).
-48) Add --domain=DOMAIN_NAME to wbinfo for limiting operations like 
-    'wbinfo -u' to a single domain.  The '.' character represents 
-    our domain.
-49) Fix group enumeration bug when using an LDAP directory for 
-    storing group mappings.
-50) Default to use NTLMv2 if available.  Fallback to not use LM/NTLM
-    when the extended security capability bit is not set.
-51) Fix crash in 'wbinfo -a' when using extended characters in the 
-    username (bug 269).
-52) Fix multi-byte strupper() panics (bug 205).
-53) Add vfs_readonly VFS module.
-54) Make sure to initialize the sambaNextUserRid and sambaNextGroupRid
-    attributes when using 'idmap backend = ldap' (bug 280).
-55) Make sure that users shared between a Samba PDC and member 
-    samba server are seen as domain users and not local users on the 
-    domain member.
-56) Fix Query FS Info level 2.
-57) Allow enumeration of users and groups by win9x "file server" (bug 
-    286).
-58) Create symlinks during install for modules that support mutliple
-    functions (bug 91).
-59) More iconv detection fixes.
-60) Fix path length error in vfs_recycle module (bug 291).
-61) Added server support for the LSA_DS UUID on the \lsarpc pipe.
-    (server DsRoleGetPrimaryDomainInfo() is currently disabled).
-62) Fix SMBseek and get/set position calls.
-62) Fix SetFileInfo level 1.
-63) Added tool to convert smbd log file to a pcap file (log2pcaphex).
-
-
-
-Changes since 3.0beta2
-######################
-
-1)  Added fix for Japanese case names in statcache code; 
-    these can change size on upper casing.
-2)  Correct issues with iconv detection in configure script
-    (support needed to find iconv libraries on FreeBSD).
-3)  Fix bug that caused a WINS server to be marked as dead
-    incorrectly (bug #190).
-4)  Removing additional deadlocks conditions that prevented 
-    winbindd from running on a Samba PDC (used for trust 
-    relationships).
-5)  Add support for searching for Active Directory for 
-    published printers (net ads printer search).
-6)  Separate UNIX username from DOMAIN\username in pipe 
-    credentials.
-7)  Auth modules now support returning NT_STATUS_NOT_IMPLEMENTED
-    for cases that they cannot handle.
-8)  Flush winbindd connection cache when the machine trust account
-    password is changed while a connection is open (bug #200).
-9)  Add support for 'OSVersion' server printer data string
-    (corrects problem with uploading printer drivers from 
-    WinXP clients).
-10) Numerous memory leak fixes.
-11) LDAP fixes ("passdb backend = ldapsam" & "idmap backend = ldap"):
-    - Store domain SID in LDAP directory.
-    - store idmap information in existing entries (use sambaSID=... 
-      if adding a new entry).
-12) Fix incorrect usage of primary group SID when looking up user 
-    groups (bug #109).
-13) Remove idmap_XX_to_XX calls from smbd.  Move back to the the
-    winbind_XXX and local_XXX calls used in 2.2.
-14) All uid/gid allocation must involve winbindd now (we do not 
-    attempt to map unknown SIDs to a UNIX identify).
-15) Add 'winbind trusted domains only' parameter to force a domain
-    member.  The server to use matching users names from /etc/passwd 
-    for its domain   (needed for domain member of a Samba domain).
-16) Rename 'idmap only' to 'enable rid algorithm' for better clarity 
-    (defaults to "yes").
-17) Add support for multi-byte statcache code (bug #185)
-18) Fix open mode race condition.
-19) Implement winbindd local account management functions.  Refer to
-    the "Winbind Changes" section for details.
-20) Move RID allocation functions into idmap backend.
-21) Fix parsing error that prevented publishing printers from a 
-    Samba server in an AD domain.
-22) Revive NTLMSSP support for named pipes.
-23) More SCHANNEL fixes.
-24) Correct SMB signing with NTLMSSP.
-25) Fix coherency bug in print handle/printer object caching code
-    that could cause XP clients to infinitely loop while updating 
-    their local printer cache.
-26) Make winbindd use its dual-daemon mode by default (use -Y to 
-    start as a single process).
-27) Add support to nmbd and winbindd for 'smbcontrol <pid> 
-    reload-config'.
-28) Correct problem with smbtar when dealing with files > 8Gb 
-    (bug #102).
-
-
-
-Changes since 3.0beta1
-######################
-
-1)  Rework our smb signing code again, this factors out some of 
-    the common MAC calculation code, and now supports multiple 
-    outstanding packets (bug #40).
-2)  Enforce 'client plaintext auth', 'client lanman auth' and 'client
-    ntlmv2 auth'.
-3)  Correct timestamp problem on 64-bit machines (bug #140).
-4)  Add extra debugging statements to winbindd for tracking down
-    failures.
-5)  Fix bug when aliased 'winbind uid/gid' parameters are used.
-    ('winbind uid/gid' are now replaced with 'idmap uid/gid').
-6)  Added an auth flag that indicates if we should be allowed 
-    to fall back to NTLMSSP for SASL if krb5 fails.
-7)  Fixed the bug that forced us not to use the winbindd cache when 
-    we have a primary ADS domain and a secondary (trusted) NT4 
-    domain. 
-8)  Use lp_realm() to find the default realm for 'net ads password'.
-9)  Removed editreg from standard build until it is portable..
-10) Fix domain membership for servers not running winbindd.
-11) Correct race condition in determining the high water mark
-    in the idmap backend (bug #181).
-12) Set the user's primary unix group from usrmgr.exe (partial 
-    fix for bug #45).
-13) Show comments when doing 'net group -l' (bug #3).
-14) Add trivial extension to 'net' to dump current local idmap
-    and restore mappings as well.
-15) Modify 'net rpc vampire' to add new and existing users to
-    both the idmap and the SAM.  This code needs further testing.
-16) Fix crash bug in ADS searches.
-17) Build libnss_wins.so as part of nsswitch target (bug #160).
-18) Make net rpc vampire return an error if the sam sync RPC 
-    returns an error.
-19) Fail to join an NT 4 domain as a BDC if a workstation account
-    using our name exists.
-20) Fix various memory leaks in server and client code
-21) Remove the short option to --set-auth-user for wbinfo (-A) to 
-    prevent confusion with the -a option (bug #158).
-22) Added new 'map acl inherit' parameter.
-23) Removed unused 'privileges' code from group mapping database.
-24) Don't segfault on empty passdb backend list (bug #136).
-25) Fixed acl sorting algorithm for Windows 2000 clients.
-26) Replace universal group cache with netsamlogon_cache 
-    from APPLIANCE_HEAD branch.
-27) Fix autoconf detection issues surrounding --with-ads=yes
-    but no Krb5 header files installed (bug #152).
-28) Add LDAP lookup for domain sequence number in case we are 
-    joined using NT4 protocols to a native mode AD domain.
-29) Fix backend method selection for trusted NT 4 (or 2k 
-    mixed mode) domains. 
-30) Fixed bug that caused us to enumerate domain local groups
-    from native mode AD domains other than our own.
-31) Correct group enumeration for viewing in the Windows 
-    security tab (bug #110).
-32) Consolidate the DC location code.
-33) Moved 'ads server' functionality into 'password server' for
-    backwards compatibility.
-34) Fix winbindd_idmap tdb upgrades from a 2.2 installation.
-    ( if you installed beta1, be sure to 
-      'mv idmap.tdb winbindd_idmap.tdb' ).
-35) Fix pdb_ldap segfaults, and wrong default values for 
-    ldapsam_compat.
-36) Enable negative connection cache for winbindd's ADS backend 
-    functions.
-37) Enable address caching for active directory DC's so we don't 
-    have to hit DNS so much.
-38) Fix bug in idmap code that caused mapping to randomly be 
-    redefined.
-39) Add tdb locking code to prevent race condition when adding a 
-    new mapping to idmap.
-40) Fix 'map to guest = bad user' when acting as a PDC supporting 
-    trust relationships.
-41) Prevent deadlock issues when running winbindd on a Samba PDC 
-    to handle allocating uids & gids for trusted users and groups
-42) added LOCALE patch from Steve Langasek (bug #122).
-43) Add the 'guest' passdb backend automatically to the end of 
-    the 'passdb backend' list if 'guest account' has a valid 
-    username.
-44) Remove samstrict_dc auth method.  Rework 'samstrict' to only 
-    handle our local names (or domain name if we are a PDC).  
-    Move existing permissive 'sam' method to 'sam_ignoredomain' 
-    and make 'samstrict' the new default 'sam' auth method.
-45) Match Windows NT4/2k behavior when authenticating a user with
-    and unknown domain (default to our domain if we are a DC or 
-    domain member; default to our local name if we are a 
-    standalone server).
-46) Fix Get_Pwnam() to always fall back to lookup 'user' if the 
-    'DOMAIN\user' lookup fails.  This matches 2.2. behavior.
-47) Fix the trustdom_cache code to update the list of trusted 
-    domains when operating as a domain member and not using 
-    winbindd.
-48) Remove 'nisplussam' passdb backend since it has suffered for 
-    too long without a maintainer.
-    
-
-
-
 ######################################################################
 Upgrading from a previous Samba 3.0 beta
 ########################################
index 79f58916513c550a2c0d6fbe13807002188ab59a..14cd72058803ba0813bb8d033204d5b761eca3f4 100644 (file)
@@ -288,38 +288,6 @@ attributetype ( 1.3.6.1.4.1.7165.2.1.40 NAME 'sambaAlgorithmicRidBase'
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
 
 
-
-attributetype ( 1.3.6.1.4.1.7165.2.1.41 NAME 'sambaShareName'
-       DESC 'Share Name'
-       EQUALITY caseIgnoreMatch
-       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.7165.2.1.42 NAME 'sambaOptionName'
-       DESC 'Option Name'
-       EQUALITY caseIgnoreMatch
-       SUBSTR caseIgnoreSubstringsMatch
-       SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
-
-attributetype ( 1.3.6.1.4.1.7165.2.1.43 NAME 'sambaBoolOption'
-       DESC 'A boolean option'
-       EQUALITY booleanMatch
-       SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.7165.2.1.44 NAME 'sambaIntegerOption'
-       DESC 'An integer option'
-       EQUALITY integerMatch
-       SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.7165.2.1.45 NAME 'sambaStringOption'
-       DESC 'A string option'
-       EQUALITY caseExactIA5Match
-       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
-
-attributetype ( 1.3.6.1.4.1.7165.2.1.46 NAME 'sambaStringListOption'
-       DESC 'A string list option'
-       EQUALITY caseIgnoreMatch
-       SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
 #######################################################################
 ##              objectClasses used by Samba 3.0 schema               ##
 #######################################################################
@@ -375,19 +343,3 @@ objectclass ( 1.3.6.1.4.1.7165.1.2.2.9 NAME 'sambaSidEntry' SUP top STRUCTURAL
         DESC 'Structural Class for a SID'
         MUST ( sambaSID ) )
 
-
-
-
-objectclass ( 1.3.6.1.4.1.7165.1.2.2.10 NAME 'sambaConfig' SUP top AUXILIARY
-       DESC 'Samba Configuration Section'
-       MAY ( description ) )
-
-objectclass ( 1.3.6.1.4.1.7165.1.2.2.11 NAME 'sambaShare' SUP top STRUCTURAL
-       DESC 'Samba Share Section'
-       MUST ( sambaShareName )
-       MAY ( description ) )
-
-objectclass ( 1.3.6.1.4.1.7165.1.2.2.12 NAME 'sambaConfigOption' SUP top STRUCTURAL
-       DESC 'Samba Configuration Option'
-       MUST ( sambaOptionName )
-       MAY ( sambaBoolOption $ sambaIntegerOption $ sambaStringOption $ sambaStringListoption $ description ) )
index c84cc3c977ec128e4239ebcbec659fcf5e7d183c..e7c82a3aee6cab1884fc33585e5a224536e829bc 100644 (file)
@@ -14,7 +14,7 @@ all: testsmbc tree testacl
 
 testsmbc: testsmbc.o 
        @echo Linking testsmbc
-       @$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lsmbclient -L/usr/local/lib
+       $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< -lsmbclient -L/usr/local/lib
 
 testsmbc-static: testsmbc.o 
        @echo Linking testsmbc
diff --git a/examples/nss/wbtest.c b/examples/nss/wbtest.c
new file mode 100644 (file)
index 0000000..fc8f575
--- /dev/null
@@ -0,0 +1,375 @@
+/* 
+   nss sample code for extended winbindd functionality
+
+   Copyright (C) Andrew Tridgell (tridge@samba.org)   
+
+   you are free to use this code in any way you see fit, including
+   without restriction, using this code in your own products. You do
+   not need to give any attribution.
+*/
+
+/*
+   compile like this:
+
+      cc -o wbtest wbtest.c -ldl
+
+   and run like this:
+
+      ./wbtest /lib/libnss_winbind.so
+*/
+
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <nss.h>
+#include <dlfcn.h>
+#include <pwd.h>
+#include <grp.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
+
+typedef enum nss_status NSS_STATUS;
+
+struct nss_state {
+       void *dl_handle;
+       char *nss_name;
+       char pwnam_buf[512];
+};
+
+/*
+  find a function in the nss library
+*/
+static void *find_fn(struct nss_state *nss, const char *name)
+{
+       void *res;
+       char *s = NULL;
+
+       asprintf(&s, "_nss_%s_%s", nss->nss_name, name);
+       if (!s) {
+               errno = ENOMEM;
+               return NULL;
+       }
+       res = dlsym(nss->dl_handle, s);
+       free(s);
+       if (!res) {
+               errno = ENOENT;
+               return NULL;
+       }
+       return res;
+}
+
+/*
+  establish a link to the nss library
+  Return 0 on success and -1 on error
+*/
+int nss_open(struct nss_state *nss, const char *nss_path)
+{
+       char *p;
+       p = strrchr(nss_path, '_');
+       if (!p) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       nss->nss_name = strdup(p+1);
+       p = strchr(nss->nss_name, '.');
+       if (p) *p = 0;
+
+       nss->dl_handle = dlopen(nss_path, RTLD_LAZY);
+       if (!nss->dl_handle) {
+               free(nss->nss_name);
+               return -1;
+       }
+
+       return 0;
+}
+
+/*
+  close and cleanup a nss state
+*/
+void nss_close(struct nss_state *nss)
+{
+       free(nss->nss_name);
+       dlclose(nss->dl_handle);
+}
+
+/*
+  make a getpwnam call. 
+  Return 0 on success and -1 on error
+*/
+int nss_getpwent(struct nss_state *nss, struct passwd *pwd)
+{
+       NSS_STATUS (*_nss_getpwent_r)(struct passwd *, char *, 
+                                     size_t , int *) = find_fn(nss, "getpwent_r");
+       NSS_STATUS status;
+       int nss_errno = 0;
+
+       if (!_nss_getpwent_r) {
+               return -1;
+       }
+
+       status = _nss_getpwent_r(pwd, nss->pwnam_buf, sizeof(nss->pwnam_buf), &nss_errno);
+       if (status == NSS_STATUS_NOTFOUND) {
+               errno = ENOENT;
+               return -1;
+       }
+       if (status != NSS_STATUS_SUCCESS) {
+               errno = nss_errno;
+               return -1;
+       }
+
+       return 0;
+}
+
+/*
+  make a setpwent call. 
+  Return 0 on success and -1 on error
+*/
+int nss_setpwent(struct nss_state *nss)
+{
+       NSS_STATUS (*_nss_setpwent)(void) = find_fn(nss, "setpwent");
+       NSS_STATUS status;
+       if (!_nss_setpwent) {
+               return -1;
+       }
+       status = _nss_setpwent();
+       if (status != NSS_STATUS_SUCCESS) {
+               errno = EINVAL;
+               return -1;
+       }
+       return 0;
+}
+
+/*
+  make a endpwent call. 
+  Return 0 on success and -1 on error
+*/
+int nss_endpwent(struct nss_state *nss)
+{
+       NSS_STATUS (*_nss_endpwent)(void) = find_fn(nss, "endpwent");
+       NSS_STATUS status;
+       if (!_nss_endpwent) {
+               return -1;
+       }
+       status = _nss_endpwent();
+       if (status != NSS_STATUS_SUCCESS) {
+               errno = EINVAL;
+               return -1;
+       }
+       return 0;
+}
+
+
+/*
+  convert a name to a SID
+  caller frees
+  Return 0 on success and -1 on error
+*/
+int nss_nametosid(struct nss_state *nss, const char *name, char **sid)
+{
+       NSS_STATUS (*_nss_nametosid)(const char *, char **, char *, size_t, int *) = 
+               find_fn(nss, "nametosid");
+       NSS_STATUS status;
+       int nss_errno = 0;
+       char buf[200];
+
+       if (!_nss_nametosid) {
+               return -1;
+       }
+
+       status = _nss_nametosid(name, sid, buf, sizeof(buf), &nss_errno);
+       if (status == NSS_STATUS_NOTFOUND) {
+               errno = ENOENT;
+               return -1;
+       }
+       if (status != NSS_STATUS_SUCCESS) {
+               errno = nss_errno;
+               return -1;
+       }
+
+       *sid = strdup(*sid);
+
+       return 0;
+}
+
+/*
+  convert a SID to a name
+  caller frees
+  Return 0 on success and -1 on error
+*/
+int nss_sidtoname(struct nss_state *nss, char *sid, char **name)
+{
+       NSS_STATUS (*_nss_sidtoname)(const char *, char **, char *, size_t, int *) = 
+               find_fn(nss, "sidtoname");
+       NSS_STATUS status;
+       int nss_errno = 0;
+       char buf[200];
+
+       if (!_nss_sidtoname) {
+               return -1;
+       }
+
+       status = _nss_sidtoname(sid, name, buf, sizeof(buf), &nss_errno);
+       if (status == NSS_STATUS_NOTFOUND) {
+               errno = ENOENT;
+               return -1;
+       }
+       if (status != NSS_STATUS_SUCCESS) {
+               errno = nss_errno;
+               return -1;
+       }
+
+       *name = strdup(*name);
+
+       return 0;
+}
+
+/*
+  return a list of group SIDs for a user SID
+  the returned list is NULL terminated
+  Return 0 on success and -1 on error
+*/
+int nss_getusersids(struct nss_state *nss, const char *user_sid, char ***sids)
+{
+       NSS_STATUS (*_nss_getusersids)(const char *, char **, int *, char *, size_t, int *) = 
+               find_fn(nss, "getusersids");
+       NSS_STATUS status;
+       int nss_errno = 0;
+       char *s;
+       int i, num_groups = 0;
+       unsigned bufsize = 10;
+       char *buf;
+
+       if (!_nss_getusersids) {
+               return -1;
+       }
+
+again:
+       buf = malloc(bufsize);
+       if (!buf) {
+               errno = ENOMEM;
+               return -1;
+       }
+
+       status = _nss_getusersids(user_sid, &s, &num_groups, buf, bufsize, &nss_errno);
+       if (status == NSS_STATUS_NOTFOUND) {
+               errno = ENOENT;
+               free(buf);
+               return -1;
+       }
+       
+       if (status == NSS_STATUS_TRYAGAIN) {
+               bufsize *= 2;
+               free(buf);
+               goto again;
+       }
+
+       if (status != NSS_STATUS_SUCCESS) {
+               free(buf);
+               errno = nss_errno;
+               return -1;
+       }
+
+       if (num_groups == 0) {
+               free(buf);
+               return 0;
+       }
+
+       *sids = (char **)malloc(sizeof(char *) * (num_groups+1));
+       if (! *sids) {
+               errno = ENOMEM;
+               free(buf);
+               return -1;
+       }
+
+       for (i=0;i<num_groups;i++) {
+               (*sids)[i] = strdup(s);
+               s += strlen(s) + 1;
+       }
+       (*sids)[i] = NULL;
+
+       free(buf);
+
+       return 0;
+}
+
+
+static int nss_test_users(struct nss_state *nss)
+{
+       struct passwd pwd;
+
+       if (nss_setpwent(nss) != 0) {
+               perror("setpwent");
+               return -1;
+       }
+
+       /* loop over all users */
+       while ((nss_getpwent(nss, &pwd) == 0)) {
+               char *sid, **group_sids, *name2;
+               int i;
+
+               printf("User %s\n", pwd.pw_name);
+               if (nss_nametosid(nss, pwd.pw_name, &sid) != 0) {
+                       perror("nametosid");
+                       return -1;
+               }
+               printf("\tSID %s\n", sid);
+
+               if (nss_sidtoname(nss, sid, &name2) != 0) {
+                       perror("sidtoname");
+                       return -1;
+               }
+               printf("\tSID->name %s\n", name2);
+
+               if (nss_getusersids(nss, sid, &group_sids) != 0) {
+                       perror("getusersids");
+                       return -1;
+               }
+
+               printf("\tGroups:\n");
+               for (i=0; group_sids[i]; i++) {
+                       printf("\t\t%s\n", group_sids[i]);
+                       free(group_sids[i]);
+               }
+
+               free(sid);
+               free(name2);
+               free(group_sids);
+       }
+
+
+       if (nss_endpwent(nss) != 0) {
+               perror("endpwent");
+               return -1;
+       }
+
+       return 0;
+}
+
+
+/*
+  main program. It lists all users, listing user SIDs for each user
+ */
+int main(int argc, char *argv[])
+{      
+       struct nss_state nss;
+       const char *so_path = "/lib/libnss_winbind.so";
+       int ret;
+
+       if (argc > 1) {
+               so_path = argv[1];
+       }
+
+       if (nss_open(&nss, so_path) != 0) {
+               perror("nss_open");
+               exit(1);
+       }
+
+       ret = nss_test_users(&nss);
+
+       nss_close(&nss);
+
+       return ret;
+}
index 3bd6d198007595b2b6c6666787c88fd364a219f4..5da75f5745c09386e052feb4b5b8c8a4c4d4e92f 100644 (file)
@@ -31,5 +31,7 @@ CREATE TABLE user (
        logon_divs int(9),
        hours_len int(9),
        unknown_5 int(9),
-       unknown_6 int(9)
+       unknown_6 int(9),
+       bad_password_count int(9),
+       logon_count(9)
 );
diff --git a/examples/printing/smbprint.old b/examples/printing/smbprint.old
deleted file mode 100755 (executable)
index 5a00a2a..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/bin/sh 
-
-# This script is an input filter for printcap printing on a unix machine. It
-# uses the smbclient program to print the file to the specified smb-based 
-# server and service.
-# For example you could have a printcap entry like this
-#
-# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
-#
-# which would create a unix printer called "smb" that will print via this 
-# script. You will need to create the spool directory /usr/spool/smb with
-# appropriate permissions and ownerships for your system.
-
-# Set these to the server and service you wish to print to 
-# In this example I have a WfWg PC called "lapland" that has a printer 
-# exported called "printer" with no password.
-
-#
-# Script further altered by hamiltom@ecnz.co.nz (Michael Hamilton)
-# so that the server, service, and password can be read from 
-# a /usr/var/spool/lpd/PRINTNAME/.config file.
-#
-# Script further modified by Richard Sharpe to fix some things.
-# Get rid of the -x on the first line, and add parameters
-#
-#    -t  now causes translate to be used when sending files
-#
-# In order for this to work the /etc/printcap entry must include an 
-# accounting file (af=...):
-#
-#   cdcolour:\
-#      :cm=CD IBM Colorjet on 6th:\
-#      :sd=/var/spool/lpd/cdcolour:\
-#      :af=/var/spool/lpd/cdcolour/acct:\
-#      :if=/usr/local/etc/smbprint:\
-#      :mx=0:\
-#      :lp=/dev/null:
-#
-# The /usr/var/spool/lpd/PRINTNAME/.config file should contain:
-#   server=PC_SERVER
-#   service=PR_SHARENAME
-#   password="password"
-#
-# E.g.
-#   server=PAULS_PC
-#   service=CJET_371
-#   password=""
-
-#
-# Debugging log file, change to /dev/null if you like.
-#
-logfile=/tmp/smb-print.log
-# logfile=/dev/null
-
-
-#
-# The last parameter to the filter is the accounting file name.
-#   Extract the directory name from the file name.
-#   Concat this with /.config to get the config file.
-#
-TRANS=0
-eval acct_file=\${$#}
-spool_dir=`dirname $acct_file` 
-config_file=$spool_dir/.config
-
-# Should read the following variables set in the config file:
-#   server
-#   service
-#   password
-eval `cat $config_file`
-
-while getopts t c; do
-  case $c in
-    t)
-       TRANS=1
-       ;;
-
-    '?')  # Bad parameters, ignore it ...
-       ;;
-  esac
-done
-#
-# Some debugging help, change the >> to > if you want to same space.
-#
-echo "server $server, service $service" >> $logfile
-
-(
-# NOTE You may wish to add the line `echo translate' if you want automatic
-# CR/LF translation when printing.
-       if [ $TRANS -eq 1 ]; then
-          echo translate
-        fi
-       echo "print -"
-       cat
-) | /usr/local/samba/bin/smbclient "\\\\$server\\$service" $password -U $server -N -P >> $logfile
index ee0b43c01700faa69c53ea3dedf033dd4ceb3c84..034c909fb7facd9a749cd2cbd6ec3a31f5a33d2b 100644 (file)
@@ -2,6 +2,7 @@
 %define rpm_version `rpm --version | awk '{print $3}' | awk -F. '{print $1$2}'`
 
 Summary: Samba SMB client and server
+Vendor: Samba Team
 Name: samba
 Version: PVERSION
 Release: PRELEASE
@@ -196,6 +197,9 @@ find $RPM_BUILD_ROOT -name "*.old" -exec rm -f {} \;
 rm -rf $RPM_BUILD_ROOT
 
 %post
+## 
+## only needed if this is a new install (not an upgrade)
+##
 if [ "$1" -eq "1" ]; then
        /sbin/chkconfig --add smb
        /sbin/chkconfig --add winbind
@@ -203,113 +207,119 @@ if [ "$1" -eq "1" ]; then
        /sbin/chkconfig winbind off
 fi
 
-echo "Looking for old /etc/smb.conf..."
-if [ -f /etc/smb.conf -a ! -f /etc/samba/smb.conf ]; then
-       echo "Moving old /etc/smb.conf to /etc/samba/smb.conf"
-       mv /etc/smb.conf /etc/samba/smb.conf
-fi
+##
+## we only have to wory about this if we are upgrading
+##
+if [ "$1" -eq "2" ]; then
+       if [ -f /etc/smb.conf -a ! -f /etc/samba/smb.conf ]; then
+               echo "Moving old /etc/smb.conf to /etc/samba/smb.conf"
+               mv /etc/smb.conf /etc/samba/smb.conf
+       fi
 
-echo "Looking for old /etc/smbusers..."
-if [ -f /etc/smbusers -a ! -f /etc/samba/smbusers ]; then
-       echo "Moving old /etc/smbusers to /etc/samba/smbusers"
-       mv /etc/smbusers /etc/samba/smbusers
-fi
+       if [ -f /etc/smbusers -a ! -f /etc/samba/smbusers ]; then
+               echo "Moving old /etc/smbusers to /etc/samba/smbusers"
+               mv /etc/smbusers /etc/samba/smbusers
+       fi
 
-echo "Looking for old /etc/lmhosts..."
-if [ -f /etc/lmhosts -a ! -f /etc/samba/lmhosts ]; then
-       echo "Moving old /etc/lmhosts to /etc/samba/lmhosts"
-       mv /etc/lmhosts /etc/samba/lmhosts
-fi
+       if [ -f /etc/lmhosts -a ! -f /etc/samba/lmhosts ]; then
+               echo "Moving old /etc/lmhosts to /etc/samba/lmhosts"
+               mv /etc/lmhosts /etc/samba/lmhosts
+       fi
 
-echo "Looking for old /etc/MACHINE.SID..."
-if [ -f /etc/MACHINE.SID -a ! -f /etc/samba/MACHINE.SID ]; then
-       echo "Moving old /etc/MACHINE.SID to /etc/samba/MACHINE.SID"
-       mv /etc/MACHINE.SID /etc/samba/MACHINE.SID
-fi
+       if [ -f /etc/MACHINE.SID -a ! -f /etc/samba/MACHINE.SID ]; then
+               echo "Moving old /etc/MACHINE.SID to /etc/samba/MACHINE.SID"
+               mv /etc/MACHINE.SID /etc/samba/MACHINE.SID
+       fi
 
-echo "Looking for old /etc/smbpasswd..."
-if [ -f /etc/smbpasswd -a ! -f /etc/samba/smbpasswd ]; then
-       echo "Moving old /etc/smbpasswd to /etc/samba/smbpasswd"
-       mv /etc/smbpasswd /etc/samba/smbpasswd
-fi
+       if [ -f /etc/smbpasswd -a ! -f /etc/samba/smbpasswd ]; then
+               echo "Moving old /etc/smbpasswd to /etc/samba/smbpasswd"
+               mv /etc/smbpasswd /etc/samba/smbpasswd
+       fi
 
-#
-# For 2.2.1 we move the tdb files from /var/lock/samba to /var/cache/samba
-# to preserve across reboots.
-#
-echo "Moving tdb files in /var/lock/samba/*.tdb to /var/cache/samba/*.tdb"
-for i in /var/lock/samba/*.tdb
-do
-if [ -f $i ]; then
-       newname=`echo $i | sed -e's|var\/lock\/samba|var\/cache\/samba|'`
-       echo "Moving $i to $newname"
-       mv $i $newname
-fi
-done
+       #
+       # For 2.2.1 we move the tdb files from /var/lock/samba to /var/cache/samba
+       # to preserve across reboots.
+       #
+       for i in /var/lock/samba/*.tdb; do
+               if [ -f $i ]; then
+                       newname=`echo $i | sed -e's|var\/lock\/samba|var\/cache\/samba|'`
+                       echo "Moving $i to $newname"
+                       mv $i $newname
+               fi
+       done
 
-# Remove the transient tdb files.
-if [ -e /var/cache/samba/brlock.tdb ]; then
-       rm -f /var/cache/samba/brlock.tdb
-fi
+       # Remove the transient tdb files.
+       if [ -e /var/cache/samba/brlock.tdb ]; then
+               rm -f /var/cache/samba/brlock.tdb
+       fi
 
-if [ -e /var/cache/samba/unexpected.tdb ]; then
-       rm -f /var/cache/samba/unexpected.tdb
-fi
+       if [ -e /var/cache/samba/unexpected.tdb ]; then
+               rm -f /var/cache/samba/unexpected.tdb
+       fi
 
-if [ -e /var/cache/samba/connections.tdb ]; then
-       rm -f /var/cache/samba/connections.tdb
-fi
+       if [ -e /var/cache/samba/connections.tdb ]; then
+               rm -f /var/cache/samba/connections.tdb
+       fi
 
-if [ -e /var/cache/samba/locking.tdb ]; then
-       rm -f /var/cache/samba/locking.tdb
-fi
+       if [ -e /var/cache/samba/locking.tdb ]; then
+               rm -f /var/cache/samba/locking.tdb
+       fi
 
-if [ -e /var/cache/samba/messages.tdb ]; then
-       rm -f /var/cache/samba/messages.tdb
-fi
+       if [ -e /var/cache/samba/messages.tdb ]; then
+               rm -f /var/cache/samba/messages.tdb
+       fi
 
-if [ -d /var/lock/samba ]; then
-       rm -rf /var/lock/samba
+       if [ -d /var/lock/samba ]; then
+               rm -rf /var/lock/samba
+       fi
 fi
 
+##
+## New things
+##
+
 # Add swat entry to /etc/services if not already there.
-if !( grep ^[:space:]*swat /etc/services > /dev/null ) then
+if [ ! "`grep ^\s**swat /etc/services`" ]; 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
+       if [ ! "`grep ^\s*swat /etc/inetd.conf`" ]; then
                echo 'swat      stream  tcp     nowait.400      root    %{prefix}/sbin/swat swat' >> /etc/inetd.conf
-       killall -1 inetd || :
+       killall -HUP inetd || :
        fi
 fi
 
 # Add swat entry to xinetd.d if needed.
-if [ -d $RPM_BUILD_ROOT/etc/xinetd.d -a ! -f /etc/xinetd.d/swat ]; then
+if [ -d /etc/xinetd.d -a ! -f /etc/xinetd.d/swat ]; then
        mv /etc/samba/samba.xinetd /etc/xinetd.d/swat
 else
        rm -f /etc/samba/samba.xinetd
 fi
 
 # Install the correct version of the samba pam file, depending on pam version.
-if [ -f /lib/security/pam_stack.so ]; then
-       echo "Installing stack version of /etc/pam.d/samba..."
-       mv /etc/samba/samba.stack /etc/pam.d/samba
-else
-       echo "Installing non-stack version of /etc/pam.d/samba..."
-       rm -f /etc/samba/samba.stack
+# (always keep an existing PAM config file)
+if [ ! -f /etc/pam.d/samba ]; then 
+       if [ -f /lib/security/pam_stack.so ]; then
+               echo "Installing stack version of /etc/pam.d/samba..."
+               mv /etc/samba/samba.stack /etc/pam.d/samba
+       else
+               echo "Installing non-stack version of /etc/pam.d/samba..."
+               rm -f /etc/samba/samba.stack
+       fi
 fi
 
 ## call ldconfig to create the version symlink for libsmbclient.so
 /sbin/ldconfig
 
 %preun
-if [ $1 = 0 ] ; then
+if [ "$1" -eq "0" ] ; then
        /sbin/chkconfig --del smb
        /sbin/chkconfig --del winbind
 
-       # We want to remove the browse.dat and wins.dat files so they can not interfer with a new version of samba!
+       # 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/cache/samba/browse.dat ]; then
                rm -f /var/cache/samba/browse.dat
        fi
@@ -337,45 +347,42 @@ if [ $1 = 0 ] ; then
        if [ -e /var/cache/samba/messages.tdb ]; then
                rm -f /var/cache/samba/messages.tdb
        fi
-
-       # Remove winbind nss client symlink
-
-       if [ -L /lib/libnss_winbind.so.2 ]; then
-               rm -f /lib/libnss_winbind.so.2
-       fi
 fi
 
 %postun
 # Only delete remnants of samba if this is the final deletion.
-if [ $1 = 0 ] ; then
+if [ "$1" -eq  "0" ] ; then
     if [ -x /etc/pam.d/samba ]; then
       rm -f /etc/pam.d/samba
     fi
+
     if [ -e /var/log/samba ]; then
       rm -rf /var/log/samba
     fi
-       if [ -e /var/cache/samba ]; then
-               rm -rf /var/cache/samba
-       fi
+
+    if [ -e /var/cache/samba ]; then
+      rm -rf /var/cache/samba
+    fi
 
     # Remove swat entries from /etc/inetd.conf and /etc/services
     cd /etc
     tmpfile=/etc/tmp.$$
-       if [ -f /etc/inetd.conf ]; then
+    if [ -f /etc/inetd.conf ]; then
       # preserve inetd.conf permissions.
       cp -p /etc/inetd.conf $tmpfile
       sed -e '/^[:space:]*swat.*$/d' /etc/inetd.conf > $tmpfile
       mv $tmpfile inetd.conf
-       fi
+    fi
+
     # preserve services permissions.
     cp -p /etc/services $tmpfile
     sed -e '/^[:space:]*swat.*$/d' /etc/services > $tmpfile
     mv $tmpfile /etc/services
 
-       # Remove swat entry from /etc/xinetd.d
-       if [ -f /etc/xinetd.d/swat ]; then
-               rm -r /etc/xinetd.d/swat
-       fi
+    # Remove swat entry from /etc/xinetd.d
+    if [ -f /etc/xinetd.d/swat ]; then
+      rm -r /etc/xinetd.d/swat
+    fi
 fi
 
 /sbin/ldconfig
index 1b620e60c258f9ac4333878520c122d655825d76..37d8a4d36f8a1bac207baa92c7787373eab2d28b 100644 (file)
@@ -14,6 +14,7 @@
 # usedforbuild    aaa_base acl attr bash bind9-utils bison coreutils cpio cpp cvs cyrus-sasl2 db devs diffutils e2fsprogs file filesystem fillup findutils flex gawk gdbm-devel glibc glibc-devel glibc-locale gpm grep groff gzip info insserv kbd less libacl libattr libgcc libstdc++ libxcrypt m4 make man mktemp modutils ncurses ncurses-devel net-tools netcfg pam pam-devel pam-modules patch permissions ps rcs readline sed sendmail shadow strace syslogd sysvinit tar texinfo timezone unzip util-linux vim zlib zlib-devel XFree86-libs autoconf automake binutils bzip2 cracklib cups-devel cups-libs dialog docbook-utils docbook-xsl-stylesheets docbook_4 ed freetype2 gcc gdbm gettext ghostscript-fonts-std ghostscript-library ghostscript-x11 glib heimdal heimdal-devel heimdal-lib iso_ent libacl-devel libattr-devel libgimpprint libpng libtiff libtool libxml2 libxml2-devel libxslt mysql-devel mysql-shared openldap2 openldap2-client openldap2-devel openssl openssl-devel perl popt popt-devel python python-devel readline-devel rpm te_ams te_etex te_latex te_pdf tetex xmlcharent
 
 Name:         samba3
+Vendor:       Samba Team
 License:      GPL
 Group:        Productivity/Networking/Samba
 Url:          http://www.samba.org
index dd8aaee6c409f0da561a398610db5580ac7f8323..b1db39c4c87bc05cd17c4ad8da2fabc1167fa14a 100644 (file)
@@ -66,7 +66,6 @@ RPCLIBDIR = $(LIBDIR)/rpc
 IDMAPLIBDIR = $(LIBDIR)/idmap
 CHARSETLIBDIR = $(LIBDIR)/charset
 AUTHLIBDIR = $(LIBDIR)/auth
-CONFIGLIBDIR = $(LIBDIR)/config
 CONFIGDIR = @configdir@
 VARDIR = @localstatedir@
 MANDIR = @mandir@
@@ -155,8 +154,7 @@ RPC_MODULES = @RPC_MODULES@
 IDMAP_MODULES = @IDMAP_MODULES@
 CHARSET_MODULES = @CHARSET_MODULES@
 AUTH_MODULES = @AUTH_MODULES@
-CONFIG_MODULES = @CONFIG_MODULES@
-MODULES = $(VFS_MODULES) $(PDB_MODULES) $(RPC_MODULES) $(IDMAP_MODULES) $(CHARSET_MODULES) $(AUTH_MODULES) $(CONFIG_MODULES)
+MODULES = $(VFS_MODULES) $(PDB_MODULES) $(RPC_MODULES) $(IDMAP_MODULES) $(CHARSET_MODULES) $(AUTH_MODULES)
 
 ######################################################################
 # object file lists
@@ -165,7 +163,7 @@ MODULES = $(VFS_MODULES) $(PDB_MODULES) $(RPC_MODULES) $(IDMAP_MODULES) $(CHARSE
 TDBBASE_OBJ = tdb/tdb.o tdb/spinlock.o
 TDB_OBJ = $(TDBBASE_OBJ) tdb/tdbutil.o tdb/tdbback.o
 
-SMBLDAP_OBJ = @SMBLDAP@ @SMBLDAPUTIL@
+SMBLDAP_OBJ = @SMBLDAP@
 
 LIB_OBJ = lib/version.o lib/charcnv.o lib/debug.o lib/fault.o \
           lib/getsmbpass.o lib/interface.o lib/md4.o \
@@ -186,8 +184,7 @@ LIB_OBJ = lib/version.o lib/charcnv.o lib/debug.o lib/fault.o \
          lib/pam_errors.o intl/lang_tdb.o lib/account_pol.o \
          lib/adt_tree.o lib/gencache.o $(TDB_OBJ) \
          lib/module.o lib/ldap_escape.o @CHARSET_STATIC@ \
-         lib/privileges.o lib/secdesc.o lib/secace.o lib/secacl.o \
-         lib/genparser.o lib/genparser_samba.o
+         lib/privileges.o lib/secdesc.o lib/secace.o lib/secacl.o
 
 LIB_SMBD_OBJ = lib/system_smbd.o lib/util_smbd.o 
 
@@ -200,7 +197,7 @@ POPT_LIB_OBJ = lib/popt_common.o
 UBIQX_OBJ = ubiqx/ubi_BinTree.o ubiqx/ubi_Cache.o ubiqx/ubi_SplayTree.o \
             ubiqx/ubi_dLinkList.o ubiqx/ubi_sLinkList.o 
 
-PARAM_OBJ = dynconfig.o param/loadparm.o param/params.o param/modconf.o
+PARAM_OBJ = dynconfig.o param/loadparm.o param/params.o
 
 KRBCLIENT_OBJ = libads/kerberos.o
 
@@ -237,7 +234,7 @@ LIBMSRPC_OBJ = rpc_client/cli_lsarpc.o rpc_client/cli_samr.o \
               rpc_client/cli_reg.o rpc_client/cli_pipe.o \
               rpc_client/cli_spoolss.o rpc_client/cli_spoolss_notify.o  \
               rpc_client/cli_ds.o rpc_client/cli_echo.o \
-              rpc_client/cli_shutdown.o rpc_client/cli_epmapper.o
+              rpc_client/cli_shutdown.o
 
 REGOBJS_OBJ = registry/reg_objects.o
 REGISTRY_OBJ = registry/reg_frontend.o registry/reg_cachehook.o registry/reg_printing.o \
@@ -266,8 +263,6 @@ RPC_PIPE_OBJ = rpc_server/srv_pipe_hnd.o rpc_server/srv_util.o \
 
 RPC_ECHO_OBJ = rpc_server/srv_echo.o rpc_server/srv_echo_nt.o
 
-RPC_EPMAPPER_OBJ = rpc_server/srv_epmapper.o rpc_server/srv_epmapper_nt.o
-
 RPC_SERVER_OBJ = @RPC_STATIC@ $(RPC_PIPE_OBJ)
 
 # this includes only the low level parse code, not stuff
@@ -281,28 +276,24 @@ RPC_PARSE_OBJ = rpc_parse/parse_lsa.o rpc_parse/parse_net.o \
                 rpc_parse/parse_wks.o rpc_parse/parse_ds.o \
                rpc_parse/parse_spoolss.o rpc_parse/parse_dfs.o \
                rpc_parse/parse_echo.o rpc_parse/parse_shutdown.o \
-               rpc_parse/parse_epmapper.o $(REGOBJS_OBJ)
+               $(REGOBJS_OBJ)
 
 
 RPC_CLIENT_OBJ = rpc_client/cli_pipe.o 
 
 LOCKING_OBJ = locking/locking.o locking/brlock.o locking/posix.o
 
-GUMS_OBJ = sam/gums.o sam/gums_api.o sam/gums_helper.o
-
 PASSDB_GET_SET_OBJ = passdb/pdb_get_set.o
 
 PASSDB_OBJ = $(PASSDB_GET_SET_OBJ) passdb/passdb.o passdb/pdb_interface.o \
                passdb/machine_sid.o passdb/util_sam_sid.o passdb/pdb_compat.o \
-               passdb/privileges.o passdb/lookup_sid.o @PDB_STATIC@ \
-               $(GUMS_OBJ) @GUMS_STATIC@
+               passdb/privileges.o passdb/lookup_sid.o @PDB_STATIC@ 
 
 XML_OBJ = passdb/pdb_xml.o
 MYSQL_OBJ = passdb/pdb_mysql.o
 DEVEL_HELP_WEIRD_OBJ = modules/weird.o
 CP850_OBJ = modules/CP850.o
 CP437_OBJ = modules/CP437.o
-CHARSET_MACOSXFS_OBJ = modules/charset_macosxfs.o
 
 GROUPDB_OBJ = groupdb/mapping.o
 
@@ -343,8 +334,6 @@ AUTH_OBJ = auth/auth.o @AUTH_STATIC@ auth/auth_util.o auth/auth_compat.o \
 
 MANGLE_OBJ = smbd/mangle.o smbd/mangle_hash.o smbd/mangle_map.o smbd/mangle_hash2.o
 
-CONFIG_LDAP_OBJ = param/config_ldap.o
-
 SMBD_OBJ_MAIN = smbd/server.o
 
 BUILDOPT_OBJ = smbd/build_options.o
@@ -453,8 +442,7 @@ RPCCLIENT_OBJ1 = rpcclient/rpcclient.o rpcclient/cmd_lsarpc.o \
                 rpcclient/cmd_netlogon.o rpcclient/cmd_srvsvc.o \
                 rpcclient/cmd_dfs.o rpcclient/cmd_reg.o \
                 rpcclient/display_sec.o rpcclient/cmd_ds.o \
-                rpcclient/cmd_echo.o rpcclient/cmd_shutdown.o \
-                rpcclient/cmd_epmapper.o
+                rpcclient/cmd_echo.o rpcclient/cmd_shutdown.o
 
 RPCCLIENT_OBJ = $(RPCCLIENT_OBJ1) \
              $(PARAM_OBJ) $(LIBSMB_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) \
@@ -592,10 +580,9 @@ PROTO_OBJ = $(SMBD_OBJ_MAIN) \
            $(PASSDB_OBJ) $(GROUPDB_OBJ) $(MSDFS_OBJ) \
            $(READLINE_OBJ) $(PROFILE_OBJ) $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \
            $(LIB_SMBD_OBJ) $(SAM_OBJ) $(REGISTRY_OBJ) $(POPT_LIB_OBJ) \
-           $(RPC_LSA_OBJ) $(RPC_NETLOG_OBJ) $(RPC_SAMR_OBJ) $(RPC_REG_OBJ) \
-           $(RPC_LSA_DS_OBJ) $(RPC_SVC_OBJ) $(RPC_WKS_OBJ) $(RPC_DFS_OBJ) \
-           $(RPC_SPOOLSS_OBJ) $(RPC_ECHO_OBJ) $(RPC_EPMAPPER_OBJ) \
-           $(SMBLDAP_OBJ) $(IDMAP_OBJ) libsmb/spnego.o
+           $(RPC_LSA_OBJ) $(RPC_NETLOG_OBJ) $(RPC_SAMR_OBJ) $(RPC_REG_OBJ) $(RPC_LSA_DS_OBJ) \
+           $(RPC_SVC_OBJ) $(RPC_WKS_OBJ) $(RPC_DFS_OBJ) $(RPC_SPOOLSS_OBJ) \
+           $(RPC_ECHO_OBJ) $(SMBLDAP_OBJ) $(IDMAP_OBJ) libsmb/spnego.o
 
 WINBIND_WINS_NSS_OBJ = nsswitch/wins.o $(PARAM_OBJ) $(UBIQX_OBJ) \
        $(LIBSMB_OBJ) $(LIB_OBJ) $(NSSWINS_OBJ) $(KRBCLIENT_OBJ)
@@ -727,6 +714,12 @@ MAKEDIR = || exec false; \
          -o $@ 
 @BROKEN_CC@    -mv `echo $@ | sed 's%^.*/%%g'` $@
 
+# this adds support for precompiled headers. To use it, install a snapshot
+# of gcc-3.4 and run 'make pch' before you do the main build. 
+pch:
+       rm -f $(srcdir)/include/includes.h.gch
+       $(CC) -I. -I$(srcdir) $(FLAGS) -c $(srcdir)/include/includes.h -o $(srcdir)/include/includes.h.gch
+
 # These dependencies are only approximately correct: we want to make
 # sure Samba's paths are updated if ./configure is re-run.  Really it
 # would be nice if "make prefix=/opt/samba all" also rebuilt things,
@@ -1024,14 +1017,9 @@ bin/librpc_echo.@SHLIBEXT@: $(RPC_ECHO_OBJ)
        @$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_ECHO_OBJ) -lc \
                @SONAMEFLAG@`basename $@`
 
-bin/librpc_epmapper.@SHLIBEXT@: $(RPC_EPMAPPER_OBJ)
-       @echo "Linking $@"
-       @$(SHLD) $(LDSHFLAGS) -o $@ $(RPC_EPMAPPER_OBJ) -lc \
-               @SONAMEFLAG@`basename $@`
-
 bin/winbindd@EXEEXT@: $(WINBINDD_OBJ) @BUILD_POPT@ bin/.dummy
        @echo "Linking $@"
-       @$(LINK) -o $@ $(WINBINDD_OBJ) $(DYNEXP) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) 
+       @$(LINK) -o $@ $(WINBINDD_OBJ) $(DYNEXP) $(LIBS) @POPTLIBS@ $(KRB5LIBS) $(LDAP_LIBS) $(PASSDB_LIBS)
 
 # Please don't add .o files to libnss_winbind, libnss_wins, or the pam_winbind
 # libraries.  Add to the appropriate PICOBJ variable instead.
@@ -1115,11 +1103,6 @@ bin/CP437.@SHLIBEXT@: $(CP437_OBJ:.o=.@PICSUFFIX@)
        @$(SHLD) $(LDSHFLAGS) -o $@ $(CP437_OBJ:.o=.@PICSUFFIX@) \
                @SONAMEFLAG@`basename $@`
 
-bin/macosxfs.@SHLIBEXT@: $(CHARSET_MACOSXFS_OBJ:.o=.po)
-       @echo "Building plugin $@"
-       @$(SHLD) $(LDSHFLAGS) -o $@ $(CHARSET_MACOSXFS_OBJ:.o=.po) \
-               -framework CoreFoundation @SONAMEFLAG@`basename $@`
-
 bin/xml.@SHLIBEXT@: $(XML_OBJ:.o=.@PICSUFFIX@)
        @echo "Building plugin $@"
        @$(SHLD) $(LDSHFLAGS) -o $@ $(XML_OBJ:.o=.@PICSUFFIX@) @XML_LIBS@ \
@@ -1165,11 +1148,6 @@ bin/cap.@SHLIBEXT@: $(VFS_CAP_OBJ:.o=.@PICSUFFIX@)
        @$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_CAP_OBJ:.o=.@PICSUFFIX@) \
                @SONAMEFLAG@`basename $@`
 
-bin/config_ldap.@SHLIBEXT@: $(CONFIG_LDAP_OBJ:.o=.@PICSUFFIX@)
-       @echo "Building plugin $@"
-        @$(SHLD) $(LDSHFLAGS) -o $@ $(CONFIG_LDAP_OBJ:.o=.@PICSUFFIX@) \
-               @SMBLDAP@ @LDAP_LIBS@ @SONAMEFLAG@`basename $@`
-
 bin/wbinfo@EXEEXT@: $(WBINFO_OBJ) @BUILD_POPT@ bin/.dummy
        @echo Linking $@
        @$(LINK) -o $@ $(WBINFO_OBJ) $(LIBS) @POPTLIBS@
@@ -1238,7 +1216,6 @@ installmodules: modules installdirs
        @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(IDMAPLIBDIR) $(IDMAP_MODULES)
        @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(CHARSETLIBDIR) $(CHARSET_MODULES)
        @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(AUTHLIBDIR) $(AUTH_MODULES)
-       @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(CONFIGLIBDIR) $(CONFIG_MODULES)
        @# These symlinks are required for the 'probing' of modules. 
        @# This mechanism should go at some point..
        @$(SHELL) $(srcdir)/script/linkmodules.sh $(DESTDIR)$(PDBLIBDIR) ldapsam.@SHLIBEXT@ ldapsam_compat.@SHLIBEXT@
@@ -1397,15 +1374,6 @@ utils/net_proto.h:
          -h _CLIENT_PROTO_H_ $(builddir)/utils/net_proto.h \
          $(NET_OBJ1)
 
-include/tdbsam2_parse_info.h:
-       @if test -n "$(PERL)"; then \
-               cd $(srcdir) && @PERL@ -w script/genstruct.pl \
-               -o include/tdbsam2_parse_info.h $(CC) -E -O2 -g \
-               include/tdbsam2.h; \
-       else \
-               echo Unable to build $@, continuing; \
-       fi
-
 # "make headers" or "make proto" calls a subshell because we need to
 # make sure these commands are executed in sequence even for a
 # parallel make.
@@ -1418,12 +1386,7 @@ headers:
        $(MAKE) nsswitch/winbindd_proto.h; \
        $(MAKE) web/swat_proto.h; \
        $(MAKE) client/client_proto.h; \
-       $(MAKE) utils/net_proto.h;
-
-prebuiltheaders:
-       $(MAKE) include/tdbsam2_parse_info.h
-
-genparse: prebuiltheaders
+       $(MAKE) utils/net_proto.h
 
 proto: headers 
 
index d7f386ab42b3045e344c233af59080a470cdfc97..f15a6409ee6118628d1ca2328365028480b774c7 100644 (file)
@@ -18,8 +18,8 @@
 #  ->  "3.0.0"                                         #
 ########################################################
 SAMBA_VERSION_MAJOR=3
-SAMBA_VERSION_MINOR=1
-SAMBA_VERSION_RELEASE=0
+SAMBA_VERSION_MINOR=0
+SAMBA_VERSION_RELEASE=1
 
 ########################################################
 # If a official release has a serious bug              #
@@ -41,7 +41,7 @@ SAMBA_VERSION_REVISION=
 # e.g. SAMBA_VERSION_PRE_RELEASE=1                     #
 #  ->  "2.2.9pre1"                                     #
 ########################################################
-SAMBA_VERSION_PRE_RELEASE=
+SAMBA_VERSION_PRE_RELEASE=4
 
 ########################################################
 # For 'rc' releases the version will be                #
@@ -71,7 +71,7 @@ SAMBA_VERSION_BETA_RELEASE=
 # e.g. SAMBA_VERSION_ALPHA_RELEASE=1                   #
 #  ->  "4.0.0alpha1"                                   #
 ########################################################
-SAMBA_VERSION_ALPHA_RELEASE=1
+SAMBA_VERSION_ALPHA_RELEASE=
 
 ########################################################
 # For 'test' releases the version will be              #
index 31af1fe22d83e4e3014f36df210e2ba45adbb97d..aad6091960332a90b1168fe8a794c10ec64bc37d 100644 (file)
@@ -5,6 +5,7 @@ debug2html
 editreg
 locktest
 locktest2
+log2pcap
 make_printerdef
 make_smbcodepage
 make_unicodemap
@@ -28,6 +29,7 @@ smbcquotas
 smbd
 smbfilter
 smbgroupedit
+smbiconv
 smbmnt
 smbmount
 smbpasswd
@@ -37,7 +39,6 @@ smbstatus
 smbtorture
 smbtree
 smbumount
-smbiconv
 swat
 t_push_ucs2
 t_snprintf
@@ -45,10 +46,10 @@ t_strcmp
 t_stringoverflow
 talloctort
 tdbbackup
+tdbdump
 testparm
 testprns
 vfstest
-log2pcap
 wbinfo
 winbindd
 wrepld
index 5c4580f14accf04a480eadcd6aafc782fc218baa..6a9a8f0f15ec9a23ba7342791e8f331a5a0ad621 100644 (file)
@@ -126,25 +126,6 @@ AC_ARG_WITH(logfilebase,
     ;;
   esac])
 
-AC_ARG_WITH(cfenc,
-[  --with-cfenc=HEADERDIR  Use internal CoreFoundation encoding API
-                         for optimization (Mac OS X/Darwin only)],
-[
-# May be in source $withval/CoreFoundation/StringEncodings.subproj.
-# Should have been in framework $withval/CoreFoundation.framework/Headers.
-for d in \
-    $withval/CoreFoundation/StringEncodings.subproj \
-    $withval/StringEncodings.subproj \
-    $withval/CoreFoundation.framework/Headers \
-    $withval/Headers \
-    $withval
-do
-    if test -r $d/CFStringEncodingConverter.h; then
-        ln -sfh $d include/CoreFoundation
-    fi
-done
-])
-
 AC_SUBST(configdir)
 AC_SUBST(lockdir)
 AC_SUBST(piddir)
@@ -181,12 +162,10 @@ AC_SUBST(SMBWRAPPER)
 AC_SUBST(EXTRA_BIN_PROGS)
 AC_SUBST(EXTRA_SBIN_PROGS)
 AC_SUBST(EXTRA_ALL_TARGETS)
-AC_SUBST(CONFIG_LIBS)
 
 AC_ARG_ENABLE(debug, 
 [  --enable-debug          Turn on compiler debugging information (default=no)],
     [if eval "test x$enable_debug = xyes"; then
-        echo "DEBUGGING TURNED ON!!!!"
        CFLAGS="${CFLAGS} -g"
     fi])
 
@@ -222,10 +201,6 @@ OLD_CFLAGS=${CFLAGS}
 AC_PROG_CC
 CFLAGS=${OLD_CFLAGS}
 
-OLD_CFLAGS=${CFLAGS}
-AC_PROG_CPP
-CFLAGS=${OLD_CFLAGS}
-
 AC_PROG_INSTALL
 AC_PROG_AWK
 AC_PATH_PROG(PERL, perl)
@@ -320,7 +295,7 @@ DYNEXP=
 
 dnl Add modules that have to be built by default here
 dnl These have to be built static:
-default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_lsa_ds rpc_wks rpc_net rpc_dfs rpc_srv rpc_spoolss rpc_epmapper auth_rhosts auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin pdb_gums gums_tdbsam2"
+default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_lsa_ds rpc_wks rpc_net rpc_dfs rpc_srv rpc_spoolss auth_rhosts auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin"
 
 dnl These are preferably build shared, and static if dlopen() is not available
 default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap charset_CP850 charset_CP437"
@@ -455,7 +430,7 @@ case "$host_os" in
          *)
                CPPFLAGS="$CPPFLAGS -D_SYSV"
                AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
-    esac
+   esac
     ;;
 #
 # Tests needed for SINIX large file support.
@@ -527,15 +502,15 @@ main() {
 #endif
 }
 ], [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"
-               AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
-               AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
-               AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
-       fi
-       AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
-       ;;
+        CPPFLAGS="$old_CPPFLAGS"
+        if test x$LINUX_LFS_SUPPORT = xyes ; then
+          CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
+                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
+          AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
+          AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
+        fi
+       AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
+               ;;
 
 #
 # MacOS X is the *only* system that uses compose character in utf8. This
@@ -553,16 +528,10 @@ main() {
 # use that instead of plain dlsym.
 
                AC_CHECK_LIB(dl,dlopen)
-               AC_CHECK_FUNCS(dlsym_prepend_underscore,[CPPFLAGS="$CPPFLAGS -Ddlsym=dlsym_prepend_underscore"])
-
-#Add a system specific charset module.
+               AC_CHECK_FUNCS(dlsym_prepend_underscore,
+               [CPPFLAGS="$CPPFLAGS -Ddlsym=dlsym_prepend_underscore"])
 
-               default_shared_modules="$default_shared_modules charset_macosxfs"
-               old_CPPFLAGS="$CPPFLAGS"
-               CPPFLAGS="-Iinclude $CPPFLAGS" 
-               AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
-               CPPFLAGS="$old_CPPFLAGS"
-               ;;
+               ;;   
     *hurd*)
         AC_MSG_CHECKING([for LFS support])
         old_CPPFLAGS="$CPPFLAGS"
@@ -1635,9 +1604,8 @@ for i in $LOOK_DIRS ; do
     save_CPPFLAGS=$CPPFLAGS
     CPPFLAGS="$CPPFLAGS -I$i/include"
 dnl This is here to handle -withval stuff for --with-libiconv
-    if test x"$ICONV_PATH_SPEC" = "xyes" ; then
-       LDFLAGS="-L$i/lib"
-    fi
+dnl Perhaps we should always add a -L
+    LDFLAGS="$LDFLAGS -L$i/lib"
     LIBS=
     export LDFLAGS LIBS CPPFLAGS
 dnl Try to find iconv(3)
@@ -1647,7 +1615,7 @@ dnl Try to find iconv(3)
        LDFLAGS=$save_LDFLAG
         LIB_ADD_DIR(LDFLAGS, "$i/lib")
         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
-       LIBS="$save_LIBS"
+        LIBS="$save_LIBS"
         ICONV_LOCATION=$i
         export LDFLAGS LIBS CPPFLAGS
 dnl Now, check for a working iconv ... we want to do it here because
@@ -1714,7 +1682,7 @@ dnl ])
         LIBS="$ic_save_LIBS"
         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
           CPPFLAGS=$save_CPPFLAGS
-          CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
+          LDFLAGS=$save_LDFLAGS
           LIBS=$save_LIBS
            if test x"$jm_cv_lib_iconv" != x; then
               LIBS="$LIBS -l$jm_cv_lib_iconv"
@@ -2318,8 +2286,6 @@ AC_MSG_RESULT($with_ldap_support)
 
 SMBLDAP=""
 AC_SUBST(SMBLDAP)
-SMBLDAPUTIL=""
-AC_SUBST(SMBLDAPUTIL)
 if test x"$with_ldap_support" != x"no"; then
 
   ##################################################################
@@ -2375,9 +2341,7 @@ if test x"$with_ldap_support" != x"no"; then
   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes" -a x"$ac_cv_func_ext_ldap_domain2hostlist" = x"yes"; then
     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
-    default_shared_modules="$default_shared_modules config_ldap";
     SMBLDAP="lib/smbldap.o"
-    SMBLDAPUTIL="lib/smbldap_util.o"
     with_ldap_support=yes
     AC_MSG_CHECKING(whether LDAP support is used)
     AC_MSG_RESULT(yes)
@@ -4144,7 +4108,6 @@ MODULE_pdb_guest=STATIC
 MODULE_rpc_spoolss=STATIC
 MODULE_rpc_srv=STATIC
 MODULE_idmap_tdb=STATIC
-MODULE_gums_tdbsam2=STATIC
 
 AC_ARG_WITH(static-modules,
 [  --with-static-modules=MODULES  Comma-seperated list of names of modules to statically link in],
@@ -4180,12 +4143,8 @@ SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o, "bin/ldapsam.$SHLIBEXT", PDB,
 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
 SMB_MODULE(pdb_guest, passdb/pdb_guest.o, "bin/guest.$SHLIBEXT", PDB)
-SMB_MODULE(pdb_gums, passdb/pdb_gums.o, "bin/gums.$SHLIBEXT", PDB)
 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
 
-SMB_MODULE(gums_tdbsam2, sam/gums_tdbsam2.o, "bin/tdbsam2.$SHLIBEXT", GUMS)
-SMB_SUBSYSTEM(GUMS)
-
 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
 SMB_MODULE(rpc_reg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
@@ -4196,8 +4155,6 @@ SMB_MODULE(rpc_srv, \$(RPC_SVC_OBJ), "bin/librpc_srvsvc.$SHLIBEXT", RPC)
 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
 SMB_MODULE(rpc_echo, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
-SMB_MODULE(rpc_epmapper, \$(RPC_EPMAPPER_OBJ), "bin/librpc_epmapper.$SHLIBEXT",
-                        RPC)
 SMB_SUBSYSTEM(RPC,smbd/server.o)
 
 SMB_MODULE(idmap_ldap, sam/idmap_ldap.o, "bin/idmap_ldap.$SHLIBEXT", IDMAP)
@@ -4207,7 +4164,6 @@ SMB_SUBSYSTEM(IDMAP,sam/idmap.o)
 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
-SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
 
 SMB_MODULE(auth_rhosts, \$(AUTH_RHOSTS_OBJ), "bin/rhosts.$SHLIBEXT", AUTH)
@@ -4229,9 +4185,6 @@ SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
 
-SMB_MODULE(config_ldap, param/config_ldap.o, "bin/config_ldap.$SHLIBEXT", CONFIG, [ CONFIG_LIBS="$CONFIG_LIBS $LDAP_LIBS" "$SMBLDAP" ])
-SMB_SUBSYSTEM(CONFIG, param/modconf.o)
-
 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
 
 #################################################
diff --git a/source/include/genparser.h b/source/include/genparser.h
deleted file mode 100644 (file)
index f28cd78..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-   Copyright (C) Andrew Tridgell <genstruct@tridgell.net> 2002
-   
-   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 _GENPARSER_H
-#define _GENPARSER_H
-
-/* these macros are needed for genstruct auto-parsers */
-#ifndef GENSTRUCT
-#define GENSTRUCT
-#define _LEN(x)
-#define _NULLTERM
-#endif
-
-/*
-  automatic marshalling/unmarshalling system for C structures
-*/
-
-/* flag to mark a fixed size array as actually being null terminated */
-#define FLAG_NULLTERM 1
-#define FLAG_ALWAYS 2
-
-struct enum_struct {
-       const char *name;
-       unsigned value;
-};
-
-/* intermediate dumps are stored in one of these */
-struct parse_string {
-       unsigned allocated;
-       unsigned length;
-       char *s;
-};
-
-typedef int (*gen_dump_fn)(TALLOC_CTX *, struct parse_string *, const char *ptr, unsigned indent);
-typedef int (*gen_parse_fn)(TALLOC_CTX *, char *ptr, const char *str);
-
-/* genstruct.pl generates arrays of these */
-struct parse_struct {
-       const char *name;
-       unsigned ptr_count;
-       unsigned size;
-       unsigned offset;
-       unsigned array_len;
-       const char *dynamic_len;
-       unsigned flags;
-       gen_dump_fn dump_fn;
-       gen_parse_fn parse_fn;
-};
-
-#define DUMP_PARSE_DECL(type) \
-  int gen_dump_ ## type(TALLOC_CTX *, struct parse_string *, const char *, unsigned); \
-  int gen_parse_ ## type(TALLOC_CTX *, char *, const char *);
-
-DUMP_PARSE_DECL(char)
-DUMP_PARSE_DECL(int)
-DUMP_PARSE_DECL(unsigned)
-DUMP_PARSE_DECL(double)
-DUMP_PARSE_DECL(float)
-
-#define gen_dump_unsigned_char gen_dump_char
-#define gen_parse_unsigned_char gen_parse_char
-
-#endif /* _GENPARSER_H */
diff --git a/source/include/genparser_samba.h b/source/include/genparser_samba.h
deleted file mode 100644 (file)
index 213d51d..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-   Copyright (C) Simo Sorce <idra@samba.org> 2002
-   
-   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 _GENPARSER_SAMBA_H
-#define _GENPARSER_SAMBA_H
-
-const struct parse_struct pinfo_security_ace_info[] = {
-{"type", 0, sizeof(uint8), offsetof(struct security_ace_info, type), 0, NULL, 0, gen_dump_uint8, gen_parse_uint8},
-{"flags", 0, sizeof(uint8), offsetof(struct security_ace_info, flags), 0, NULL, 0, gen_dump_uint8, gen_parse_uint8},
-{"size", 0, sizeof(uint16), offsetof(struct security_ace_info, size), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16},
-{"info", 0, sizeof(char), offsetof(struct security_ace_info, info), 0, NULL, 0, gen_dump_SEC_ACCESS, gen_parse_SEC_ACCESS},
-{"obj_flags", 0, sizeof(uint32), offsetof(struct security_ace_info, obj_flags), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"obj_guid", 0, sizeof(char), offsetof(struct security_ace_info, obj_guid), 0, NULL, 0, gen_dump_GUID, gen_parse_GUID},
-{"inh_guid", 0, sizeof(char), offsetof(struct security_ace_info, inh_guid), 0, NULL, 0, gen_dump_GUID, gen_parse_GUID},
-{"trustee", 0, sizeof(char), offsetof(struct security_ace_info, trustee), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-const struct parse_struct pinfo_security_acl_info[] = {
-{"revision", 0, sizeof(uint16), offsetof(struct security_acl_info, revision), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16},
-{"size", 0, sizeof(uint16), offsetof(struct security_acl_info, size), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16},
-{"num_aces", 0, sizeof(uint32), offsetof(struct security_acl_info, num_aces), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"ace", 1, sizeof(struct security_ace_info), offsetof(struct security_acl_info, ace), 0, "size", 0, gen_dump_SEC_ACE, gen_parse_SEC_ACE},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-const struct parse_struct pinfo_security_descriptor_info[] = {
-{"revision", 0, sizeof(uint16), offsetof(struct security_descriptor_info, revision), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16},
-{"type", 0, sizeof(uint16), offsetof(struct security_descriptor_info, type), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16},
-{"off_owner_sid", 0, sizeof(uint32), offsetof(struct security_descriptor_info, off_owner_sid), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"off_grp_sid", 0, sizeof(uint32), offsetof(struct security_descriptor_info, off_grp_sid), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"off_sacl", 0, sizeof(uint32), offsetof(struct security_descriptor_info, off_sacl), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"off_dacl", 0, sizeof(uint32), offsetof(struct security_descriptor_info, off_dacl), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"dacl", 1, sizeof(struct security_acl_info), offsetof(struct security_descriptor_info, dacl), 0, NULL, 0, gen_dump_SEC_ACL, gen_parse_SEC_ACL},
-{"sacl", 1, sizeof(struct security_acl_info), offsetof(struct security_descriptor_info, sacl), 0, NULL, 0, gen_dump_SEC_ACL, gen_parse_SEC_ACL},
-{"owner_sid", 1, sizeof(char), offsetof(struct security_descriptor_info, owner_sid), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID},
-{"grp_sid", 1, sizeof(char), offsetof(struct security_descriptor_info, grp_sid), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-const struct parse_struct pinfo_luid_attr_info[] = {
-{"attr", 0, sizeof(uint32), offsetof(struct LUID_ATTR, attr), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"luid", 1, sizeof(LUID), offsetof(struct LUID_ATTR, luid), 0, NULL, 0, gen_dump_LUID, gen_parse_LUID},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-const struct parse_struct pinfo_data_blob_info[] = {
-{"length", 0, sizeof(int), offsetof(DATA_BLOB, length), 0, NULL, 0, gen_dump_int, gen_parse_int},
-{"data", 1, sizeof(char), offsetof(DATA_BLOB, data), 0, "length", 0, gen_dump_char, gen_parse_char},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-#endif /* _GENPARSER_SAMBA_H */
diff --git a/source/include/gums.h b/source/include/gums.h
deleted file mode 100644 (file)
index 9ce2ec4..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   GUMS structures
-   Copyright (C) Simo Sorce 2002
-   
-   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 _GUMS_H
-#define _GUMS_H
-
-#define GUMS_VERSION_MAJOR     0
-#define GUMS_VERSION_MINOR     1
-#define GUMS_OBJECT_VERSION    1
-#define GUMS_INTERFACE_VERSION 1
-
-#define GUMS_OBJ_DOMAIN                        0x10
-#define GUMS_OBJ_NORMAL_USER           0x20
-#define GUMS_OBJ_GROUP                 0x30
-#define GUMS_OBJ_ALIAS                 0x31
-#define GUMS_OBJ_PRIVILEGE             0x40
-
-/* define value types */
-#define GUMS_SET_PRIMARY_GROUP         0x1
-#define GUMS_SET_SEC_DESC              0x2
-
-#define GUMS_SET_NAME                  0x10
-#define GUMS_SET_DESCRIPTION           0x11
-#define GUMS_SET_FULL_NAME             0x12
-
-/* user specific type values */
-#define GUMS_SET_LOGON_TIME            0x20
-#define GUMS_SET_LOGOFF_TIME           0x21
-#define GUMS_SET_KICKOFF_TIME          0x23
-#define GUMS_SET_PASS_LAST_SET_TIME    0x24
-#define GUMS_SET_PASS_CAN_CHANGE_TIME  0x25
-#define GUMS_SET_PASS_MUST_CHANGE_TIME 0x26
-
-
-#define GUMS_SET_HOME_DIRECTORY                0x31
-#define GUMS_SET_DRIVE                 0x32
-#define GUMS_SET_LOGON_SCRIPT          0x33
-#define GUMS_SET_PROFILE_PATH          0x34
-#define GUMS_SET_WORKSTATIONS          0x35
-#define GUMS_SET_UNKNOWN_STRING                0x36
-#define GUMS_SET_MUNGED_DIAL           0x37
-
-#define GUMS_SET_LM_PASSWORD           0x40
-#define GUMS_SET_NT_PASSWORD           0x41
-#define GUMS_SET_PLAINTEXT_PASSWORD    0x42
-#define GUMS_SET_UNKNOWN_3             0x43
-#define GUMS_SET_LOGON_DIVS            0x44
-#define GUMS_SET_HOURS_LEN             0x45
-#define GUMS_SET_HOURS                 0x46
-#define GUMS_SET_BAD_PASSWORD_COUNT    0x47
-#define GUMS_SET_LOGON_COUNT           0x48
-#define GUMS_SET_UNKNOWN_6             0x49
-
-#define GUMS_SET_MUST_CHANGE_PASS      0x50
-#define GUMS_SET_CANNOT_CHANGE_PASS    0x51
-#define GUMS_SET_PASS_NEVER_EXPIRE     0x52
-#define GUMS_SET_ACCOUNT_DISABLED      0x53
-#define GUMS_SET_ACCOUNT_LOCKOUT       0x54
-
-/*group specific type values */
-#define GUMS_ADD_SID_LIST              0x60
-#define GUMS_DEL_SID_LIST              0x61
-#define GUMS_SET_SID_LIST              0x62
-
-typedef struct gums_user
-{
-       DOM_SID *group_sid;             /* Primary Group SID */
-
-       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 */
-
-       char *full_name;                /* user's full name string */
-       char *home_dir;                 /* home directory string */
-       char *dir_drive;                /* home directory drive string */
-       char *logon_script;             /* logon script string */
-       char *profile_path;             /* profile path string */
-       char *workstations;             /* login from workstations string */
-       char *unknown_str;              /* don't know what this is, yet. */
-       char *munged_dial;              /* munged path name and dial-back tel number */
-
-       DATA_BLOB lm_pw;                /* .data is Null if no password */
-       DATA_BLOB nt_pw;                /* .data is Null if no password */
-
-       uint16 acct_ctrl;               /* account type & status flags */
-       uint16 logon_divs;              /* 168 - number of hours in a week */
-       uint32 hours_len;               /* normally 21 bytes */
-       uint8 *hours;
-
-       uint16 bad_password_count;      /* 0 */
-       uint16 logon_count;             /* 0 */
-       uint32 unknown_3;               /* 0x00ff ffff */
-       uint32 unknown_6;               /* 0x0000 04ec */
-
-} GUMS_USER;
-
-typedef struct gums_group
-{
-       uint32 count;                   /* Number of SIDs */
-       DOM_SID *members;               /* SID array */
-
-} GUMS_GROUP;
-
-typedef struct gums_domain
-{
-       uint32 next_rid;
-
-} GUMS_DOMAIN;
-
-typedef struct gums_privilege
-{
-       LUID_ATTR *privilege;           /* Privilege Type */
-
-       uint32 count;
-       DOM_SID *members;
-
-} GUMS_PRIVILEGE;
-
-union gums_obj_p {
-       GUMS_USER *user;
-       GUMS_GROUP *group;
-       GUMS_DOMAIN *domain;
-       GUMS_PRIVILEGE *priv;
-};
-
-typedef struct gums_object
-{
-       TALLOC_CTX *mem_ctx;
-
-       uint32 type;                    /* Object Type */
-       uint32 version;                 /* Object Version */
-       uint32 seq_num;                 /* Object Sequence Number */
-
-       SEC_DESC *sec_desc;             /* Security Descriptor */
-
-       DOM_SID *sid;                   /* Object Sid */
-       char *name;                     /* Object Name */
-       char *description;              /* Object Description */
-
-       union gums_obj_p data;          /* Object Specific data */
-
-} GUMS_OBJECT;
-
-typedef struct gums_data_set
-{
-       int type; /* GUMS_SET_xxx */
-       void *data;
-
-} GUMS_DATA_SET;
-
-typedef struct gums_commit_set
-{
-       TALLOC_CTX *mem_ctx;
-
-       uint32 type;                    /* Object type */
-       DOM_SID sid;                    /* Object Sid */
-       uint32 count;                   /* number of changes */
-       GUMS_DATA_SET *data;
-
-} GUMS_COMMIT_SET;
-
-typedef struct gums_priv_commit_set
-{
-       TALLOC_CTX *mem_ctx;
-
-       uint32 type;                    /* Object type */
-       char *name;                     /* Object Sid */
-       uint32 count;                   /* number of changes */
-       GUMS_DATA_SET *data;
-
-} GUMS_PRIV_COMMIT_SET;
-
-
-typedef struct gums_functions
-{
-       /* module data */
-       TALLOC_CTX *mem_ctx;
-       char *name;
-       void *private_data;
-       void (*free_private_data)(void **);
-
-       /* Generic object functions */
-
-       NTSTATUS (*get_domain_sid) (DOM_SID *sid, const char* name);
-       NTSTATUS (*set_domain_sid) (const DOM_SID *sid);
-
-       NTSTATUS (*get_sequence_number) (void);
-
-       NTSTATUS (*new_object) (DOM_SID *sid, const char *name, const int obj_type);
-       NTSTATUS (*delete_object) (const DOM_SID *sid);
-
-       NTSTATUS (*get_object_from_sid) (GUMS_OBJECT **object, const DOM_SID *sid, const int obj_type);
-       NTSTATUS (*get_object_from_name) (GUMS_OBJECT **object, const char *name, const int obj_type);
-       /* This function is used to get the list of all objects changed since b_time, it is
-          used to support PDC<->BDC synchronization */
-       NTSTATUS (*get_updated_objects) (GUMS_OBJECT **objects, const NTTIME base_time);
-
-       NTSTATUS (*enumerate_objects_start) (void **handle, const DOM_SID *sid, const int obj_type);
-       NTSTATUS (*enumerate_objects_get_next) (GUMS_OBJECT **object, void *handle);
-       NTSTATUS (*enumerate_objects_stop) (void *handle);
-
-       /* This function MUST be used ONLY by PDC<->BDC replication code or recovery tools.
-          Never use this function to update an object in the database, use set_object_values() */
-       NTSTATUS (*set_object) (const GUMS_OBJECT *object);
-
-       /* set object values function */
-       NTSTATUS (*set_object_values) (DOM_SID *sid, uint32 count, GUMS_DATA_SET *data_set);
-
-       /* Group related functions */
-       NTSTATUS (*add_members_to_group) (const DOM_SID *group, const DOM_SID **members);
-       NTSTATUS (*delete_members_from_group) (const DOM_SID *group, const DOM_SID **members);
-       NTSTATUS (*enumerate_group_members) (DOM_SID **members, const DOM_SID *sid, const int type);
-
-       NTSTATUS (*get_sid_groups) (DOM_SID **groups, const DOM_SID *sid);
-
-       NTSTATUS (*lock_sid) (const DOM_SID *sid);
-       NTSTATUS (*unlock_sid) (const DOM_SID *sid);
-
-       /* privileges related functions */
-
-       NTSTATUS (*add_members_to_privilege) (const LUID_ATTR *priv, const DOM_SID **members);
-       NTSTATUS (*delete_members_from_privilege) (const LUID_ATTR *priv, const DOM_SID **members);
-       NTSTATUS (*enumerate_privilege_members) (DOM_SID **members, const LUID_ATTR *priv);
-       NTSTATUS (*get_sid_privileges) (DOM_SID **privs, const DOM_SID *sid);
-
-       /* warning!: set_privilege will overwrite a prior existing privilege if such exist */
-       NTSTATUS (*set_privilege) (GUMS_PRIVILEGE *priv);
-
-} GUMS_FUNCTIONS;
-
-typedef NTSTATUS (*gums_init_function)(
-                       struct gums_functions *,
-                       const char *);
-
-struct gums_init_function_entry {
-
-       const char *name;
-       gums_init_function init_fn;
-       struct gums_init_function_entry *prev, *next;
-};
-
-#endif /* _GUMS_H */
index 4e7913ea38bfd2ce389192951bdb0696aec09b5d..638648dc44d659cf1a5ec5f56283b9f131174b01 100644 (file)
@@ -802,10 +802,6 @@ extern int errno;
 
 #include "rpc_secdes.h"
 
-#include "genparser.h"
-
-#include "gums.h"
-
 #include "nt_printing.h"
 
 #include "msdfs.h"
@@ -890,7 +886,6 @@ struct smb_ldap_privates;
 /* forward declarations from smbldap.c */
 
 #include "smbldap.h"
-#include "modconf.h"
 
 /***** automatically generated prototypes *****/
 #ifndef NO_PROTO_H
diff --git a/source/include/modconf.h b/source/include/modconf.h
deleted file mode 100644 (file)
index f5cc5ef..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef _MODCONF_H_
-#define _MODCONF_H_
-/* 
-   Unix SMB/CIFS implementation.
-
-   ModConf headers
-
-   Copyright (C) Simo Sorce 2003
-   
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public
-   License as published by the Free Software Foundation; either
-   version 2 of the License, or (at your option) any later version.
-   
-   This library 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
-   Library General Public License for more details.
-   
-   You should have received a copy of the GNU Library General Public
-   License along with this library; if not, write to the
-   Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA  02111-1307, USA.   
-*/
-
-#define SAMBA_CONFIG_INTERFACE_VERSION 1
-
-/* Filled out by config backends */
-struct config_functions {
-       NTSTATUS (*init)(char *params);
-       NTSTATUS (*load)(BOOL (*sfunc)(const char *),BOOL (*pfunc)(const char *, const char *));
-       NTSTATUS (*close)(void);
-};
-#endif /* _MODCONF_H_ */
index eaedc7ea9b41833eb612f8f2297d034cd6eff145..b1a4107980d55a2c7cb5067163c4f65523ef1999 100644 (file)
 #ifndef _NT_DOMAIN_H /* _NT_DOMAIN_H */
 #define _NT_DOMAIN_H 
 
-struct uuid
-{
-  uint32 time_low;
-  uint16 time_mid;
-  uint16 time_hi_and_version;
-  uint8  clock_seq[2];
-  uint8  node[6];
-};
-#define UUID_SIZE 16
-
-#define UUID_FLAT_SIZE 16
-typedef struct uuid_flat
-{
-       uint8 info[UUID_FLAT_SIZE];
-} UUID_FLAT;
-
 /* dce/rpc support */
 #include "rpc_dce.h"
 
@@ -418,7 +402,6 @@ struct acct_info
 #include "rpc_dfs.h"
 #include "rpc_ds.h"
 #include "rpc_echo.h"
-#include "rpc_epmapper.h"
 #include "rpc_shutdown.h"
 
 #endif /* _NT_DOMAIN_H */
index be1f236e3969ea87faa2b6dc1c03f5f4b9cd27eb..3e9036aef7777c37fa2f63cb4198f99df9009f60 100644 (file)
@@ -177,15 +177,6 @@ typedef struct sam_group {
 } SAM_GROUP;
 
 
-typedef struct _GROUP_INFO {
-       struct pdb_methods *methods;
-       DOM_SID sid;
-       enum SID_NAME_USE sid_name_use;
-       fstring nt_name;
-       fstring comment;
-} GROUP_INFO;
-
-
 /*****************************************************************
  Functions to be implemented by the new (v2) passdb API 
 ****************************************************************/
@@ -221,8 +212,6 @@ typedef struct pdb_context
        
        NTSTATUS (*pdb_delete_sam_account)(struct pdb_context *, SAM_ACCOUNT *username);
 
-       /* group mapping functions: to be removed */
-       
        NTSTATUS (*pdb_getgrsid)(struct pdb_context *context, GROUP_MAP *map, DOM_SID sid);
        
        NTSTATUS (*pdb_getgrgid)(struct pdb_context *context, GROUP_MAP *map, gid_t gid);
@@ -243,30 +232,6 @@ typedef struct pdb_context
                                           GROUP_MAP **rmap, int *num_entries,
                                           BOOL unix_only);
 
-       /* group functions */
-
-       NTSTATUS (*pdb_get_group_info_by_sid)(struct pdb_context *context, GROUP_INFO *info, const DOM_SID *group);
-
-       NTSTATUS (*pdb_get_group_list)(struct pdb_context *context, GROUP_INFO **info, const enum SID_NAME_USE sid_name_use, int *num_groups);
-
-       NTSTATUS (*pdb_get_group_sids)(struct pdb_context *context, const DOM_SID *group, DOM_SID **members, int *num_members);
-
-       NTSTATUS (*pdb_add_group)(struct pdb_context *context, const SAM_GROUP *group);
-
-       NTSTATUS (*pdb_update_group)(struct pdb_context *context, const SAM_GROUP *group);
-
-       NTSTATUS (*pdb_delete_group)(struct pdb_context *context, const DOM_SID *group);
-
-       NTSTATUS (*pdb_add_sid_to_group)(struct pdb_context *context, const DOM_SID *group, const DOM_SID *member);
-
-       NTSTATUS (*pdb_remove_sid_from_group)(struct pdb_context *context, const DOM_SID *group, const DOM_SID *member);
-
-       NTSTATUS (*pdb_get_group_info_by_name)(struct pdb_context *context, GROUP_INFO *info, const char *name);
-
-       NTSTATUS (*pdb_get_group_info_by_nt_name)(struct pdb_context *context, GROUP_INFO *info, const char *nt_name);
-
-       NTSTATUS (*pdb_get_group_uids)(struct pdb_context *context, const DOM_SID *group, uid_t **members, int *num_members);
-
        void (*free_fn)(struct pdb_context **);
        
        TALLOC_CTX *mem_ctx;
@@ -297,9 +262,7 @@ typedef struct pdb_methods
        NTSTATUS (*update_sam_account)(struct pdb_methods *, SAM_ACCOUNT *sampass);
        
        NTSTATUS (*delete_sam_account)(struct pdb_methods *, SAM_ACCOUNT *username);
-
-       /* group mapping functions: to be removed */
-
+       
        NTSTATUS (*getgrsid)(struct pdb_methods *methods, GROUP_MAP *map, DOM_SID sid);
 
        NTSTATUS (*getgrgid)(struct pdb_methods *methods, GROUP_MAP *map, gid_t gid);
@@ -320,30 +283,6 @@ typedef struct pdb_methods
                                       GROUP_MAP **rmap, int *num_entries,
                                       BOOL unix_only);
 
-       /* group functions */
-
-       NTSTATUS (*get_group_info_by_sid)(struct pdb_methods *methods, GROUP_INFO *info, const DOM_SID *group);
-
-       NTSTATUS (*get_group_list)(struct pdb_methods *methods, GROUP_INFO **info, const enum SID_NAME_USE sid_name_use, int *num_groups);
-
-       NTSTATUS (*get_group_sids)(struct pdb_methods *methods, const DOM_SID *group, DOM_SID **members, int *num_members);
-
-       NTSTATUS (*add_group)(struct pdb_methods *methods, const SAM_GROUP *group);
-
-       NTSTATUS (*update_group)(struct pdb_methods *methods, const SAM_GROUP *group);
-
-       NTSTATUS (*delete_group)(struct pdb_methods *methods, const DOM_SID *group);
-
-       NTSTATUS (*add_sid_to_group)(struct pdb_methods *methods, const DOM_SID *group, const DOM_SID *member);
-
-       NTSTATUS (*remove_sid_from_group)(struct pdb_methods *methods, const DOM_SID *group, const DOM_SID *member);
-
-       NTSTATUS (*get_group_info_by_name)(struct pdb_methods *methods, GROUP_INFO *info, const char *name);
-
-       NTSTATUS (*get_group_info_by_nt_name)(struct pdb_methods *methods, GROUP_INFO *info, const char *nt_name);
-
-       NTSTATUS (*get_group_uids)(struct pdb_methods *methods, const DOM_SID *group, uid_t **members, int *num_members);
-
        void *private_data;  /* Private data of some kind */
        
        void (*free_private_data)(void **);
index 1d658a07681e2330d70d1faf0d45ca72aaa8cf3b..bf7c61b251ee4b47b4510860d1e605b8690aff86 100644 (file)
@@ -21,8 +21,6 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
-#include "includes.h"
-
 /*
    This file defines the low-level printing system interfaces used by the
    SAMBA printing subsystem.
diff --git a/source/include/rpc_client_proto.h b/source/include/rpc_client_proto.h
deleted file mode 100644 (file)
index 0ecb195..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-#ifndef _RPC_CLIENT_PROTO_H_
-#define _RPC_CLIENT_PROTO_H_
-/* This file is automatically generated with "make proto". DO NOT EDIT */
-
-
-/*The following definitions come from  lib/util_list.c  */
-
-BOOL copy_policy_hnd (POLICY_HND *dest, const POLICY_HND *src);
-BOOL compare_rpc_hnd_node(const RPC_HND_NODE *x, 
-                         const RPC_HND_NODE *y);
-BOOL RpcHndList_set_connection(const POLICY_HND *hnd, 
-                              struct cli_connection *con);
-BOOL RpcHndList_del_connection(const POLICY_HND *hnd);
-struct cli_connection* RpcHndList_get_connection(const POLICY_HND *hnd);
-
-/*The following definitions come from  rpc_client/cli_connect.c  */
-
-void init_connections(void);
-void free_connections(void);
-void cli_connection_free(struct cli_connection *con);
-void cli_connection_unlink(struct cli_connection *con);
-BOOL cli_connection_init(const char *srv_name, char *pipe_name,
-                         struct cli_connection **con);
-BOOL cli_connection_init_auth(const char *srv_name, char *pipe_name,
-                              struct cli_connection **con,
-                              cli_auth_fns * auth, void *auth_creds);
-struct _cli_auth_fns *cli_conn_get_authfns(struct cli_connection *con);
-void *cli_conn_get_auth_creds(struct cli_connection *con);
-BOOL rpc_hnd_pipe_req(const POLICY_HND * hnd, uint8 op_num,
-                      prs_struct * data, prs_struct * rdata);
-BOOL rpc_con_pipe_req(struct cli_connection *con, uint8 op_num,
-                      prs_struct * data, prs_struct * rdata);
-BOOL rpc_con_ok(struct cli_connection *con);
-
-/*The following definitions come from  rpc_client/cli_login.c  */
-
-BOOL cli_nt_setup_creds(struct cli_state *cli, unsigned char mach_pwd[16]);
-BOOL cli_nt_srv_pwset(struct cli_state *cli, unsigned char *new_hashof_mach_pwd);
-BOOL cli_nt_login_interactive(struct cli_state *cli, char *domain, char *username, 
-                              uint32 smb_userid_low, char *password,
-                              NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3);
-BOOL cli_nt_login_network(struct cli_state *cli, char *domain, char *username, 
-                          uint32 smb_userid_low, char lm_chal[8], 
-                         char *lm_chal_resp, char *nt_chal_resp,
-                          NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3);
-BOOL cli_nt_logoff(struct cli_state *cli, NET_ID_INFO_CTR *ctr);
-
-/*The following definitions come from  rpc_client/cli_lsarpc.c  */
-
-BOOL do_lsa_open_policy(struct cli_state *cli,
-                       char *system_name, POLICY_HND *hnd,
-                       BOOL sec_qos);
-BOOL do_lsa_query_info_pol(struct cli_state *cli,
-                       POLICY_HND *hnd, uint16 info_class,
-                       fstring domain_name, DOM_SID *domain_sid);
-BOOL do_lsa_close(struct cli_state *cli, POLICY_HND *hnd);
-BOOL cli_lsa_get_domain_sid(struct cli_state *cli, char *server);
-uint32 lsa_open_policy(const char *system_name, POLICY_HND *hnd,
-                      BOOL sec_qos, uint32 des_access);
-uint32 lsa_lookup_sids(POLICY_HND *hnd, int num_sids, DOM_SID *sids,
-                      char ***names, uint32 **types, int *num_names);
-uint32 lsa_lookup_names(POLICY_HND *hnd, int num_names, char **names,
-                       DOM_SID **sids, uint32 **types, int *num_sids);
-
-/*The following definitions come from  rpc_client/cli_netlogon.c  */
-
-BOOL cli_net_logon_ctrl2(struct cli_state *cli, uint32 status_level);
-BOOL cli_net_auth2(struct cli_state *cli, uint16 sec_chan, 
-                   uint32 neg_flags, DOM_CHAL *srv_chal);
-BOOL cli_net_req_chal(struct cli_state *cli, DOM_CHAL *clnt_chal, DOM_CHAL *srv_chal);
-BOOL cli_net_srv_pwset(struct cli_state *cli, uint8 hashed_mach_pwd[16]);
-BOOL cli_net_sam_logon(struct cli_state *cli, NET_ID_INFO_CTR *ctr, NET_USER_INFO_3 *user_info3);
-BOOL cli_net_sam_logoff(struct cli_state *cli, NET_ID_INFO_CTR *ctr);
-BOOL change_trust_account_password( char *domain, char *remote_machine_list);
-
-/*The following definitions come from  rpc_client/cli_pipe.c  */
-
-BOOL rpc_api_pipe_req(struct cli_state *cli, uint8 op_num,
-                      prs_struct *data, prs_struct *rdata);
-BOOL rpc_pipe_bind(struct cli_state *cli, char *pipe_name, char *my_name);
-void cli_nt_set_ntlmssp_flgs(struct cli_state *cli, uint32 ntlmssp_flgs);
-BOOL cli_nt_session_open(struct cli_state *cli, char *pipe_name);
-void cli_nt_session_close(struct cli_state *cli);
-
-/*The following definitions come from  rpc_client/cli_reg.c  */
-
-BOOL do_reg_connect(struct cli_state *cli, char *full_keyname, char *key_name,
-                               POLICY_HND *reg_hnd);
-BOOL do_reg_open_hklm(struct cli_state *cli, uint16 unknown_0, uint32 level,
-                               POLICY_HND *hnd);
-BOOL do_reg_open_hku(struct cli_state *cli, uint16 unknown_0, uint32 level,
-                               POLICY_HND *hnd);
-BOOL do_reg_flush_key(struct cli_state *cli, POLICY_HND *hnd);
-BOOL do_reg_query_key(struct cli_state *cli, POLICY_HND *hnd,
-                               char *class, uint32 *class_len,
-                               uint32 *num_subkeys, uint32 *max_subkeylen,
-                               uint32 *max_subkeysize, uint32 *num_values,
-                               uint32 *max_valnamelen, uint32 *max_valbufsize,
-                               uint32 *sec_desc, NTTIME *mod_time);
-BOOL do_reg_unknown_1a(struct cli_state *cli, POLICY_HND *hnd, uint32 *unk);
-BOOL do_reg_query_info(struct cli_state *cli, POLICY_HND *hnd,
-                               char *key_value, uint32* key_type);
-BOOL do_reg_set_key_sec(struct cli_state *cli, POLICY_HND *hnd, SEC_DESC_BUF *sec_desc_buf);
-BOOL do_reg_get_key_sec(struct cli_state *cli, POLICY_HND *hnd, uint32 *sec_buf_size, SEC_DESC_BUF **ppsec_desc_buf);
-BOOL do_reg_delete_val(struct cli_state *cli, POLICY_HND *hnd, char *val_name);
-BOOL do_reg_delete_key(struct cli_state *cli, POLICY_HND *hnd, char *key_name);
-BOOL do_reg_create_key(struct cli_state *cli, POLICY_HND *hnd,
-                               char *key_name, char *key_class,
-                               SEC_ACCESS *sam_access,
-                               POLICY_HND *key);
-BOOL do_reg_enum_key(struct cli_state *cli, POLICY_HND *hnd,
-                               int key_index, char *key_name,
-                               uint32 *unk_1, uint32 *unk_2,
-                               time_t *mod_time);
-BOOL do_reg_create_val(struct cli_state *cli, POLICY_HND *hnd,
-                               char *val_name, uint32 type, BUFFER3 *data);
-BOOL do_reg_enum_val(struct cli_state *cli, POLICY_HND *hnd,
-                               int val_index, int max_valnamelen, int max_valbufsize,
-                               fstring val_name,
-                               uint32 *val_type, BUFFER2 *value);
-BOOL do_reg_open_entry(struct cli_state *cli, POLICY_HND *hnd,
-                               char *key_name, uint32 unk_0,
-                               POLICY_HND *key_hnd);
-BOOL do_reg_close(struct cli_state *cli, POLICY_HND *hnd);
-
-/*The following definitions come from  rpc_client/cli_samr.c  */
-
-BOOL get_samr_query_usergroups(struct cli_state *cli, 
-                               POLICY_HND *pol_open_domain, uint32 user_rid,
-                               uint32 *num_groups, DOM_GID *gid);
-BOOL get_samr_query_userinfo(struct cli_state *cli, 
-                               POLICY_HND *pol_open_domain,
-                               uint32 info_level,
-                               uint32 user_rid, SAM_USER_INFO_21 *usr);
-BOOL do_samr_chgpasswd_user(struct cli_state *cli,
-               char *srv_name, char *user_name,
-               char nt_newpass[516], uchar nt_oldhash[16],
-               char lm_newpass[516], uchar lm_oldhash[16]);
-BOOL do_samr_unknown_38(struct cli_state *cli, char *srv_name);
-BOOL do_samr_query_dom_info(struct cli_state *cli, 
-                               POLICY_HND *domain_pol, uint16 switch_value);
-BOOL do_samr_enum_dom_users(struct cli_state *cli, 
-                               POLICY_HND *pol, uint16 num_entries, uint16 unk_0,
-                               uint16 acb_mask, uint16 unk_1, uint32 size,
-                               struct acct_info **sam,
-                               int *num_sam_users);
-BOOL do_samr_connect(struct cli_state *cli, 
-                               char *srv_name, uint32 unknown_0,
-                               POLICY_HND *connect_pol);
-BOOL do_samr_open_user(struct cli_state *cli, 
-                               POLICY_HND *pol, uint32 unk_0, uint32 rid, 
-                               POLICY_HND *user_pol);
-BOOL do_samr_open_domain(struct cli_state *cli, 
-                               POLICY_HND *connect_pol, uint32 rid, DOM_SID *sid,
-                               POLICY_HND *domain_pol);
-BOOL do_samr_query_unknown_12(struct cli_state *cli, 
-                               POLICY_HND *pol, uint32 rid, uint32 num_gids, uint32 *gids,
-                               uint32 *num_aliases,
-                               fstring als_names    [MAX_LOOKUP_SIDS],
-                               uint32  num_als_users[MAX_LOOKUP_SIDS]);
-BOOL do_samr_query_usergroups(struct cli_state *cli, 
-                               POLICY_HND *pol, uint32 *num_groups, DOM_GID *gid);
-BOOL do_samr_query_userinfo(struct cli_state *cli, 
-                               POLICY_HND *pol, uint16 switch_value, void* usr);
-BOOL do_samr_close(struct cli_state *cli, POLICY_HND *hnd);
-
-/*The following definitions come from  rpc_client/cli_spoolss_notify.c  */
-
-BOOL spoolss_disconnect_from_client( struct cli_state *cli);
-BOOL spoolss_connect_to_client( struct cli_state *cli, char *remote_machine);
-BOOL cli_spoolss_reply_open_printer(struct cli_state *cli, char *printer, uint32 localprinter, uint32 type, uint32 *status, POLICY_HND *handle);
-BOOL cli_spoolss_reply_rrpcn(struct cli_state *cli, POLICY_HND *handle, 
-                            uint32 change_low, uint32 change_high, uint32 *status);
-BOOL cli_spoolss_reply_close_printer(struct cli_state *cli, POLICY_HND *handle, uint32 *status);
-
-/*The following definitions come from  rpc_client/cli_srvsvc.c  */
-
-BOOL do_srv_net_srv_conn_enum(struct cli_state *cli,
-                       char *server_name, char *qual_name,
-                       uint32 switch_value, SRV_CONN_INFO_CTR *ctr,
-                       uint32 preferred_len,
-                       ENUM_HND *hnd);
-BOOL do_srv_net_srv_sess_enum(struct cli_state *cli,
-                       char *server_name, char *qual_name,
-                       uint32 switch_value, SRV_SESS_INFO_CTR *ctr,
-                       uint32 preferred_len,
-                       ENUM_HND *hnd);
-BOOL do_srv_net_srv_share_enum(struct cli_state *cli,
-                       char *server_name, 
-                       uint32 switch_value, SRV_R_NET_SHARE_ENUM *r_o,
-                       uint32 preferred_len, ENUM_HND *hnd);
-BOOL do_srv_net_srv_file_enum(struct cli_state *cli,
-                       char *server_name, char *qual_name,
-                       uint32 switch_value, SRV_FILE_INFO_CTR *ctr,
-                       uint32 preferred_len,
-                       ENUM_HND *hnd);
-BOOL do_srv_net_srv_get_info(struct cli_state *cli,
-                       char *server_name, uint32 switch_value, SRV_INFO_CTR *ctr);
-
-/*The following definitions come from  rpc_client/cli_use.c  */
-
-void init_cli_use(void);
-void free_cli_use(void);
-struct cli_state *cli_net_use_add(const char *srv_name,
-                                 const struct ntuser_creds *usr_creds,
-                                 BOOL reuse, BOOL *is_new);
-BOOL cli_net_use_del(const char *srv_name,
-                    const struct ntuser_creds *usr_creds,
-                    BOOL force_close, BOOL *connection_closed);
-void cli_net_use_enum(uint32 *num_cons, struct use_info ***use);
-void cli_use_wait_keyboard(void);
-
-/*The following definitions come from  rpc_client/cli_wkssvc.c  */
-
-BOOL do_wks_query_info(struct cli_state *cli, 
-                       char *server_name, uint32 switch_value,
-                       WKS_INFO_100 *wks100);
-
-/*The following definitions come from  rpc_client/ncacn_np_use.c  */
-
-BOOL ncacn_np_use_del(const char *srv_name, const char *pipe_name,
-                      const vuser_key * key,
-                      BOOL force_close, BOOL *connection_closed);
-struct ncacn_np *ncacn_np_initialise(struct ncacn_np *msrpc,
-                                     const vuser_key * key);
-struct ncacn_np *ncacn_np_use_add(const char *pipe_name,
-                                  const vuser_key * key,
-                                  const char *srv_name,
-                                  const struct ntuser_creds *ntc,
-                                  BOOL reuse, BOOL *is_new_connection);
-#endif /* _PROTO_H_ */
index 8266fc861f1ba291d235164dc4367828ed4ee21b..52fe08d8753b15bb6903dc14b5929bf3efdb5797 100644 (file)
@@ -87,15 +87,29 @@ enum netsec_direction
 /* #define MAX_PDU_FRAG_LEN 0x1630             this is what wnt sets */
 #define MAX_PDU_FRAG_LEN 0x10b8                        /* this is what w2k sets */
 
+/*
+ * Actual structure of a DCE UUID
+ */
+
+typedef struct rpc_uuid
+{
+  uint32 time_low;
+  uint16 time_mid;
+  uint16 time_hi_and_version;
+  uint8 remaining[8];
+} RPC_UUID;
+
+#define RPC_UUID_LEN 16
+
 /* RPC_IFACE */
 typedef struct rpc_iface_info
 {
-  struct uuid uuid;  /* 16 bytes of rpc interface identification */
+  RPC_UUID uuid;    /* 16 bytes of rpc interface identification */
   uint32 version;    /* the interface version number */
 
 } RPC_IFACE;
 
-#define RPC_IFACE_LEN (UUID_SIZE + 4)
+#define RPC_IFACE_LEN (RPC_UUID_LEN + 4)
 
 struct pipe_id_info
 {
index 4d3f5416ac2b3ab775961ae2544230415e0486cc..e2622be532c2e2925ce7c8fad55012b1d76a574d 100644 (file)
@@ -64,7 +64,7 @@ typedef struct
        uint32          dnsname_ptr;
        uint32          forestname_ptr;
        
-       struct uuid     domain_guid;
+       GUID            domain_guid;
        
        UNISTR2 netbios_domain;
 
@@ -110,7 +110,7 @@ typedef struct {
        uint32          trust_type;
        uint32          trust_attributes;
        uint32          sid_ptr;
-       struct uuid     guid;
+       GUID            guid;
        
        UNISTR2         netbios_domain;
        UNISTR2         dns_domain;
diff --git a/source/include/rpc_epmapper.h b/source/include/rpc_epmapper.h
deleted file mode 100644 (file)
index bbca6ac..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Endpoint mapper data definitions
-   Copyright (C) Jim McDonough (jmcd@us.ibm.com) 2003
-   
-   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 EPM_HANDLE_LEN 20
-
-/* ordinal for the mapping interface */
-
-#define EPM_MAP_PIPE_NAME 0x03
-
-/* some of the different connection protocols and their IDs from Windows */
-
-#define EPM_FLOOR_UUID    0x0d   /* floor contains UUID                   */
-#define EPM_FLOOR_RPC     0x0b   /* tower is for connection-oriented rpc  */
-#define EPM_FLOOR_TCP     0x07   /* floor contains tcp port number        */
-#define EPM_FLOOR_IP      0x09   /* floor contains IP address             */
-#define EPM_FLOOR_NMPIPES 0x0f   /* floor contains remote named pipe name */
-#define EPM_FLOOR_LRPC    0x10   /* floor contains local named pipe name  */
-#define EPM_FLOOR_NETBIOS 0x11   /* floor contains netbios address        */
-#define EPM_FLOOR_NETBEUI 0x12   /* floor contains netbeui address        */
-#define EPM_FLOOR_SOCKET  0x20
-
-#define EPM_PIPE_NM "epmapper"
-
-#define MAX_TOWERS 1
-
-typedef struct
-{
-       uint8 data[EPM_HANDLE_LEN];
-} EPM_HANDLE;
-
-typedef struct 
-{
-       struct {
-               uint16 length;
-               uint8 protocol;
-               struct {
-                       struct uuid uuid;
-                       uint16 version;
-               } uuid;
-       } lhs;
-       struct {
-               uint16 length;
-               uint16 unknown;
-               struct {
-                       uint16 port;
-               } tcp;
-               struct {
-                       uint8 addr[4];
-               } ip;
-               char string[MAXHOSTNAMELEN+3]; /* hostname + \\ + null term */
-       } rhs;
-} EPM_FLOOR;
-
-typedef struct
-{
-       uint32 max_length;
-       uint32 length;
-       uint16 num_floors;
-       EPM_FLOOR *floors;
-       uint8 unknown;
-} EPM_TOWER;
-
-typedef struct
-{
-       EPM_HANDLE handle;
-       uint32 tower_ref_id;
-       EPM_TOWER *tower;
-       EPM_HANDLE term_handle; /* in/out */       
-       uint32 max_towers;  
-} EPM_Q_MAP;
-
-typedef struct
-{
-       uint32 max_count;
-       uint32 offset;
-       uint32 count;
-       uint32 *tower_ref_ids;
-       EPM_TOWER *towers;
-} EPM_TOWER_ARRAY;
-
-typedef struct
-{
-       EPM_HANDLE handle;
-       uint32 num_results;
-       EPM_TOWER_ARRAY *results;
-       uint32 status;
-} EPM_R_MAP;
-
-
-/* port mapping entries to be read */
-
-typedef struct _mapper_entries{
-       uint8 protocol        ;
-       RPC_IFACE uuid_info   ;  /* needs to be zeroed if no specific uuid */
-       uint16 port           ; 
-       char pipe_name[40]    ;
-       char srv_name[20]     ;  
-       uint8 srv_port[4]     ;
-       char func_name[16][16];  /* array of up to 16 functions available */
-} mapper_entries;
-
index 43ffa37d59729f1a18fc7c183d9393f22f227b97..2064a38056e7b9d16109a9f49f2bc39b8413c6cf 100644 (file)
@@ -275,7 +275,7 @@ typedef struct lsa_dns_dom_info
        UNIHDR  hdr_dns_dom_name;
        UNIHDR  hdr_forest_name;
 
-       struct uuid dom_guid; /* domain GUID */
+       GUID       dom_guid; /* domain GUID */
 
        UNISTR2 uni_nb_dom_name;
        UNISTR2 uni_dns_dom_name;
index 56145ac024c6454171993be3af92652c5f4ada8c..5e718f8167d6094cad8cbb8fa2122a98109f62b5 100644 (file)
                                        PROTECTED_SACL_SECURITY_INFORMATION|\
                                        PROTECTED_DACL_SECURITY_INFORMATION)
 
+/* Globally Unique ID */
+#define  GUID_SIZE 16
+typedef struct guid_info
+{
+       uint8 info[GUID_SIZE];
+} GUID;
+
 /* SEC_ACCESS */
 typedef struct security_info_info
 {
@@ -131,8 +138,8 @@ typedef struct security_ace_info
 
        /* this stuff may be present when type is XXXX_TYPE_XXXX_OBJECT */
        uint32  obj_flags; /* xxxx_ACE_OBJECT_xxxx e.g present/inherited present etc */
-       struct uuid obj_guid;  /* object GUID */
-       struct uuid inh_guid;  /* inherited object GUID */              
+       GUID    obj_guid;  /* object GUID */
+       GUID    inh_guid;  /* inherited object GUID */          
         /* eof object stuff */
 
        DOM_SID trustee;
index bef6bef6911ddd58e8bae5c20ab7adc94fd8bef0..4bd40216d7b01765ccd2dcc944996d14e996dec5 100644 (file)
@@ -195,7 +195,6 @@ typedef smb_ucs2_t wfstring[FSTRING_LEN];
 #define PIPE_NETDFS   "\\PIPE\\netdfs"
 #define PIPE_ECHO     "\\PIPE\\rpcecho"
 #define PIPE_SHUTDOWN "\\PIPE\\initshutdown"
-#define PIPE_EPM      "\\PIPE\\epmapper"
 
 #define PIPE_NETLOGON_PLAIN "\\NETLOGON"
 
@@ -210,8 +209,7 @@ typedef smb_ucs2_t wfstring[FSTRING_LEN];
 #define PI_NETDFS              8
 #define PI_ECHO                9
 #define PI_SHUTDOWN            10
-#define PI_EPM                 11
-#define PI_MAX_PIPES           12
+#define PI_MAX_PIPES           11
 
 /* 64 bit time (100usec) since ????? - cifs6.txt, section 3.5, page 30 */
 typedef struct nttime_info
diff --git a/source/include/tdbsam2.h b/source/include/tdbsam2.h
deleted file mode 100644 (file)
index b99e165..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Unix SMB/CIFS implementation. 
- * tdbsam2 genstruct enabled header file
- * Copyright (C) Simo Sorce 2002
- * 
- * 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.
- */
-
-/* ALL strings assumes UTF8 as encoding */
-
-#ifndef TDBSAM2_H
-#define TDBSAM2_H
-
-/* IMPORTANT: these structures must follow closely the GUMS_OBJECTs
- * structures as they will be casted over !!
- * the GUMS_OBJECT union is unrolled here into four tdbsam2
- * objects cause genstruct is not able to follow arbitrary unions */
-
-GENSTRUCT struct domain_sub_structure
-{
-       uint32 next_rid;                /* The Next free RID */
-};
-
-GENSTRUCT struct tdbsam2_domain_data
-{
-       TALLOC_CTX *mem_ctx;
-
-       uint32 type;
-       uint32 version;
-       uint32 xcounter;                /* counter to be updated at any change */
-
-       SEC_DESC *sec_desc;             /* Security Descriptor */
-       
-       DOM_SID *dom_sid;               /* The Domain SID */
-       char *name; _NULLTERM           /* NT Domain Name */
-       char *description; _NULLTERM    /* Descritpion (Gecos) */
-
-       struct domain_sub_structure *dss;
-};
-
-GENSTRUCT struct user_sub_structure
-{
-       DOM_SID *group_sid;             /* The Primary Group SID */
-
-       NTTIME logon_time;
-       NTTIME logoff_time;
-       NTTIME kickoff_time;
-       NTTIME pass_last_set_time;
-       NTTIME pass_can_change_time;
-       NTTIME pass_must_change_time;
-       
-       char *full_name; _NULLTERM      /* The Full Name */
-       char *home_dir; _NULLTERM       /* Home Directory */
-       char *dir_drive; _NULLTERM      /* Drive Letter the home should be mapped to */
-       char *logon_script; _NULLTERM   /* Logon script path */
-       char *profile_path; _NULLTERM   /* Profile is stored here */
-       char *workstations; _NULLTERM   /* List of Workstation names the user is allowed to LogIn */
-       char *unknown_str; _NULLTERM    /* Guess ... Unknown */
-       char *munged_dial; _NULLTERM    /* Callback Number */
-
-       DATA_BLOB lm_pw;                /* .data is Null if no password */
-       DATA_BLOB nt_pw;                /* .data is Null if no password */
-
-       uint16 acct_ctrl;               /* account flags */
-       uint16 logon_divs;              /* 168 - num of hours in a week */
-       uint32 hours_len;               /* normally 21 */
-       uint8 *hours; _LEN(hours_len)   /* normally 21 bytes (depends on hours_len) */
-
-       uint16 bad_password_count;      /* 0 */
-       uint16 logon_count;             /* 0 */
-       uint32 unknown_3;               /* 0x00ff ffff */
-       uint32 unknown_6;               /* 0x0000 04ec */
-};
-
-GENSTRUCT struct tdbsam2_user_data
-{
-       TALLOC_CTX *mem_ctx;
-
-       uint32 type;
-       uint32 version;
-       uint32 xcounter;                /* counter to be updated at any change */
-
-       SEC_DESC *sec_desc;             /* Security Descriptor */
-
-       DOM_SID *user_sid;              /* The User SID */
-       char *name; _NULLTERM           /* NT User Name */
-       char *description; _NULLTERM    /* Descritpion (Gecos) */
-
-       struct user_sub_structure *uss;
-};
-
-GENSTRUCT struct group_sub_structure
-{
-       uint32 count;                   /* number of sids */
-       DOM_SID *members; _LEN(count)   /* SID array */
-};
-
-GENSTRUCT struct tdbsam2_group_data
-{
-       TALLOC_CTX *mem_ctx;
-
-       uint32 type;
-       uint32 version;
-       uint32 xcounter;                /* counter to be updated at any change */
-
-       SEC_DESC *sec_desc;             /* Security Descriptor */
-
-       DOM_SID *group_sid;             /* The Group SID */
-       char *name; _NULLTERM           /* NT Group Name */
-       char *description; _NULLTERM    /* Descritpion (Gecos) */
-
-       struct group_sub_structure *gss;
-};
-
-GENSTRUCT struct priv_sub_structure
-{
-       LUID_ATTR *privilege;           /* Privilege */
-
-       uint32 count;                   /* number of sids */
-       DOM_SID *members; _LEN(count)   /* SID array */
-};
-
-GENSTRUCT struct tdbsam2_priv_data
-{
-       TALLOC_CTX *mem_ctx;
-
-       uint32 type;
-       uint32 version;
-       uint32 xcounter;                /* counter to be updated at any change */
-
-       DOM_SID *null_sid;
-       char *name; _NULLTERM           /* Privilege Name */
-       char *description; _NULLTERM    /* Descritpion (Gecos) */
-
-       struct priv_sub_structure *pss;
-};
-
-#endif /* TDBSAM2_H */
diff --git a/source/include/tdbsam2_parse_info.h b/source/include/tdbsam2_parse_info.h
deleted file mode 100644 (file)
index f1b2936..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/* This is an automatically generated file - DO NOT EDIT! */
-
-int gen_dump_struct_domain_sub_structure(TALLOC_CTX *mem_ctx, struct parse_string *, const char *, unsigned);
-int gen_parse_struct_domain_sub_structure(TALLOC_CTX *mem_ctx, char *, const char *);
-static const struct parse_struct pinfo_domain_sub_structure[] = {
-{"next_rid", 0, sizeof(uint32), offsetof(struct domain_sub_structure, next_rid), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-int gen_dump_struct_domain_sub_structure(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent) {
-       return gen_dump_struct(mem_ctx, pinfo_domain_sub_structure, p, ptr, indent);
-}
-int gen_parse_struct_domain_sub_structure(TALLOC_CTX *mem_ctx, char *ptr, const char *str) {
-       return gen_parse_struct(mem_ctx, pinfo_domain_sub_structure, ptr, str);
-}
-
-int gen_dump_struct_tdbsam2_domain_data(TALLOC_CTX *mem_ctx, struct parse_string *, const char *, unsigned);
-int gen_parse_struct_tdbsam2_domain_data(TALLOC_CTX *mem_ctx, char *, const char *);
-static const struct parse_struct pinfo_tdbsam2_domain_data[] = {
-{"mem_ctx", 1, sizeof(TALLOC_CTX), offsetof(struct tdbsam2_domain_data, mem_ctx), 0, NULL, 0, gen_dump_TALLOC_CTX, gen_parse_TALLOC_CTX},
-{"type", 0, sizeof(uint32), offsetof(struct tdbsam2_domain_data, type), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"version", 0, sizeof(uint32), offsetof(struct tdbsam2_domain_data, version), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"xcounter", 0, sizeof(uint32), offsetof(struct tdbsam2_domain_data, xcounter), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"sec_desc", 1, sizeof(SEC_DESC), offsetof(struct tdbsam2_domain_data, sec_desc), 0, NULL, 0, gen_dump_SEC_DESC, gen_parse_SEC_DESC},
-{"dom_sid", 1, sizeof(DOM_SID), offsetof(struct tdbsam2_domain_data, dom_sid), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID},
-{"name", 1, sizeof(char), offsetof(struct tdbsam2_domain_data, name), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"description", 1, sizeof(char), offsetof(struct tdbsam2_domain_data, description), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"dss", 1, sizeof(struct domain_sub_structure), offsetof(struct tdbsam2_domain_data, dss), 0, NULL, 0, gen_dump_struct_domain_sub_structure, gen_parse_struct_domain_sub_structure},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-int gen_dump_struct_tdbsam2_domain_data(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent) {
-       return gen_dump_struct(mem_ctx, pinfo_tdbsam2_domain_data, p, ptr, indent);
-}
-int gen_parse_struct_tdbsam2_domain_data(TALLOC_CTX *mem_ctx, char *ptr, const char *str) {
-       return gen_parse_struct(mem_ctx, pinfo_tdbsam2_domain_data, ptr, str);
-}
-
-int gen_dump_struct_user_sub_structure(TALLOC_CTX *mem_ctx, struct parse_string *, const char *, unsigned);
-int gen_parse_struct_user_sub_structure(TALLOC_CTX *mem_ctx, char *, const char *);
-static const struct parse_struct pinfo_user_sub_structure[] = {
-{"group_sid", 1, sizeof(DOM_SID), offsetof(struct user_sub_structure, group_sid), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID},
-{"logon_time", 0, sizeof(NTTIME), offsetof(struct user_sub_structure, logon_time), 0, NULL, 0, gen_dump_NTTIME, gen_parse_NTTIME},
-{"logoff_time", 0, sizeof(NTTIME), offsetof(struct user_sub_structure, logoff_time), 0, NULL, 0, gen_dump_NTTIME, gen_parse_NTTIME},
-{"kickoff_time", 0, sizeof(NTTIME), offsetof(struct user_sub_structure, kickoff_time), 0, NULL, 0, gen_dump_NTTIME, gen_parse_NTTIME},
-{"pass_last_set_time", 0, sizeof(NTTIME), offsetof(struct user_sub_structure, pass_last_set_time), 0, NULL, 0, gen_dump_NTTIME, gen_parse_NTTIME},
-{"pass_can_change_time", 0, sizeof(NTTIME), offsetof(struct user_sub_structure, pass_can_change_time), 0, NULL, 0, gen_dump_NTTIME, gen_parse_NTTIME},
-{"pass_must_change_time", 0, sizeof(NTTIME), offsetof(struct user_sub_structure, pass_must_change_time), 0, NULL, 0, gen_dump_NTTIME, gen_parse_NTTIME},
-{"full_name", 1, sizeof(char), offsetof(struct user_sub_structure, full_name), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"home_dir", 1, sizeof(char), offsetof(struct user_sub_structure, home_dir), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"dir_drive", 1, sizeof(char), offsetof(struct user_sub_structure, dir_drive), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"logon_script", 1, sizeof(char), offsetof(struct user_sub_structure, logon_script), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"profile_path", 1, sizeof(char), offsetof(struct user_sub_structure, profile_path), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"workstations", 1, sizeof(char), offsetof(struct user_sub_structure, workstations), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"unknown_str", 1, sizeof(char), offsetof(struct user_sub_structure, unknown_str), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"munged_dial", 1, sizeof(char), offsetof(struct user_sub_structure, munged_dial), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"lm_pw", 0, sizeof(DATA_BLOB), offsetof(struct user_sub_structure, lm_pw), 0, NULL, 0, gen_dump_DATA_BLOB, gen_parse_DATA_BLOB},
-{"nt_pw", 0, sizeof(DATA_BLOB), offsetof(struct user_sub_structure, nt_pw), 0, NULL, 0, gen_dump_DATA_BLOB, gen_parse_DATA_BLOB},
-{"acct_ctrl", 0, sizeof(uint16), offsetof(struct user_sub_structure, acct_ctrl), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16},
-{"logon_divs", 0, sizeof(uint16), offsetof(struct user_sub_structure, logon_divs), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16},
-{"hours_len", 0, sizeof(uint32), offsetof(struct user_sub_structure, hours_len), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"hours", 1, sizeof(uint8), offsetof(struct user_sub_structure, hours), 0, "hours_len", 0, gen_dump_uint8, gen_parse_uint8},
-{"bad_password_count", 0, sizeof(uint16), offsetof(struct user_sub_structure, bad_password_count), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16},
-{"logon_count", 0, sizeof(uint16), offsetof(struct user_sub_structure, logon_count), 0, NULL, 0, gen_dump_uint16, gen_parse_uint16},
-{"unknown_3", 0, sizeof(uint32), offsetof(struct user_sub_structure, unknown_3), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"unknown_6", 0, sizeof(uint32), offsetof(struct user_sub_structure, unknown_6), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-int gen_dump_struct_user_sub_structure(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent) {
-       return gen_dump_struct(mem_ctx, pinfo_user_sub_structure, p, ptr, indent);
-}
-int gen_parse_struct_user_sub_structure(TALLOC_CTX *mem_ctx, char *ptr, const char *str) {
-       return gen_parse_struct(mem_ctx, pinfo_user_sub_structure, ptr, str);
-}
-
-int gen_dump_struct_tdbsam2_user_data(TALLOC_CTX *mem_ctx, struct parse_string *, const char *, unsigned);
-int gen_parse_struct_tdbsam2_user_data(TALLOC_CTX *mem_ctx, char *, const char *);
-static const struct parse_struct pinfo_tdbsam2_user_data[] = {
-{"mem_ctx", 1, sizeof(TALLOC_CTX), offsetof(struct tdbsam2_user_data, mem_ctx), 0, NULL, 0, gen_dump_TALLOC_CTX, gen_parse_TALLOC_CTX},
-{"type", 0, sizeof(uint32), offsetof(struct tdbsam2_user_data, type), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"version", 0, sizeof(uint32), offsetof(struct tdbsam2_user_data, version), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"xcounter", 0, sizeof(uint32), offsetof(struct tdbsam2_user_data, xcounter), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"sec_desc", 1, sizeof(SEC_DESC), offsetof(struct tdbsam2_user_data, sec_desc), 0, NULL, 0, gen_dump_SEC_DESC, gen_parse_SEC_DESC},
-{"user_sid", 1, sizeof(DOM_SID), offsetof(struct tdbsam2_user_data, user_sid), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID},
-{"name", 1, sizeof(char), offsetof(struct tdbsam2_user_data, name), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"description", 1, sizeof(char), offsetof(struct tdbsam2_user_data, description), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"uss", 1, sizeof(struct user_sub_structure), offsetof(struct tdbsam2_user_data, uss), 0, NULL, 0, gen_dump_struct_user_sub_structure, gen_parse_struct_user_sub_structure},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-int gen_dump_struct_tdbsam2_user_data(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent) {
-       return gen_dump_struct(mem_ctx, pinfo_tdbsam2_user_data, p, ptr, indent);
-}
-int gen_parse_struct_tdbsam2_user_data(TALLOC_CTX *mem_ctx, char *ptr, const char *str) {
-       return gen_parse_struct(mem_ctx, pinfo_tdbsam2_user_data, ptr, str);
-}
-
-int gen_dump_struct_group_sub_structure(TALLOC_CTX *mem_ctx, struct parse_string *, const char *, unsigned);
-int gen_parse_struct_group_sub_structure(TALLOC_CTX *mem_ctx, char *, const char *);
-static const struct parse_struct pinfo_group_sub_structure[] = {
-{"count", 0, sizeof(uint32), offsetof(struct group_sub_structure, count), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"members", 1, sizeof(DOM_SID), offsetof(struct group_sub_structure, members), 0, "count", 0, gen_dump_DOM_SID, gen_parse_DOM_SID},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-int gen_dump_struct_group_sub_structure(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent) {
-       return gen_dump_struct(mem_ctx, pinfo_group_sub_structure, p, ptr, indent);
-}
-int gen_parse_struct_group_sub_structure(TALLOC_CTX *mem_ctx, char *ptr, const char *str) {
-       return gen_parse_struct(mem_ctx, pinfo_group_sub_structure, ptr, str);
-}
-
-int gen_dump_struct_tdbsam2_group_data(TALLOC_CTX *mem_ctx, struct parse_string *, const char *, unsigned);
-int gen_parse_struct_tdbsam2_group_data(TALLOC_CTX *mem_ctx, char *, const char *);
-static const struct parse_struct pinfo_tdbsam2_group_data[] = {
-{"mem_ctx", 1, sizeof(TALLOC_CTX), offsetof(struct tdbsam2_group_data, mem_ctx), 0, NULL, 0, gen_dump_TALLOC_CTX, gen_parse_TALLOC_CTX},
-{"type", 0, sizeof(uint32), offsetof(struct tdbsam2_group_data, type), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"version", 0, sizeof(uint32), offsetof(struct tdbsam2_group_data, version), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"xcounter", 0, sizeof(uint32), offsetof(struct tdbsam2_group_data, xcounter), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"sec_desc", 1, sizeof(SEC_DESC), offsetof(struct tdbsam2_group_data, sec_desc), 0, NULL, 0, gen_dump_SEC_DESC, gen_parse_SEC_DESC},
-{"group_sid", 1, sizeof(DOM_SID), offsetof(struct tdbsam2_group_data, group_sid), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID},
-{"name", 1, sizeof(char), offsetof(struct tdbsam2_group_data, name), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"description", 1, sizeof(char), offsetof(struct tdbsam2_group_data, description), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"gss", 1, sizeof(struct group_sub_structure), offsetof(struct tdbsam2_group_data, gss), 0, NULL, 0, gen_dump_struct_group_sub_structure, gen_parse_struct_group_sub_structure},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-int gen_dump_struct_tdbsam2_group_data(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent) {
-       return gen_dump_struct(mem_ctx, pinfo_tdbsam2_group_data, p, ptr, indent);
-}
-int gen_parse_struct_tdbsam2_group_data(TALLOC_CTX *mem_ctx, char *ptr, const char *str) {
-       return gen_parse_struct(mem_ctx, pinfo_tdbsam2_group_data, ptr, str);
-}
-
-int gen_dump_struct_priv_sub_structure(TALLOC_CTX *mem_ctx, struct parse_string *, const char *, unsigned);
-int gen_parse_struct_priv_sub_structure(TALLOC_CTX *mem_ctx, char *, const char *);
-static const struct parse_struct pinfo_priv_sub_structure[] = {
-{"privilege", 1, sizeof(LUID_ATTR), offsetof(struct priv_sub_structure, privilege), 0, NULL, 0, gen_dump_LUID_ATTR, gen_parse_LUID_ATTR},
-{"count", 0, sizeof(uint32), offsetof(struct priv_sub_structure, count), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"members", 1, sizeof(DOM_SID), offsetof(struct priv_sub_structure, members), 0, "count", 0, gen_dump_DOM_SID, gen_parse_DOM_SID},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-int gen_dump_struct_priv_sub_structure(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent) {
-       return gen_dump_struct(mem_ctx, pinfo_priv_sub_structure, p, ptr, indent);
-}
-int gen_parse_struct_priv_sub_structure(TALLOC_CTX *mem_ctx, char *ptr, const char *str) {
-       return gen_parse_struct(mem_ctx, pinfo_priv_sub_structure, ptr, str);
-}
-
-int gen_dump_struct_tdbsam2_priv_data(TALLOC_CTX *mem_ctx, struct parse_string *, const char *, unsigned);
-int gen_parse_struct_tdbsam2_priv_data(TALLOC_CTX *mem_ctx, char *, const char *);
-static const struct parse_struct pinfo_tdbsam2_priv_data[] = {
-{"mem_ctx", 1, sizeof(TALLOC_CTX), offsetof(struct tdbsam2_priv_data, mem_ctx), 0, NULL, 0, gen_dump_TALLOC_CTX, gen_parse_TALLOC_CTX},
-{"type", 0, sizeof(uint32), offsetof(struct tdbsam2_priv_data, type), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"version", 0, sizeof(uint32), offsetof(struct tdbsam2_priv_data, version), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"xcounter", 0, sizeof(uint32), offsetof(struct tdbsam2_priv_data, xcounter), 0, NULL, 0, gen_dump_uint32, gen_parse_uint32},
-{"null_sid", 1, sizeof(DOM_SID), offsetof(struct tdbsam2_priv_data, null_sid), 0, NULL, 0, gen_dump_DOM_SID, gen_parse_DOM_SID},
-{"name", 1, sizeof(char), offsetof(struct tdbsam2_priv_data, name), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"description", 1, sizeof(char), offsetof(struct tdbsam2_priv_data, description), 0, NULL, FLAG_NULLTERM, gen_dump_char, gen_parse_char},
-{"pss", 1, sizeof(struct priv_sub_structure), offsetof(struct tdbsam2_priv_data, pss), 0, NULL, 0, gen_dump_struct_priv_sub_structure, gen_parse_struct_priv_sub_structure},
-{NULL, 0, 0, 0, 0, NULL, 0, NULL, NULL}};
-
-int gen_dump_struct_tdbsam2_priv_data(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent) {
-       return gen_dump_struct(mem_ctx, pinfo_tdbsam2_priv_data, p, ptr, indent);
-}
-int gen_parse_struct_tdbsam2_priv_data(TALLOC_CTX *mem_ctx, char *ptr, const char *str) {
-       return gen_parse_struct(mem_ctx, pinfo_tdbsam2_priv_data, ptr, str);
-}
-
index b98e5734cbf82ac6ad0873aed84aaebad50b0831..fe2ad5b2fce48ab811600c2f282f6efd7f127607 100644 (file)
@@ -176,7 +176,8 @@ BOOL lang_tdb_init(const char *lang)
 const char *lang_msg(const char *msgid)
 {
        TDB_DATA key, data;
-       char *p, *q, *msgid_quoted;
+       const char *p;
+       char *q, *msgid_quoted;
        int count;
 
        lang_tdb_init(NULL);
index 9d15c6daa028b16fcd2c46488de83bd0d986b0d5..0a6a1fc75d6b42cf28508c1f3cdce2a83fe8ac29 100644 (file)
@@ -192,7 +192,7 @@ static size_t convert_string_internal(charset_t from, charset_t to,
 
        i_len=srclen;
        o_len=destlen;
-       retval = smb_iconv(descriptor,  &inbuf, &i_len, &outbuf, &o_len);
+       retval = smb_iconv(descriptor, (char **)&inbuf, &i_len, &outbuf, &o_len);
        if(retval==(size_t)-1) {
                const char *reason="unknown error";
                switch(errno) {
@@ -426,7 +426,7 @@ convert:
        i_len = srclen;
        o_len = destlen;
        retval = smb_iconv(descriptor,
-                          &inbuf, &i_len,
+                          (char **)&inbuf, &i_len,
                           &outbuf, &o_len);
        if(retval == (size_t)-1)                {
                const char *reason="unknown error";
diff --git a/source/lib/domain_namemap.c b/source/lib/domain_namemap.c
deleted file mode 100644 (file)
index 988f5e5..0000000
+++ /dev/null
@@ -1,1317 +0,0 @@
-/* 
-   Unix SMB/Netbios implementation.
-   Version 1.9.
-   Groupname handling
-   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.
-*/
-
-/* 
- * UNIX gid and Local or Domain SID resolution.  This module resolves
- * only those entries in the map files, it is *NOT* responsible for
- * resolving UNIX groups not listed: that is an entirely different
- * matter, altogether...
- */
-
-/*
- *
- *
-
- format of the file is:
-
- unixname      NT Group name
- unixname      Domain Admins (well-known Domain Group)
- unixname      DOMAIN_NAME\NT Group name
- unixname      OTHER_DOMAIN_NAME\NT Group name
- unixname      DOMAIN_NAME\Domain Admins (well-known Domain Group)
- ....
-
- if the DOMAIN_NAME\ component is left off, then your own domain is assumed.
-
- *
- *
- */
-
-
-#include "includes.h"
-extern int DEBUGLEVEL;
-
-extern fstring global_myworkgroup;
-extern DOM_SID global_member_sid;
-extern fstring global_sam_name;
-extern DOM_SID global_sam_sid;
-extern DOM_SID global_sid_S_1_5_20;
-
-/*******************************************************************
- converts UNIX uid to an NT User RID. NOTE: IS SOMETHING SPECIFIC TO SAMBA
- ********************************************************************/
-static uid_t pwdb_user_rid_to_uid(uint32 user_rid)
-{
-       return ((user_rid & (~RID_TYPE_USER))- 1000)/RID_MULTIPLIER;
-}
-
-/*******************************************************************
- converts NT Group RID to a UNIX uid. NOTE: IS SOMETHING SPECIFIC TO SAMBA
- ********************************************************************/
-static uint32 pwdb_group_rid_to_gid(uint32 group_rid)
-{
-       return ((group_rid & (~RID_TYPE_GROUP))- 1000)/RID_MULTIPLIER;
-}
-
-/*******************************************************************
- converts NT Alias RID to a UNIX uid. NOTE: IS SOMETHING SPECIFIC TO SAMBA
- ********************************************************************/
-static uint32 pwdb_alias_rid_to_gid(uint32 alias_rid)
-{
-       return ((alias_rid & (~RID_TYPE_ALIAS))- 1000)/RID_MULTIPLIER;
-}
-
-/*******************************************************************
- converts NT Group RID to a UNIX uid. NOTE: IS SOMETHING SPECIFIC TO SAMBA
- ********************************************************************/
-static uint32 pwdb_gid_to_group_rid(uint32 gid)
-{
-       uint32 grp_rid = ((((gid)*RID_MULTIPLIER) + 1000) | RID_TYPE_GROUP);
-       return grp_rid;
-}
-
-/******************************************************************
- converts UNIX gid to an NT Alias RID. NOTE: IS SOMETHING SPECIFIC TO SAMBA
- ********************************************************************/
-static uint32 pwdb_gid_to_alias_rid(uint32 gid)
-{
-       uint32 alias_rid = ((((gid)*RID_MULTIPLIER) + 1000) | RID_TYPE_ALIAS);
-       return alias_rid;
-}
-
-/*******************************************************************
- converts UNIX uid to an NT User RID. NOTE: IS SOMETHING SPECIFIC TO SAMBA
- ********************************************************************/
-static uint32 pwdb_uid_to_user_rid(uint32 uid)
-{
-       uint32 user_rid = ((((uid)*RID_MULTIPLIER) + 1000) | RID_TYPE_USER);
-       return user_rid;
-}
-
-/******************************************************************
- converts SID + SID_NAME_USE type to a UNIX id.  the Domain SID is,
- and can only be, our own SID.
- ********************************************************************/
-static BOOL pwdb_sam_sid_to_unixid(DOM_SID *sid, uint8 type, uint32 *id)
-{
-       DOM_SID tmp_sid;
-       uint32 rid;
-
-       sid_copy(&tmp_sid, sid);
-       sid_split_rid(&tmp_sid, &rid);
-       if (!sid_equal(&global_sam_sid, &tmp_sid))
-       {
-               return False;
-       }
-
-       switch (type)
-       {
-               case SID_NAME_USER:
-               {
-                       *id = pwdb_user_rid_to_uid(rid);
-                       return True;
-               }
-               case SID_NAME_ALIAS:
-               {
-                       *id = pwdb_alias_rid_to_gid(rid);
-                       return True;
-               }
-               case SID_NAME_DOM_GRP:
-               case SID_NAME_WKN_GRP:
-               {
-                       *id = pwdb_group_rid_to_gid(rid);
-                       return True;
-               }
-       }
-       return False;
-}
-
-/******************************************************************
- converts UNIX gid + SID_NAME_USE type to a SID.  the Domain SID is,
- and can only be, our own SID.
- ********************************************************************/
-static BOOL pwdb_unixid_to_sam_sid(uint32 id, uint8 type, DOM_SID *sid)
-{
-       sid_copy(sid, &global_sam_sid);
-       switch (type)
-       {
-               case SID_NAME_USER:
-               {
-                       sid_append_rid(sid, pwdb_uid_to_user_rid(id));
-                       return True;
-               }
-               case SID_NAME_ALIAS:
-               {
-                       sid_append_rid(sid, pwdb_gid_to_alias_rid(id));
-                       return True;
-               }
-               case SID_NAME_DOM_GRP:
-               case SID_NAME_WKN_GRP:
-               {
-                       sid_append_rid(sid, pwdb_gid_to_group_rid(id));
-                       return True;
-               }
-       }
-       return False;
-}
-
-/*******************************************************************
- Decides if a RID is a well known RID.
- ********************************************************************/
-static BOOL pwdb_rid_is_well_known(uint32 rid)
-{
-       return (rid < 1000);
-}
-
-/*******************************************************************
- determines a rid's type.  NOTE: THIS IS SOMETHING SPECIFIC TO SAMBA
- ********************************************************************/
-static uint32 pwdb_rid_type(uint32 rid)
-{
-       /* lkcl i understand that NT attaches an enumeration to a RID
-        * such that it can be identified as either a user, group etc
-        * type: SID_ENUM_TYPE.
-        */
-       if (pwdb_rid_is_well_known(rid))
-       {
-               /*
-                * The only well known user RIDs are DOMAIN_USER_RID_ADMIN
-                * and DOMAIN_USER_RID_GUEST.
-                */
-               if (rid == DOMAIN_USER_RID_ADMIN || rid == DOMAIN_USER_RID_GUEST)
-               {
-                       return RID_TYPE_USER;
-               }
-               if (DOMAIN_GROUP_RID_ADMINS <= rid && rid <= DOMAIN_GROUP_RID_GUESTS)
-               {
-                       return RID_TYPE_GROUP;
-               }
-               if (BUILTIN_ALIAS_RID_ADMINS <= rid && rid <= BUILTIN_ALIAS_RID_REPLICATOR)
-               {
-                       return RID_TYPE_ALIAS;
-               }
-       }
-       return (rid & RID_TYPE_MASK);
-}
-
-/*******************************************************************
- checks whether rid is a user rid.  NOTE: THIS IS SOMETHING SPECIFIC TO SAMBA
- ********************************************************************/
-BOOL pwdb_rid_is_user(uint32 rid)
-{
-       return pwdb_rid_type(rid) == RID_TYPE_USER;
-}
-
-/**************************************************************************
- Groupname map functionality. The code loads a groupname map file and
- (currently) loads it into a linked list. This is slow and memory
- hungry, but can be changed into a more efficient storage format
- if the demands on it become excessive.
-***************************************************************************/
-
-typedef struct name_map
-{
-       ubi_slNode next;
-       DOM_NAME_MAP grp;
-
-} name_map_entry;
-
-static ubi_slList groupname_map_list;
-static ubi_slList aliasname_map_list;
-static ubi_slList ntusrname_map_list;
-
-static void delete_name_entry(name_map_entry *gmep)
-{
-       if (gmep->grp.nt_name)
-       {
-               free(gmep->grp.nt_name);
-       }
-       if (gmep->grp.nt_domain)
-       {
-               free(gmep->grp.nt_domain);
-       }
-       if (gmep->grp.unix_name)
-       {
-               free(gmep->grp.unix_name);
-       }
-       free((char*)gmep);
-}
-
-/**************************************************************************
- Delete all the entries in the name map list.
-***************************************************************************/
-
-static void delete_map_list(ubi_slList *map_list)
-{
-       name_map_entry *gmep;
-
-       while ((gmep = (name_map_entry *)ubi_slRemHead(map_list )) != NULL)
-       {
-               delete_name_entry(gmep);
-       }
-}
-
-
-/**************************************************************************
- makes a group sid out of a domain sid and a _unix_ gid.
-***************************************************************************/
-static BOOL make_mydomain_sid(DOM_NAME_MAP *grp, DOM_MAP_TYPE type)
-{
-       int ret = False;
-       fstring sid_str;
-
-       if (!map_domain_name_to_sid(&grp->sid, &(grp->nt_domain)))
-       {
-               DEBUG(0,("make_mydomain_sid: unknown domain %s\n",
-                         grp->nt_domain));
-               return False;
-       }
-
-       if (sid_equal(&grp->sid, &global_sid_S_1_5_20))
-       {
-               /*
-                * only builtin aliases are recognised in S-1-5-20
-                */
-               DEBUG(10,("make_mydomain_sid: group %s in builtin domain\n",
-                          grp->nt_name));
-
-               if (lookup_builtin_alias_name(grp->nt_name, "BUILTIN", &grp->sid, &grp->type) != 0x0)
-               {
-                       DEBUG(0,("unix group %s mapped to an unrecognised BUILTIN domain name %s\n",
-                                 grp->unix_name, grp->nt_name));
-                       return False;
-               }
-               ret = True;
-       }
-       else if (lookup_wk_user_name(grp->nt_name, grp->nt_domain, &grp->sid, &grp->type) == 0x0)
-       {
-               if (type != DOM_MAP_USER)
-               {
-                       DEBUG(0,("well-known NT user %s\\%s listed in wrong map file\n",
-                                 grp->nt_domain, grp->nt_name));
-                       return False;
-               }
-               ret = True;
-       }
-       else if (lookup_wk_group_name(grp->nt_name, grp->nt_domain, &grp->sid, &grp->type) == 0x0)
-       {
-               if (type != DOM_MAP_DOMAIN)
-               {
-                       DEBUG(0,("well-known NT group %s\\%s listed in wrong map file\n",
-                                 grp->nt_domain, grp->nt_name));
-                       return False;
-               }
-               ret = True;
-       }
-       else
-       {
-               switch (type)
-               {
-                       case DOM_MAP_USER:
-                       {
-                               grp->type = SID_NAME_USER;
-                               break;
-                       }
-                       case DOM_MAP_DOMAIN:
-                       {
-                               grp->type = SID_NAME_DOM_GRP;
-                               break;
-                       }
-                       case DOM_MAP_LOCAL:
-                       {
-                               grp->type = SID_NAME_ALIAS;
-                               break;
-                       }
-               }
-
-               ret = pwdb_unixid_to_sam_sid(grp->unix_id, grp->type, &grp->sid);
-       }
-
-       sid_to_string(sid_str, &grp->sid);
-       DEBUG(10,("nt name %s\\%s gid %d mapped to %s\n",
-                  grp->nt_domain, grp->nt_name, grp->unix_id, sid_str));
-       return ret;
-}
-
-/**************************************************************************
- makes a group sid out of an nt domain, nt group name or a unix group name.
-***************************************************************************/
-static BOOL unix_name_to_nt_name_info(DOM_NAME_MAP *map, DOM_MAP_TYPE type)
-{
-       /*
-        * Attempt to get the unix gid_t for this name.
-        */
-
-       DEBUG(5,("unix_name_to_nt_name_info: unix_name:%s\n", map->unix_name));
-
-       if (type == DOM_MAP_USER)
-       {
-               const struct passwd *pwptr = Get_Pwnam(map->unix_name, False);
-               if (pwptr == NULL)
-               {
-                       DEBUG(0,("unix_name_to_nt_name_info: Get_Pwnam for user %s\
-failed. Error was %s.\n", map->unix_name, strerror(errno) ));
-                       return False;
-               }
-
-               map->unix_id = (uint32)pwptr->pw_uid;
-       }
-       else
-       {
-               struct group *gptr = getgrnam(map->unix_name);
-               if (gptr == NULL)
-               {
-                       DEBUG(0,("unix_name_to_nt_name_info: getgrnam for group %s\
-failed. Error was %s.\n", map->unix_name, strerror(errno) ));
-                       return False;
-               }
-
-               map->unix_id = (uint32)gptr->gr_gid;
-       }
-
-       DEBUG(5,("unix_name_to_nt_name_info: unix gid:%d\n", map->unix_id));
-
-       /*
-        * Now map the name to an NT SID+RID.
-        */
-
-       if (map->nt_domain != NULL && !strequal(map->nt_domain, global_sam_name))
-       {
-               /* Must add client-call lookup code here, to 
-                * resolve remote domain's sid and the group's rid,
-                * in that domain.
-                *
-                * NOTE: it is _incorrect_ to put code here that assumes
-                * we are responsible for lookups for foriegn domains' RIDs.
-                *
-                * for foriegn domains for which we are *NOT* the PDC, all
-                * we can be responsible for is the unix gid_t to which
-                * the foriegn SID+rid maps to, on this _local_ machine.  
-                * we *CANNOT* make any short-cuts or assumptions about
-                * RIDs in a foriegn domain.
-                */
-
-               if (!map_domain_name_to_sid(&map->sid, &(map->nt_domain)))
-               {
-                       DEBUG(0,("unix_name_to_nt_name_info: no known sid for %s\n",
-                                 map->nt_domain));
-                       return False;
-               }
-       }
-
-       return make_mydomain_sid(map, type);
-}
-
-static BOOL make_name_entry(name_map_entry **new_ep,
-               char *nt_domain, char *nt_group, char *unix_group,
-               DOM_MAP_TYPE type)
-{
-       /*
-        * Create the list entry and add it onto the list.
-        */
-
-       DEBUG(5,("make_name_entry:%s,%s,%s\n", nt_domain, nt_group, unix_group));
-
-       (*new_ep) = (name_map_entry *)malloc(sizeof(name_map_entry));
-       if ((*new_ep) == NULL)
-       {
-               DEBUG(0,("make_name_entry: malloc fail for name_map_entry.\n"));
-               return False;
-       } 
-
-       ZERO_STRUCTP(*new_ep);
-
-       (*new_ep)->grp.nt_name   = strdup(nt_group  );
-       (*new_ep)->grp.nt_domain = strdup(nt_domain );
-       (*new_ep)->grp.unix_name = strdup(unix_group);
-
-       if ((*new_ep)->grp.nt_name   == NULL ||
-           (*new_ep)->grp.unix_name == NULL)
-       {
-               DEBUG(0,("make_name_entry: malloc fail for names in name_map_entry.\n"));
-               delete_name_entry((*new_ep));
-               return False;
-       }
-
-       /*
-        * look up the group names, make the Group-SID and unix gid
-        */
-       if (!unix_name_to_nt_name_info(&(*new_ep)->grp, type))
-       {
-               delete_name_entry((*new_ep));
-               return False;
-       }
-
-       return True;
-}
-
-/**************************************************************************
- Load a name map file. Sets last accessed timestamp.
-***************************************************************************/
-static ubi_slList *load_name_map(DOM_MAP_TYPE type)
-{
-       static time_t groupmap_file_last_modified = (time_t)0;
-       static time_t aliasmap_file_last_modified = (time_t)0;
-       static time_t ntusrmap_file_last_modified  = (time_t)0;
-       static BOOL initialised_group = False;
-       static BOOL initialised_alias = False;
-       static BOOL initialised_ntusr  = False;
-       char *groupname_map_file = lp_groupname_map();
-       char *aliasname_map_file = lp_aliasname_map();
-       char *ntusrname_map_file = lp_ntusrname_map();
-
-       FILE *fp;
-       char *s;
-       pstring buf;
-       name_map_entry *new_ep;
-
-       time_t *file_last_modified = NULL;
-       int    *initialised = NULL;
-       char   *map_file = NULL;
-       ubi_slList *map_list = NULL;
-
-       switch (type)
-       {
-               case DOM_MAP_DOMAIN:
-               {
-                       file_last_modified = &groupmap_file_last_modified;
-                       initialised        = &initialised_group;
-                       map_file           = groupname_map_file;
-                       map_list           = &groupname_map_list;
-
-                       break;
-               }
-               case DOM_MAP_LOCAL:
-               {
-                       file_last_modified = &aliasmap_file_last_modified;
-                       initialised        = &initialised_alias;
-                       map_file           = aliasname_map_file;
-                       map_list           = &aliasname_map_list;
-
-                       break;
-               }
-               case DOM_MAP_USER:
-               {
-                       file_last_modified = &ntusrmap_file_last_modified;
-                       initialised        = &initialised_ntusr;
-                       map_file           = ntusrname_map_file;
-                       map_list           = &ntusrname_map_list;
-
-                       break;
-               }
-       }
-
-       if (!(*initialised))
-       {
-               DEBUG(10,("initialising map %s\n", map_file));
-               ubi_slInitList(map_list);
-               (*initialised) = True;
-       }
-
-       if (!*map_file)
-       {
-               return map_list;
-       }
-
-       /*
-        * Load the file.
-        */
-
-       fp = open_file_if_modified(map_file, "r", file_last_modified);
-       if (!fp)
-       {
-               return map_list;
-       }
-
-       /*
-        * Throw away any previous list.
-        */
-       delete_map_list(map_list);
-
-       DEBUG(4,("load_name_map: Scanning name map %s\n",map_file));
-
-       while ((s = fgets_slash(buf, sizeof(buf), fp)) != NULL)
-       {
-               pstring unixname;
-               pstring nt_name;
-               fstring nt_domain;
-               fstring ntname;
-               char *p;
-
-               DEBUG(10,("Read line |%s|\n", s));
-
-               memset(nt_name, 0, sizeof(nt_name));
-
-               if (!*s || strchr("#;",*s))
-                       continue;
-
-               if (!next_token(&s,unixname, "\t\n\r=", sizeof(unixname)))
-                       continue;
-
-               if (!next_token(&s,nt_name, "\t\n\r=", sizeof(nt_name)))
-                       continue;
-
-               trim_string(unixname, " ", " ");
-               trim_string(nt_name, " ", " ");
-
-               if (!*nt_name)
-                       continue;
-
-               if (!*unixname)
-                       continue;
-
-               p = strchr(nt_name, '\\');
-
-               if (p == NULL)
-               {
-                       memset(nt_domain, 0, sizeof(nt_domain));
-                       fstrcpy(ntname, nt_name);
-               }
-               else
-               {
-                       *p = 0;
-                       p++;
-                       fstrcpy(nt_domain, nt_name);
-                       fstrcpy(ntname , p);
-               }
-
-               if (make_name_entry(&new_ep, nt_domain, ntname, unixname, type))
-               {
-                       ubi_slAddTail(map_list, (ubi_slNode *)new_ep);
-                       DEBUG(5,("unixname = %s, ntname = %s\\%s type = %d\n",
-                                 new_ep->grp.unix_name,
-                                 new_ep->grp.nt_domain,
-                                 new_ep->grp.nt_name,
-                                 new_ep->grp.type));
-               }
-       }
-
-       DEBUG(10,("load_name_map: Added %ld entries to name map.\n",
-                  ubi_slCount(map_list)));
-
-       fclose(fp);
-
-       return map_list;
-}
-
-static void copy_grp_map_entry(DOM_NAME_MAP *grp, const DOM_NAME_MAP *from)
-{
-       sid_copy(&grp->sid, &from->sid);
-       grp->unix_id   = from->unix_id;
-       grp->nt_name   = from->nt_name;
-       grp->nt_domain = from->nt_domain;
-       grp->unix_name = from->unix_name;
-       grp->type      = from->type;
-}
-
-#if 0
-/***********************************************************
- Lookup unix name.
-************************************************************/
-static BOOL map_unixname(DOM_MAP_TYPE type,
-               char *unixname, DOM_NAME_MAP *grp_info)
-{
-       name_map_entry *gmep;
-       ubi_slList *map_list;
-
-       /*
-        * Initialise and load if not already loaded.
-        */
-       map_list = load_name_map(type);
-
-       for (gmep = (name_map_entry *)ubi_slFirst(map_list);
-            gmep != NULL;
-            gmep = (name_map_entry *)ubi_slNext(gmep ))
-       {
-               if (strequal(gmep->grp.unix_name, unixname))
-               {
-                       copy_grp_map_entry(grp_info, &gmep->grp);
-                       DEBUG(7,("map_unixname: Mapping unix name %s to nt group %s.\n",
-                              gmep->grp.unix_name, gmep->grp.nt_name ));
-                       return True;
-               }
-       }
-
-       return False;
-}
-
-#endif
-
-/***********************************************************
- Lookup nt name.
-************************************************************/
-static BOOL map_ntname(DOM_MAP_TYPE type, char *ntname, char *ntdomain,
-                               DOM_NAME_MAP *grp_info)
-{
-       name_map_entry *gmep;
-       ubi_slList *map_list;
-
-       /*
-        * Initialise and load if not already loaded.
-        */
-       map_list = load_name_map(type);
-
-       for (gmep = (name_map_entry *)ubi_slFirst(map_list);
-            gmep != NULL;
-            gmep = (name_map_entry *)ubi_slNext(gmep ))
-       {
-               if (strequal(gmep->grp.nt_name  , ntname) &&
-                   strequal(gmep->grp.nt_domain, ntdomain))
-               {
-                       copy_grp_map_entry(grp_info, &gmep->grp);
-                       DEBUG(7,("map_ntname: Mapping unix name %s to nt name %s.\n",
-                              gmep->grp.unix_name, gmep->grp.nt_name ));
-                       return True;
-               }
-       }
-
-       return False;
-}
-
-
-/***********************************************************
- Lookup by SID
-************************************************************/
-static BOOL map_sid(DOM_MAP_TYPE type,
-               DOM_SID *psid, DOM_NAME_MAP *grp_info)
-{
-       name_map_entry *gmep;
-       ubi_slList *map_list;
-
-       /*
-        * Initialise and load if not already loaded.
-        */
-       map_list = load_name_map(type);
-
-       for (gmep = (name_map_entry *)ubi_slFirst(map_list);
-            gmep != NULL;
-            gmep = (name_map_entry *)ubi_slNext(gmep ))
-       {
-               if (sid_equal(&gmep->grp.sid, psid))
-               {
-                       copy_grp_map_entry(grp_info, &gmep->grp);
-                       DEBUG(7,("map_sid: Mapping unix name %s to nt name %s.\n",
-                              gmep->grp.unix_name, gmep->grp.nt_name ));
-                       return True;
-               }
-       }
-
-       return False;
-}
-
-/***********************************************************
- Lookup by gid_t.
-************************************************************/
-static BOOL map_unixid(DOM_MAP_TYPE type, uint32 unix_id, DOM_NAME_MAP *grp_info)
-{
-       name_map_entry *gmep;
-       ubi_slList *map_list;
-
-       /*
-        * Initialise and load if not already loaded.
-        */
-       map_list = load_name_map(type);
-
-       for (gmep = (name_map_entry *)ubi_slFirst(map_list);
-            gmep != NULL;
-            gmep = (name_map_entry *)ubi_slNext(gmep ))
-       {
-               fstring sid_str;
-               sid_to_string(sid_str, &gmep->grp.sid);
-               DEBUG(10,("map_unixid: enum entry unix group %s %d nt %s %s\n",
-                              gmep->grp.unix_name, gmep->grp.unix_id, gmep->grp.nt_name, sid_str));
-               if (gmep->grp.unix_id == unix_id)
-               {
-                       copy_grp_map_entry(grp_info, &gmep->grp);
-                       DEBUG(7,("map_unixid: Mapping unix name %s to nt name %s type %d\n",
-                              gmep->grp.unix_name, gmep->grp.nt_name, gmep->grp.type));
-                       return True;
-               }
-       }
-
-       return False;
-}
-
-/***********************************************************
- *
- * Call four functions to resolve unix group ids and either
- * local group SIDs or domain group SIDs listed in the local group
- * or domain group map files.
- *
- * Note that it is *NOT* the responsibility of these functions to
- * resolve entries that are not in the map files.
- *
- * Any SID can be in the map files (i.e from any Domain).
- *
- ***********************************************************/
-
-#if 0
-
-/***********************************************************
- Lookup a UNIX Group entry by name.
-************************************************************/
-BOOL map_unix_group_name(char *group_name, DOM_NAME_MAP *grp_info)
-{
-       return map_unixname(DOM_MAP_DOMAIN, group_name, grp_info);
-}
-
-/***********************************************************
- Lookup a UNIX Alias entry by name.
-************************************************************/
-BOOL map_unix_alias_name(char *alias_name, DOM_NAME_MAP *grp_info)
-{
-       return map_unixname(DOM_MAP_LOCAL, alias_name, grp_info);
-}
-
-/***********************************************************
- Lookup an Alias name entry 
-************************************************************/
-BOOL map_nt_alias_name(char *ntalias_name, char *nt_domain, DOM_NAME_MAP *grp_info)
-{
-       return map_ntname(DOM_MAP_LOCAL, ntalias_name, nt_domain, grp_info);
-}
-
-/***********************************************************
- Lookup a Group entry
-************************************************************/
-BOOL map_nt_group_name(char *ntgroup_name, char *nt_domain, DOM_NAME_MAP *grp_info)
-{
-       return map_ntname(DOM_MAP_DOMAIN, ntgroup_name, nt_domain, grp_info);
-}
-
-#endif
-
-/***********************************************************
- Lookup a Username entry by name.
-************************************************************/
-static BOOL map_nt_username(char *nt_name, char *nt_domain, DOM_NAME_MAP *grp_info)
-{
-       return map_ntname(DOM_MAP_USER, nt_name, nt_domain, grp_info);
-}
-
-/***********************************************************
- Lookup a Username entry by SID.
-************************************************************/
-static BOOL map_username_sid(DOM_SID *sid, DOM_NAME_MAP *grp_info)
-{
-       return map_sid(DOM_MAP_USER, sid, grp_info);
-}
-
-/***********************************************************
- Lookup a Username SID entry by uid.
-************************************************************/
-static BOOL map_username_uid(uid_t gid, DOM_NAME_MAP *grp_info)
-{
-       return map_unixid(DOM_MAP_USER, (uint32)gid, grp_info);
-}
-
-/***********************************************************
- Lookup an Alias SID entry by name.
-************************************************************/
-BOOL map_alias_sid(DOM_SID *psid, DOM_NAME_MAP *grp_info)
-{
-       return map_sid(DOM_MAP_LOCAL, psid, grp_info);
-}
-
-/***********************************************************
- Lookup a Group entry by sid.
-************************************************************/
-BOOL map_group_sid(DOM_SID *psid, DOM_NAME_MAP *grp_info)
-{
-       return map_sid(DOM_MAP_DOMAIN, psid, grp_info);
-}
-
-/***********************************************************
- Lookup an Alias SID entry by gid_t.
-************************************************************/
-static BOOL map_alias_gid(gid_t gid, DOM_NAME_MAP *grp_info)
-{
-       return map_unixid(DOM_MAP_LOCAL, (uint32)gid, grp_info);
-}
-
-/***********************************************************
- Lookup a Group SID entry by gid_t.
-************************************************************/
-static BOOL map_group_gid( gid_t gid, DOM_NAME_MAP *grp_info)
-{
-       return map_unixid(DOM_MAP_DOMAIN, (uint32)gid, grp_info);
-}
-
-
-/************************************************************************
- Routine to look up User details by UNIX name
-*************************************************************************/
-BOOL lookupsmbpwnam(const char *unix_usr_name, DOM_NAME_MAP *grp)
-{
-       uid_t uid;
-       DEBUG(10,("lookupsmbpwnam: unix user name %s\n", unix_usr_name));
-       if (nametouid(unix_usr_name, &uid))
-       {
-               return lookupsmbpwuid(uid, grp);
-       }
-       else
-       {
-               return False;
-       }
-}
-
-/************************************************************************
- Routine to look up a remote nt name
-*************************************************************************/
-static BOOL lookup_remote_ntname(const char *ntname, DOM_SID *sid, uint8 *type)
-{
-       struct cli_state cli;
-       POLICY_HND lsa_pol;
-       fstring srv_name;
-       extern struct ntuser_creds *usr_creds;
-       struct ntuser_creds usr;
-
-       BOOL res3 = True;
-       BOOL res4 = True;
-       uint32 num_sids;
-       DOM_SID *sids;
-       uint8 *types;
-       char *names[1];
-
-       usr_creds = &usr;
-
-       ZERO_STRUCT(usr);
-       pwd_set_nullpwd(&usr.pwd);
-
-       DEBUG(5,("lookup_remote_ntname: %s\n", ntname));
-
-       if (!cli_connect_serverlist(&cli, lp_passwordserver()))
-       {
-               return False;
-       }
-
-       names[0] = ntname;
-
-       fstrcpy(srv_name, "\\\\");
-       fstrcat(srv_name, cli.desthost);
-       strupper(srv_name);
-
-       /* lookup domain controller; receive a policy handle */
-       res3 = res3 ? lsa_open_policy( srv_name,
-                               &lsa_pol, True) : False;
-
-       /* send lsa lookup sids call */
-       res4 = res3 ? lsa_lookup_names( &lsa_pol,
-                                      1, names, 
-                                      &sids, &types, &num_sids) : False;
-
-       res3 = res3 ? lsa_close(&lsa_pol) : False;
-
-       if (res4 && res3 && sids != NULL && types != NULL)
-       {
-               sid_copy(sid, &sids[0]);
-               *type = types[0];
-       }
-       else
-       {
-               res3 = False;
-       }
-       if (types != NULL)
-       {
-               free(types);
-       }
-       
-       if (sids != NULL)
-       {
-               free(sids);
-       }
-       
-       return res3 && res4;
-}
-
-/************************************************************************
- Routine to look up a remote nt name
-*************************************************************************/
-static BOOL get_sid_and_type(const char *fullntname, uint8 expected_type,
-                               DOM_NAME_MAP *gmep)
-{
-       /*
-        * check with the PDC to see if it owns the name.  if so,
-        * the SID is resolved with the PDC database.
-        */
-
-       if (lp_server_role() == ROLE_DOMAIN_MEMBER)
-       {
-               if (lookup_remote_ntname(fullntname, &gmep->sid, &gmep->type))
-               {
-                       if (sid_front_equal(&gmep->sid, &global_member_sid) &&
-                           strequal(gmep->nt_domain, global_myworkgroup) &&
-                           gmep->type == expected_type)
-                       {
-                               return True;
-                       }
-                       return False;
-               }
-       }
-
-       /*
-        * ... otherwise, it's one of ours.  map the sid ourselves,
-        * which can only happen in our own SAM database.
-        */
-
-       if (!strequal(gmep->nt_domain, global_sam_name))
-       {
-               return False;
-       }
-       if (!pwdb_unixid_to_sam_sid(gmep->unix_id, gmep->type, &gmep->sid))
-       {
-               return False;
-       }
-
-       return True;
-}
-
-/*
- * used by lookup functions below
- */
-
-static fstring nt_name;
-static fstring unix_name;
-static fstring nt_domain;
-
-/*************************************************************************
- looks up a uid, returns User Information.  
-*************************************************************************/
-BOOL lookupsmbpwuid(uid_t uid, DOM_NAME_MAP *gmep)
-{
-       DEBUG(10,("lookupsmbpwuid: unix uid %d\n", uid));
-       if (map_username_uid(uid, gmep))
-       {
-               return True;
-       }
-#if 0
-       if (lp_server_role() != ROLE_DOMAIN_NONE)
-#endif
-       {
-               gmep->nt_name   = nt_name;
-               gmep->unix_name = unix_name;
-               gmep->nt_domain = nt_domain;
-
-               gmep->unix_id = (uint32)uid;
-
-               /*
-                * ok, assume it's one of ours.  then double-check it
-                * if we are a member of a domain
-                */
-
-               gmep->type = SID_NAME_USER;
-               fstrcpy(gmep->nt_name, uidtoname(uid));
-               fstrcpy(gmep->unix_name, gmep->nt_name);
-
-               /*
-                * here we should do a LsaLookupNames() call
-                * to check the status of the name with the PDC.
-                * if the PDC know nothing of the name, it's ours.
-                */
-
-               if (lp_server_role() == ROLE_DOMAIN_MEMBER)
-               {
-#if 0
-                       lsa_lookup_names(global_myworkgroup, gmep->nt_name, &gmep->sid...);
-#endif
-               }
-
-               /*
-                * ok, it's one of ours.
-                */
-
-               gmep->nt_domain = global_sam_name;
-               pwdb_unixid_to_sam_sid(gmep->unix_id, gmep->type, &gmep->sid);
-
-               return True;
-       }
-
-       /* oops. */
-
-       return False;
-}
-
-/*************************************************************************
- looks up by NT name, returns User Information.  
-*************************************************************************/
-BOOL lookupsmbpwntnam(const char *fullntname, DOM_NAME_MAP *gmep)
-{
-       DEBUG(10,("lookupsmbpwntnam: nt user name %s\n", fullntname));
-
-       if (!split_domain_name(fullntname, nt_domain, nt_name))
-       {
-               return False;
-       }
-
-       if (map_nt_username(nt_name, nt_domain, gmep))
-       {
-               return True;
-       }
-       if (lp_server_role() != ROLE_DOMAIN_NONE)
-       {
-               uid_t uid;
-               gmep->nt_name   = nt_name;
-               gmep->unix_name = unix_name;
-               gmep->nt_domain = nt_domain;
-
-               /*
-                * ok, it's one of ours.  we therefore "create" an nt user named
-                * after the unix user.  this is the point where "appliance mode"
-                * should get its teeth in, as unix users won't really exist,
-                * they will only be numbers...
-                */
-
-               gmep->type = SID_NAME_USER;
-               fstrcpy(gmep->unix_name, gmep->nt_name);
-               if (!nametouid(gmep->unix_name, &uid))
-               {
-                       return False;
-               }
-               gmep->unix_id = (uint32)uid;
-
-               return get_sid_and_type(fullntname, gmep->type, gmep);
-       }
-
-       /* oops. */
-
-       return False;
-}
-
-/*************************************************************************
- looks up by RID, returns User Information.  
-*************************************************************************/
-BOOL lookupsmbpwsid(DOM_SID *sid, DOM_NAME_MAP *gmep)
-{
-       fstring sid_str;
-       sid_to_string(sid_str, sid);
-       DEBUG(10,("lookupsmbpwsid: nt sid %s\n", sid_str));
-
-       if (map_username_sid(sid, gmep))
-       {
-               return True;
-       }
-       if (lp_server_role() != ROLE_DOMAIN_NONE)
-       {
-               gmep->nt_name   = nt_name;
-               gmep->unix_name = unix_name;
-               gmep->nt_domain = nt_domain;
-
-               /*
-                * here we should do a LsaLookupNames() call
-                * to check the status of the name with the PDC.
-                * if the PDC know nothing of the name, it's ours.
-                */
-
-               if (lp_server_role() == ROLE_DOMAIN_MEMBER)
-               {
-#if 0
-                       if (lookup_remote_sid(global_myworkgroup, gmep->sid, gmep->nt_name, gmep->nt_domain...);
-#endif
-               }
-
-               /*
-                * ok, it's one of ours.  we therefore "create" an nt user named
-                * after the unix user.  this is the point where "appliance mode"
-                * should get its teeth in, as unix users won't really exist,
-                * they will only be numbers...
-                */
-
-               gmep->type = SID_NAME_USER;
-               sid_copy(&gmep->sid, sid);
-               if (!pwdb_sam_sid_to_unixid(&gmep->sid, gmep->type, &gmep->unix_id))
-               {
-                       return False;
-               }
-               fstrcpy(gmep->nt_name, uidtoname((uid_t)gmep->unix_id));
-               fstrcpy(gmep->unix_name, gmep->nt_name);
-               gmep->nt_domain = global_sam_name;
-
-               return True;
-       }
-
-       /* oops. */
-
-       return False;
-}
-
-/************************************************************************
- Routine to look up group / alias / well-known group RID by UNIX name
-*************************************************************************/
-BOOL lookupsmbgrpnam(const char *unix_grp_name, DOM_NAME_MAP *grp)
-{
-       gid_t gid;
-       DEBUG(10,("lookupsmbgrpnam: unix user group %s\n", unix_grp_name));
-       if (nametogid(unix_grp_name, &gid))
-       {
-               return lookupsmbgrpgid(gid, grp);
-       }
-       else
-       {
-               return False;
-       }
-}
-
-/*************************************************************************
- looks up a SID, returns name map entry
-*************************************************************************/
-BOOL lookupsmbgrpsid(DOM_SID *sid, DOM_NAME_MAP *gmep)
-{
-       fstring sid_str;
-       sid_to_string(sid_str, sid);
-       DEBUG(10,("lookupsmbgrpsid: nt sid %s\n", sid_str));
-
-       if (map_alias_sid(sid, gmep))
-       {
-               return True;
-       }
-       if (map_group_sid(sid, gmep))
-       {
-               return True;
-       }
-       if (lp_server_role() != ROLE_DOMAIN_NONE)
-       {
-               gmep->nt_name   = nt_name;
-               gmep->unix_name = unix_name;
-               gmep->nt_domain = nt_domain;
-
-               /*
-                * here we should do a LsaLookupNames() call
-                * to check the status of the name with the PDC.
-                * if the PDC know nothing of the name, it's ours.
-                */
-
-               if (lp_server_role() == ROLE_DOMAIN_MEMBER)
-               {
-#if 0
-                       lsa_lookup_sids(global_myworkgroup, gmep->sid, gmep->nt_name, gmep->nt_domain...);
-#endif
-               }
-
-               /*
-                * ok, it's one of ours.  we therefore "create" an nt group or
-                * alias name named after the unix group.  this is the point
-                * where "appliance mode" should get its teeth in, as unix
-                * groups won't really exist, they will only be numbers...
-                */
-
-               /* name is not explicitly mapped
-                * with map files or the PDC
-                * so we are responsible for it...
-                */
-
-               if (lp_server_role() == ROLE_DOMAIN_MEMBER)
-               {
-                       /* ... as a LOCAL group. */
-                       gmep->type = SID_NAME_ALIAS;
-               }
-               else
-               {
-                       /* ... as a DOMAIN group. */
-                       gmep->type = SID_NAME_DOM_GRP;
-               }
-
-               sid_copy(&gmep->sid, sid);
-               if (!pwdb_sam_sid_to_unixid(&gmep->sid, gmep->type, &gmep->unix_id))
-               {
-                       return False;
-               }
-               fstrcpy(gmep->nt_name, gidtoname((gid_t)gmep->unix_id));
-               fstrcpy(gmep->unix_name, gmep->nt_name);
-               gmep->nt_domain = global_sam_name;
-
-               return True;
-       }
-
-       /* oops */
-       return False;
-}
-
-/*************************************************************************
- looks up a gid, returns RID and type local, domain or well-known domain group
-*************************************************************************/
-BOOL lookupsmbgrpgid(gid_t gid, DOM_NAME_MAP *gmep)
-{
-       DEBUG(10,("lookupsmbgrpgid: unix gid %d\n", (int)gid));
-       if (map_alias_gid(gid, gmep))
-       {
-               return True;
-       }
-       if (map_group_gid(gid, gmep))
-       {
-               return True;
-       }
-       if (lp_server_role() != ROLE_DOMAIN_NONE)
-       {
-               gmep->nt_name   = nt_name;
-               gmep->unix_name = unix_name;
-               gmep->nt_domain = nt_domain;
-
-               gmep->unix_id = (uint32)gid;
-
-               /*
-                * here we should do a LsaLookupNames() call
-                * to check the status of the name with the PDC.
-                * if the PDC know nothing of the name, it's ours.
-                */
-
-               if (lp_server_role() == ROLE_DOMAIN_MEMBER)
-               {
-#if 0
-                       if (lsa_lookup_names(global_myworkgroup, gmep->nt_name, &gmep->sid...);
-                       {
-                               return True;
-                       }
-#endif
-               }
-
-               /*
-                * ok, it's one of ours.  we therefore "create" an nt group or
-                * alias name named after the unix group.  this is the point
-                * where "appliance mode" should get its teeth in, as unix
-                * groups won't really exist, they will only be numbers...
-                */
-
-               /* name is not explicitly mapped
-                * with map files or the PDC
-                * so we are responsible for it...
-                */
-
-               if (lp_server_role() == ROLE_DOMAIN_MEMBER)
-               {
-                       /* ... as a LOCAL group. */
-                       gmep->type = SID_NAME_ALIAS;
-               }
-               else
-               {
-                       /* ... as a DOMAIN group. */
-                       gmep->type = SID_NAME_DOM_GRP;
-               }
-               fstrcpy(gmep->nt_name, gidtoname(gid));
-               fstrcpy(gmep->unix_name, gmep->nt_name);
-
-               return get_sid_and_type(gmep->nt_name, gmep->type, gmep);
-       }
-
-       /* oops */
-       return False;
-}
-
diff --git a/source/lib/genparser.c b/source/lib/genparser.c
deleted file mode 100644 (file)
index 7476b5d..0000000
+++ /dev/null
@@ -1,783 +0,0 @@
-/*
-   Copyright (C) Andrew Tridgell <genstruct@tridgell.net> 2002
-   
-   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.
-*/
-
-/*
-  automatic marshalling/unmarshalling system for C structures
-*/
-
-#include "includes.h"
-
-/* see if a range of memory is all zero. Used to prevent dumping of zero elements */
-static int all_zero(const char *ptr, unsigned size)
-{
-       int i;
-       if (!ptr) return 1;
-       for (i=0;i<size;i++) {
-               if (ptr[i]) return 0;
-       }
-       return 1;
-}
-
-/* encode a buffer of bytes into a escaped string */
-static char *encode_bytes(TALLOC_CTX *mem_ctx, const char *ptr, unsigned len)
-{
-       const char *hexdig = "0123456789abcdef";
-       char *ret, *p;
-       unsigned i;
-       ret = talloc(mem_ctx, len*3 + 1); /* worst case size */
-       if (!ret) return NULL;
-       for (p=ret,i=0;i<len;i++) {
-               if (isalnum(ptr[i]) || isspace(ptr[i]) ||
-                   (ispunct(ptr[i]) && !strchr("\\{}", ptr[i]))) {
-                       *p++ = ptr[i];
-               } else {
-                       unsigned char c = *(unsigned char *)(ptr+i);
-                       if (c == 0 && all_zero(ptr+i, len-i)) break;
-                       p[0] = '\\';
-                       p[1] = hexdig[c>>4];
-                       p[2] = hexdig[c&0xF];
-                       p += 3;
-               }
-       }
-
-       *p = 0;
-
-       return ret;
-}
-
-/* decode an escaped string from encode_bytes() into a buffer */
-static char *decode_bytes(TALLOC_CTX *mem_ctx, const char *s, unsigned *len) 
-{
-       char *ret, *p;
-       unsigned i;
-       int slen = strlen(s) + 1;
-
-       ret = talloc(mem_ctx, slen); /* worst case length */
-       if (!ret)
-               return NULL;
-       memset(ret, 0, slen);
-
-       if (*s == '{') s++;
-
-       for (p=ret,i=0;s[i];i++) {
-               if (s[i] == '}') {
-                       break;
-               } else if (s[i] == '\\') {
-                       unsigned v;
-                       if (sscanf(&s[i+1], "%02x", &v) != 1 || v > 255) {
-                               return NULL;
-                       }
-                       *(unsigned char *)p = v;
-                       p++;
-                       i += 2;
-               } else {
-                       *p++ = s[i];
-               }
-       }
-       *p = 0;
-
-       (*len) = (unsigned)(p - ret);
-       
-       return ret;
-}
-
-/* the add*() functions deal with adding things to a struct
-   parse_string */
-
-/* allocate more space if needed */
-static int addgen_alloc(TALLOC_CTX *mem_ctx, struct parse_string *p, int n)
-{
-       if (p->length + n <= p->allocated) return 0;
-       p->allocated = p->length + n + 200;
-       p->s = talloc_realloc(mem_ctx, p->s, p->allocated);
-       if (!p->s) {
-               errno = ENOMEM;
-               return -1;
-       }
-       return 0;
-}
-
-/* add a character to the buffer */
-static int addchar(TALLOC_CTX *mem_ctx, struct parse_string *p, char c)
-{
-       if (addgen_alloc(mem_ctx, p, 2) != 0) {
-               return -1;
-       }
-       p->s[p->length++] = c;
-       p->s[p->length] = 0;
-       return 0;
-}
-
-/* add a string to the buffer */
-int addstr(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *s)
-{
-       int len = strlen(s);
-       if (addgen_alloc(mem_ctx, p, len+1) != 0) {
-               return -1;
-       }
-       memcpy(p->s + p->length, s, len+1);
-       p->length += len;
-       return 0;
-}
-
-/* add a string to the buffer with a tab prefix */
-static int addtabbed(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *s, unsigned indent)
-{
-       int len = strlen(s);
-       if (addgen_alloc(mem_ctx, p, indent+len+1) != 0) {
-               return -1;
-       }
-       while (indent--) {
-               p->s[p->length++] = '\t';
-       }
-       memcpy(p->s + p->length, s, len+1);
-       p->length += len;
-       return 0;
-}
-
-/* note! this can only be used for results up to 60 chars wide! */
-int addshort(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *fmt, ...)
-{
-       char buf[60];
-       int n;
-       va_list ap;
-       va_start(ap, fmt);
-       n = vsnprintf(buf, sizeof(buf), fmt, ap);
-       va_end(ap);
-       if (addgen_alloc(mem_ctx, p, n + 1) != 0) {
-               return -1;
-       }
-       if (n != 0) {
-               memcpy(p->s + p->length, buf, n);
-       }
-       p->length += n;
-       p->s[p->length] = 0;
-       return 0;
-}
-
-/* 
-   this is here to make it easier for people to write dump functions 
-   for their own types
- */
-int gen_addgen(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *fmt, ...)
-{
-       char *buf = NULL;
-       int n;
-       va_list ap;
-       va_start(ap, fmt);
-       n = vasprintf(&buf, fmt, ap);
-       va_end(ap);
-       if (addgen_alloc(mem_ctx, p, n + 1) != 0) {
-               if (buf) free(buf);
-               return -1;
-       }
-       if (n != 0) {
-               memcpy(p->s + p->length, buf, n);
-       }
-       p->length += n;
-       p->s[p->length] = 0;
-       if (buf) free(buf);
-       return 0;
-}
-
-/* dump a enumerated type */
-int gen_dump_enum(TALLOC_CTX *mem_ctx,
-                 const struct enum_struct *einfo,
-                 struct parse_string *p, 
-                 const char *ptr,
-                 unsigned indent)
-{
-       unsigned v = *(unsigned *)ptr;
-       int i;
-       for (i=0;einfo[i].name;i++) {
-               if (v == einfo[i].value) {
-                       addstr(mem_ctx, p, einfo[i].name);
-                       return 0;
-               }
-       }
-       /* hmm, maybe we should just fail? */
-       return gen_dump_unsigned(mem_ctx, p, ptr, indent);
-}
-
-/* dump a single non-array element, hanlding struct and enum */
-static int gen_dump_one(TALLOC_CTX *mem_ctx,
-                       struct parse_string *p, 
-                       const struct parse_struct *pinfo,
-                       const char *ptr,
-                       unsigned indent)
-{
-       if (pinfo->dump_fn == gen_dump_char && pinfo->ptr_count == 1) {
-               char *s = encode_bytes(mem_ctx, ptr, strlen(ptr));
-               if (addchar(mem_ctx, p,'{') ||
-                   addstr(mem_ctx, p, s) ||
-                   addstr(mem_ctx, p, "}")) {
-                       return -1;
-               }
-               return 0;
-       }
-
-       return pinfo->dump_fn(mem_ctx, p, ptr, indent);
-}
-
-/* handle dumping of an array of arbitrary type */
-static int gen_dump_array(TALLOC_CTX *mem_ctx,
-                         struct parse_string *p,
-                         const struct parse_struct *pinfo, 
-                         const char *ptr,
-                         int array_len,
-                         int indent)
-{
-       int i, count=0;
-
-       /* special handling of fixed length strings */
-       if (array_len != 0 && 
-           pinfo->ptr_count == 0 &&
-           pinfo->dump_fn == gen_dump_char) {
-               char *s = encode_bytes(mem_ctx, ptr, array_len);
-               if (!s) return -1;
-               if (addtabbed(mem_ctx, p, pinfo->name, indent) ||
-                   addstr(mem_ctx, p, " = {") ||
-                   addstr(mem_ctx, p, s) ||
-                   addstr(mem_ctx, p, "}\n")) {
-                       return -1;
-               }
-               return 0;
-       }
-
-       for (i=0;i<array_len;i++) {
-               const char *p2 = ptr;
-               unsigned size = pinfo->size;
-
-               /* generic pointer dereference */
-               if (pinfo->ptr_count) {
-                       p2 = *(const char **)ptr;
-                       size = sizeof(void *);
-               }
-               
-               if ((count || pinfo->ptr_count) && 
-                   !(pinfo->flags & FLAG_ALWAYS) &&
-                   all_zero(ptr, size)) {
-                       ptr += size;
-                       continue;
-               }
-               if (count == 0) {
-                       if (addtabbed(mem_ctx, p, pinfo->name, indent) ||
-                           addshort(mem_ctx, p, " = %u:", i)) {
-                               return -1;
-                       }
-               } else {
-                       if (addshort(mem_ctx, p, ", %u:", i) != 0) {
-                               return -1;
-                       }
-               }
-               if (gen_dump_one(mem_ctx, p, pinfo, p2, indent) != 0) {
-                       return -1;
-               }
-               ptr += size;
-               count++;
-       }
-       if (count) {
-               return addstr(mem_ctx, p, "\n");
-       }
-       return 0;
-}
-
-/* find a variable by name in a loaded structure and return its value
-   as an integer. Used to support dynamic arrays */
-static int find_var(const struct parse_struct *pinfo,
-                   const char *data,
-                   const char *var)
-{
-       int i;
-       const char *ptr;
-
-       /* this allows for constant lengths */
-       if (isdigit(*var)) {
-               return atoi(var);
-       }
-
-       for (i=0;pinfo[i].name;i++) {
-               if (strcmp(pinfo[i].name, var) == 0) break;
-       }
-       if (!pinfo[i].name) return -1;
-
-       ptr = data + pinfo[i].offset;
-
-       switch (pinfo[i].size) {
-       case sizeof(int):
-               return *(int *)ptr;
-       case sizeof(char):
-               return *(char *)ptr;
-       }
-
-       return -1;
-}
-
-
-int gen_dump_struct(TALLOC_CTX *mem_ctx,
-                   const struct parse_struct *pinfo,
-                   struct parse_string *p, 
-                   const char *ptr, 
-                   unsigned indent)
-{
-       char *s = gen_dump(mem_ctx, pinfo, ptr, indent+1);
-       if (!s) return -1;
-       if (addstr(mem_ctx, p, "{\n") || 
-           addstr(mem_ctx, p, s) || 
-           addtabbed(mem_ctx, p, "}", indent)) {
-               return -1;
-       }
-       return 0;
-}
-
-static int gen_dump_string(TALLOC_CTX *mem_ctx,
-                          struct parse_string *p,
-                          const struct parse_struct *pinfo, 
-                          const char *data, 
-                          unsigned indent)
-{
-       const char *ptr = *(char **)data;
-       char *s = encode_bytes(mem_ctx, ptr, strlen(ptr));
-       if (addtabbed(mem_ctx, p, pinfo->name, indent) ||
-           addstr(mem_ctx, p, " = ") ||
-           addchar(mem_ctx, p, '{') ||
-           addstr(mem_ctx, p, s) ||
-           addstr(mem_ctx, p, "}\n")) {
-               return -1;
-       }
-       return 0;
-}
-
-/* 
-   find the length of a nullterm array
-*/
-static int len_nullterm(const char *ptr, int size, int array_len)
-{
-       int len;
-
-       if (size == 1) {
-               len = strnlen(ptr, array_len);
-       } else {
-               for (len=0; len < array_len; len++) {
-                       if (all_zero(ptr+len*size, size)) break;
-               }
-       }
-
-       if (len == 0) len = 1;
-
-       return len;
-}
-
-
-/* the generic dump routine. Scans the parse information for this structure
-   and processes it recursively */
-char *gen_dump(TALLOC_CTX *mem_ctx,
-              const struct parse_struct *pinfo, 
-              const char *data, 
-              unsigned indent)
-{
-       struct parse_string p;
-       int i;
-       
-       p.length = 0;
-       p.allocated = 0;
-       p.s = NULL;
-
-       if (addstr(mem_ctx, &p, "") != 0) {
-               return NULL;
-       }
-       
-       for (i=0;pinfo[i].name;i++) {
-               const char *ptr = data + pinfo[i].offset;
-               unsigned size = pinfo[i].size;
-
-               if (pinfo[i].ptr_count) {
-                       size = sizeof(void *);
-               }
-
-               /* special handling for array types */
-               if (pinfo[i].array_len) {
-                       unsigned len = pinfo[i].array_len;
-                       if (pinfo[i].flags & FLAG_NULLTERM) {
-                               len = len_nullterm(ptr, size, len);
-                       }
-                       if (gen_dump_array(mem_ctx, &p, &pinfo[i], ptr, 
-                                          len, indent)) {
-                               goto failed;
-                       }
-                       continue;
-               }
-
-               /* and dynamically sized arrays */
-               if (pinfo[i].dynamic_len) {
-                       int len = find_var(pinfo, data, pinfo[i].dynamic_len);
-                       struct parse_struct p2 = pinfo[i];
-                       if (len < 0) {
-                               goto failed;
-                       }
-                       if (len > 0) {
-                               if (pinfo[i].flags & FLAG_NULLTERM) {
-                                       len = len_nullterm(*(char **)ptr, 
-                                                          pinfo[i].size, len);
-                               }
-                               p2.ptr_count--;
-                               p2.dynamic_len = NULL;
-                               if (gen_dump_array(mem_ctx, &p, &p2,
-                                                  *(char **)ptr, 
-                                                  len, indent) != 0) {
-                                       goto failed;
-                               }
-                       }
-                       continue;
-               }
-
-               /* don't dump zero elements */
-               if (!(pinfo[i].flags & FLAG_ALWAYS) && all_zero(ptr, size)) continue;
-
-               /* assume char* is a null terminated string */
-               if (pinfo[i].size == 1 && pinfo[i].ptr_count == 1 &&
-                   pinfo[i].dump_fn == gen_dump_char) {
-                       if (gen_dump_string(mem_ctx, &p, &pinfo[i], ptr, indent) != 0) {
-                               goto failed;
-                       }
-                       continue;
-               }
-
-               /* generic pointer dereference */
-               if (pinfo[i].ptr_count) {
-                       ptr = *(const char **)ptr;
-               }
-
-               if (addtabbed(mem_ctx, &p, pinfo[i].name, indent) ||
-                   addstr(mem_ctx, &p, " = ") ||
-                   gen_dump_one(mem_ctx, &p, &pinfo[i], ptr, indent) ||
-                   addstr(mem_ctx, &p, "\n")) {
-                       goto failed;
-               }
-       }
-       return p.s;
-
-failed:
-       return NULL;
-}
-
-/* search for a character in a string, skipping over sections within
-   matching braces */
-static char *match_braces(char *s, char c)
-{
-       int depth = 0;
-       while (*s) {
-               switch (*s) {
-               case '}':
-                       depth--;
-                       break;
-               case '{':
-                       depth++;
-                       break;
-               }
-               if (depth == 0 && *s == c) {
-                       return s;
-               }
-               s++;
-       }
-       return s;
-}
-
-/* parse routine for enumerated types */
-int gen_parse_enum(TALLOC_CTX *mem_ctx,
-                  const struct enum_struct *einfo, 
-                  char *ptr, 
-                  const char *str)
-{
-       unsigned v;
-       int i;
-
-       if (isdigit(*str)) {
-               if (sscanf(str, "%u", &v) != 1) {
-                       errno = EINVAL;
-                       return -1;
-               }
-               *(unsigned *)ptr = v;
-               return 0;
-       }
-
-       for (i=0;einfo[i].name;i++) {
-               if (strcmp(einfo[i].name, str) == 0) {
-                       *(unsigned *)ptr = einfo[i].value;
-                       return 0;
-               }
-       }
-
-       /* unknown enum value?? */
-       return -1;
-}
-
-
-/* parse all base types */
-static int gen_parse_base(TALLOC_CTX *mem_ctx,
-                         const struct parse_struct *pinfo, 
-                         char *ptr, 
-                         const char *str)
-{
-       if (pinfo->parse_fn == gen_parse_char && pinfo->ptr_count==1) {
-               unsigned len;
-               char *s = decode_bytes(mem_ctx, str, &len);
-               if (!s) return -1;
-               *(char **)ptr = s;
-               return 0;
-       }
-
-       if (pinfo->ptr_count) {
-               unsigned size = pinfo->ptr_count>1?sizeof(void *):pinfo->size;
-               struct parse_struct p2 = *pinfo;
-               *(void **)ptr = talloc(mem_ctx, size);
-               if (! *(void **)ptr) {
-                       return -1;
-               }
-               memset(*(void **)ptr, 0, size);
-               ptr = *(char **)ptr;
-               p2.ptr_count--;
-               return gen_parse_base(mem_ctx, &p2, ptr, str);
-       }
-
-       return pinfo->parse_fn(mem_ctx, ptr, str);
-}
-
-/* parse a generic array */
-static int gen_parse_array(TALLOC_CTX *mem_ctx,
-                          const struct parse_struct *pinfo, 
-                          char *ptr, 
-                          const char *str,
-                          int array_len)
-{
-       char *p, *p2;
-       unsigned size = pinfo->size;
-
-       /* special handling of fixed length strings */
-       if (array_len != 0 && 
-           pinfo->ptr_count == 0 &&
-           pinfo->dump_fn == gen_dump_char) {
-               unsigned len = 0;
-               char *s = decode_bytes(mem_ctx, str, &len);
-               if (!s || (len > array_len)) return -1;
-               memset(ptr, 0, array_len);
-               memcpy(ptr, s, len);
-               return 0;
-       }
-
-       if (pinfo->ptr_count) {
-               size = sizeof(void *);
-       }
-
-       while (*str) {
-               unsigned idx;
-               int done;
-
-               idx = atoi(str);
-               p = strchr(str,':');
-               if (!p) break;
-               p++;
-               p2 = match_braces(p, ',');
-               done = (*p2 != ',');
-               *p2 = 0;
-
-               if (*p == '{') {
-                       p++;
-                       p[strlen(p)-1] = 0;
-               }
-
-               if (gen_parse_base(mem_ctx, pinfo, ptr + idx*size, p) != 0) {
-                       return -1;
-               }
-
-               if (done) break;
-               str = p2+1;
-       }
-
-       return 0;
-}
-
-/* parse one element, hanlding dynamic and static arrays */
-static int gen_parse_one(TALLOC_CTX *mem_ctx,
-                        const struct parse_struct *pinfo, 
-                        const char *name, 
-                        char *data, 
-                        const char *str)
-{
-       int i;
-       for (i=0;pinfo[i].name;i++) {
-               if (strcmp(pinfo[i].name, name) == 0) {
-                       break;
-               }
-       }
-       if (pinfo[i].name == NULL) {
-               return 0;
-       }
-
-       if (pinfo[i].array_len) {
-               return gen_parse_array(mem_ctx, &pinfo[i],
-                                      data+pinfo[i].offset, 
-                                      str, pinfo[i].array_len);
-       }
-
-       if (pinfo[i].dynamic_len) {
-               int len = find_var(pinfo, data, pinfo[i].dynamic_len);
-               if (len < 0) {
-                       errno = EINVAL;
-                       return -1;
-               }
-               if (len > 0) {
-                       struct parse_struct p2 = pinfo[i];
-                       char *ptr;
-                       unsigned size = pinfo[i].ptr_count>1?sizeof(void*):pinfo[i].size;
-                       ptr = talloc(mem_ctx, len*size);
-                       if (!ptr) {
-                               errno = ENOMEM;
-                               return -1;
-                       }
-                       memset(ptr, 0, len*size);
-                       *((char **)(data + pinfo[i].offset)) = ptr;
-                       p2.ptr_count--;
-                       p2.dynamic_len = NULL;
-                       return gen_parse_array(mem_ctx, &p2, ptr, str, len);
-               }
-               return 0;
-       }
-
-       return gen_parse_base(mem_ctx, &pinfo[i], data + pinfo[i].offset, str);
-}
-
-int gen_parse_struct(TALLOC_CTX * mem_ctx, const struct parse_struct *pinfo, char *ptr, const char *str)
-{
-       return gen_parse(mem_ctx, pinfo, ptr, str);
-}
-
-/* the main parse routine */
-int gen_parse(TALLOC_CTX *mem_ctx, const struct parse_struct *pinfo, char *data, const char *s)
-{
-       char *str, *s0;
-       
-       s0 = talloc_strdup(mem_ctx, s);
-       str = s0;
-
-       while (*str) {
-               char *p;
-               char *name;
-               char *value;
-
-               /* skip leading whitespace */
-               while (isspace(*str)) str++;
-
-               p = strchr(str, '=');
-               if (!p) break;
-               value = p+1;
-               while (p > str && isspace(*(p-1))) {
-                       p--;
-               }
-
-               *p = 0;
-               name = str;
-
-               while (isspace(*value)) value++;
-
-               if (*value == '{') {
-                       str = match_braces(value, '}');
-                       value++;
-               } else {
-                       str = match_braces(value, '\n');
-               }
-
-               *str++ = 0;
-               
-               if (gen_parse_one(mem_ctx, pinfo, name, data, value) != 0) {
-                       return -1;
-               }
-       }
-
-       return 0;
-}
-
-
-
-/* for convenience supply some standard dumpers and parsers here */
-
-int gen_parse_char(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       *(unsigned char *)ptr = atoi(str);
-       return 0;
-}
-
-int gen_parse_int(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       *(int *)ptr = atoi(str);
-       return 0;
-}
-
-int gen_parse_unsigned(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       *(unsigned *)ptr = strtoul(str, NULL, 10);
-       return 0;
-}
-
-int gen_parse_time_t(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       *(time_t *)ptr = strtoul(str, NULL, 10);
-       return 0;
-}
-
-int gen_parse_double(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       *(double *)ptr = atof(str);
-       return 0;
-}
-
-int gen_parse_float(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       *(float *)ptr = atof(str);
-       return 0;
-}
-
-int gen_dump_char(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "%u", *(unsigned char *)(ptr));
-}
-
-int gen_dump_int(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "%d", *(int *)(ptr));
-}
-
-int gen_dump_unsigned(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "%u", *(unsigned *)(ptr));
-}
-
-int gen_dump_time_t(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "%u", *(time_t *)(ptr));
-}
-
-int gen_dump_double(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "%lg", *(double *)(ptr));
-}
-
-int gen_dump_float(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "%g", *(float *)(ptr));
-}
diff --git a/source/lib/genparser_samba.c b/source/lib/genparser_samba.c
deleted file mode 100644 (file)
index 8f469a4..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
-   Copyright (C) Andrew Tridgell <genstruct@tridgell.net> 2002
-   Copyright (C) Simo Sorce <idra@samba.org> 2002
-   
-   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 "genparser_samba.h"
-
-/* PARSE functions */
-
-int gen_parse_uint8(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       *(uint8 *)ptr = atoi(str);
-       return 0;
-}
-
-int gen_parse_uint16(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       *(uint16 *)ptr = atoi(str);
-       return 0;
-}
-
-int gen_parse_uint32(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       *(uint32 *)ptr = strtoul(str, NULL, 10);
-       return 0;
-}
-
-int gen_parse_NTTIME(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       if(sscanf(str, "%u,%u", &(((NTTIME *)(ptr))->high), &(((NTTIME *)(ptr))->low)) != 2) {
-               errno = EINVAL;
-               return -1;
-       }
-       return 0;
-}
-
-int gen_parse_DOM_SID(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       if(!string_to_sid((DOM_SID *)ptr, str)) return -1;
-       return 0;
-}
-
-int gen_parse_SEC_ACCESS(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       ((SEC_ACCESS *)ptr)->mask = strtoul(str, NULL, 10);
-       return 0;
-}
-
-int gen_parse_GUID(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       int info[UUID_FLAT_SIZE];
-       int i;
-       char *sc;
-               char *p;
-       char *m;
-
-       m = strdup(str);
-       if (!m) return -1;
-       sc = m;
-       
-       memset(info, 0, sizeof(info));
-       for (i = 0; i < UUID_FLAT_SIZE; i++) {
-               p = strchr(sc, ',');
-               if (p != NULL) p = '\0';
-               info[i] = atoi(sc);
-               if (p != NULL) sc = p + 1;
-       }
-       free(m);
-               
-       for (i = 0; i < UUID_FLAT_SIZE; i++) {
-               ((UUID_FLAT *)ptr)->info[i] = info[i];
-       }
-               
-       return 0;
-}
-
-int gen_parse_SEC_ACE(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       return gen_parse_struct(mem_ctx, pinfo_security_ace_info, ptr, str);
-}
-
-int gen_parse_SEC_ACL(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       return gen_parse_struct(mem_ctx, pinfo_security_acl_info, ptr, str);
-}
-
-int gen_parse_SEC_DESC(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       return gen_parse_struct(mem_ctx, pinfo_security_descriptor_info, ptr, str);
-}
-
-int gen_parse_LUID_ATTR(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       return gen_parse_struct(mem_ctx, pinfo_luid_attr_info, ptr, str);
-}
-
-int gen_parse_LUID(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       if(sscanf(str, "%u,%u", &(((LUID *)(ptr))->high), &(((LUID *)(ptr))->low)) != 2) {
-               errno = EINVAL;
-               return -1;
-       }
-       return 0;
-}
-
-int gen_parse_DATA_BLOB(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       return gen_parse_struct(mem_ctx, pinfo_data_blob_info, ptr, str);
-}
-
-int gen_parse_TALLOC_CTX(TALLOC_CTX *mem_ctx, char *ptr, const char *str)
-{
-       (TALLOC_CTX *)ptr = NULL;
-       return 0;
-}
-
-/* DUMP functions */
-
-int gen_dump_uint8(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "%u", *(uint8 *)(ptr));
-}
-
-int gen_dump_uint16(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "%u", *(uint16 *)(ptr));
-}
-
-int gen_dump_uint32(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "%u", *(uint32 *)(ptr));
-}
-
-int gen_dump_NTTIME(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       uint32 low, high;
-
-       high = ((NTTIME *)(ptr))->high;
-       low = ((NTTIME *)(ptr))->low;
-       return addshort(mem_ctx, p, "%u,%u", high, low);
-}
-
-int gen_dump_DOM_SID(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       fstring sidstr;
-
-       sid_to_string(sidstr, (DOM_SID *)ptr);
-       return addstr(mem_ctx, p, sidstr);
-}
-
-int gen_dump_SEC_ACCESS(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "%u", ((SEC_ACCESS *)ptr)->mask);
-}
-
-int gen_dump_GUID(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       int i, r;
-
-       for (i = 0; i < (UUID_FLAT_SIZE - 1); i++) {
-               if (!(r = addshort(mem_ctx, p, "%d,", ((UUID_FLAT *)ptr)->info[i]))) return r;
-       }
-       return addshort(mem_ctx, p, "%d", ((UUID_FLAT *)ptr)->info[i]);
-}
-
-int gen_dump_SEC_ACE(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return gen_dump_struct(mem_ctx, pinfo_security_ace_info, p, ptr, indent);
-}
-
-int gen_dump_SEC_ACL(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return gen_dump_struct(mem_ctx, pinfo_security_acl_info, p, ptr, indent);
-}
-
-int gen_dump_SEC_DESC(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return gen_dump_struct(mem_ctx, pinfo_security_descriptor_info, p, ptr, indent);
-}
-
-int gen_dump_LUID_ATTR(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return gen_dump_struct(mem_ctx, pinfo_luid_attr_info, p, ptr, indent);
-}
-
-int gen_dump_LUID(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       uint32 low, high;
-
-       high = ((LUID *)(ptr))->high;
-       low = ((LUID *)(ptr))->low;
-       return addshort(mem_ctx, p, "%u,%u", high, low);
-}
-
-int gen_dump_DATA_BLOB(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return gen_dump_struct(mem_ctx, pinfo_data_blob_info, p, ptr, indent);
-}
-
-int gen_dump_TALLOC_CTX(TALLOC_CTX *mem_ctx, struct parse_string *p, const char *ptr, unsigned indent)
-{
-       return addshort(mem_ctx, p, "TALLOC_CTX");
-}
index 8c54c970433ce9e04c8571be74c3a6a9f5e528be..6769f1288a23e580d95a5d343ad012917203099f 100644 (file)
@@ -48,8 +48,8 @@ void sec_ace_copy(SEC_ACE *ace_dest, SEC_ACE *ace_src)
        ace_dest->size  = ace_src->size;
        ace_dest->info.mask = ace_src->info.mask;
        ace_dest->obj_flags = ace_src->obj_flags;
-       memcpy(&ace_dest->obj_guid, &ace_src->obj_guid, sizeof(struct uuid));
-       memcpy(&ace_dest->inh_guid, &ace_src->inh_guid, sizeof(struct uuid));
+       memcpy(&ace_dest->obj_guid, &ace_src->obj_guid, GUID_SIZE);
+       memcpy(&ace_dest->inh_guid, &ace_src->inh_guid, GUID_SIZE);     
        sid_copy(&ace_dest->trustee, &ace_src->trustee);
 }
 
index ac35ed2a033aae71b958985b256f244bdb8e52e9..fe34cfb852e136767e79e0203df0e191160b0a6e 100644 (file)
@@ -1153,6 +1153,181 @@ NTSTATUS smbldap_init(TALLOC_CTX *mem_ctx, const char *location, struct smbldap_
        return NT_STATUS_OK;
 }
 
+/**********************************************************************
+ Add the sambaDomain to LDAP, so we don't have to search for this stuff
+ again.  This is a once-add operation for now.
+
+ TODO:  Add other attributes, and allow modification.
+*********************************************************************/
+static NTSTATUS add_new_domain_info(struct smbldap_state *ldap_state, 
+                                    const char *domain_name) 
+{
+       fstring sid_string;
+       fstring algorithmic_rid_base_string;
+       pstring filter, dn;
+       LDAPMod **mods = NULL;
+       int rc;
+       int ldap_op;
+       LDAPMessage *result = NULL;
+       int num_result;
+       char **attr_list;
+       uid_t u_low, u_high;
+       gid_t g_low, g_high;
+       uint32 rid_low, rid_high;
+
+       slprintf (filter, sizeof (filter) - 1, "(&(%s=%s)(objectclass=%s))", 
+                 get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN), 
+                 domain_name, LDAP_OBJ_DOMINFO);
+
+       attr_list = get_attr_list( dominfo_attr_list );
+       rc = smbldap_search_suffix(ldap_state, filter, attr_list, &result);
+       free_attr_list( attr_list );
+
+       if (rc != LDAP_SUCCESS) {
+               return NT_STATUS_UNSUCCESSFUL;
+       }
+
+       num_result = ldap_count_entries(ldap_state->ldap_struct, result);
+       
+       if (num_result > 1) {
+               DEBUG (0, ("More than domain with that name exists: bailing out!\n"));
+               ldap_msgfree(result);
+               return NT_STATUS_UNSUCCESSFUL;
+       }
+       
+       /* Check if we need to add an entry */
+       DEBUG(3,("Adding new domain\n"));
+       ldap_op = LDAP_MOD_ADD;
+
+       pstr_sprintf(dn, "%s=%s,%s", get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN),
+               domain_name, lp_ldap_suffix());
+
+       /* Free original search */
+       ldap_msgfree(result);
+
+       /* make the changes - the entry *must* not already have samba attributes */
+       smbldap_set_mod(&mods, LDAP_MOD_ADD, get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN), 
+               domain_name);
+
+       /* If we don't have an entry, then ask secrets.tdb for what it thinks.  
+          It may choose to make it up */
+
+       sid_to_string(sid_string, get_global_sam_sid());
+       smbldap_set_mod(&mods, LDAP_MOD_ADD, get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOM_SID), sid_string);
+
+       slprintf(algorithmic_rid_base_string, sizeof(algorithmic_rid_base_string) - 1, "%i", algorithmic_rid_base());
+       smbldap_set_mod(&mods, LDAP_MOD_ADD, get_attr_key2string(dominfo_attr_list, LDAP_ATTR_ALGORITHMIC_RID_BASE), 
+                       algorithmic_rid_base_string);
+       smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectclass", LDAP_OBJ_DOMINFO);
+       
+       /* add the sambaNext[User|Group]Rid attributes if the idmap ranges are set.
+          TODO: fix all the places where the line between idmap and normal operations
+          needed by smbd gets fuzzy   --jerry 2003-08-11                              */
+       
+       if ( lp_idmap_uid(&u_low, &u_high) && lp_idmap_gid(&g_low, &g_high)
+               && get_free_rid_range(&rid_low, &rid_high) ) 
+       {
+               fstring rid_str;
+               
+               fstr_sprintf( rid_str, "%i", rid_high|USER_RID_TYPE );
+               DEBUG(10,("setting next available user rid [%s]\n", rid_str));
+               smbldap_set_mod(&mods, LDAP_MOD_ADD, 
+                       get_attr_key2string(dominfo_attr_list, LDAP_ATTR_NEXT_USERRID), 
+                       rid_str);
+                       
+               fstr_sprintf( rid_str, "%i", rid_high|GROUP_RID_TYPE );
+               DEBUG(10,("setting next available group rid [%s]\n", rid_str));
+               smbldap_set_mod(&mods, LDAP_MOD_ADD, 
+                       get_attr_key2string(dominfo_attr_list, LDAP_ATTR_NEXT_GROUPRID), 
+                       rid_str);
+               
+        }
+
+
+       switch(ldap_op)
+       {
+       case LDAP_MOD_ADD: 
+               rc = smbldap_add(ldap_state, dn, mods);
+               break;
+       case LDAP_MOD_REPLACE: 
+               rc = smbldap_modify(ldap_state, dn, mods);
+               break;
+       default:        
+               DEBUG(0,("Wrong LDAP operation type: %d!\n", ldap_op));
+               return NT_STATUS_INVALID_PARAMETER;
+       }
+       
+       if (rc!=LDAP_SUCCESS) {
+               char *ld_error = NULL;
+               ldap_get_option(ldap_state->ldap_struct, LDAP_OPT_ERROR_STRING, &ld_error);
+               DEBUG(1,("failed to %s domain dn= %s with: %s\n\t%s\n",
+                      ldap_op == LDAP_MOD_ADD ? "add" : "modify",
+                      dn, ldap_err2string(rc),
+                      ld_error?ld_error:"unknown"));
+               SAFE_FREE(ld_error);
+
+               ldap_mods_free(mods, True);
+               return NT_STATUS_UNSUCCESSFUL;
+       }
+
+       DEBUG(2,("added: domain = %s in the LDAP database\n", domain_name));
+       ldap_mods_free(mods, True);
+       return NT_STATUS_OK;
+}
+
+/**********************************************************************
+Search for the domain info entry
+*********************************************************************/
+NTSTATUS smbldap_search_domain_info(struct smbldap_state *ldap_state,
+                                    LDAPMessage ** result, const char *domain_name,
+                                    BOOL try_add)
+{
+       NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
+       pstring filter;
+       int rc;
+       char **attr_list;
+       int count;
+
+       pstr_sprintf(filter, "(&(objectClass=%s)(%s=%s))",
+               LDAP_OBJ_DOMINFO,
+               get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN), 
+               domain_name);
+
+       DEBUG(2, ("Searching for:[%s]\n", filter));
+
+
+       attr_list = get_attr_list( dominfo_attr_list );
+       rc = smbldap_search_suffix(ldap_state, filter, attr_list , result);
+       free_attr_list( attr_list );
+
+       if (rc != LDAP_SUCCESS) {
+               DEBUG(2,("Problem during LDAPsearch: %s\n", ldap_err2string (rc)));
+               DEBUG(2,("Query was: %s, %s\n", lp_ldap_suffix(), filter));
+       } else if (ldap_count_entries(ldap_state->ldap_struct, *result) < 1) {
+               DEBUG(3, ("Got no domain info entries for domain\n"));
+               ldap_msgfree(*result);
+               *result = NULL;
+               if (try_add && NT_STATUS_IS_OK(ret = add_new_domain_info(ldap_state, domain_name))) {
+                       return smbldap_search_domain_info(ldap_state, result, domain_name, False);
+               } 
+               else {
+                       DEBUG(0, ("Adding domain info for %s failed with %s\n", 
+                               domain_name, nt_errstr(ret)));
+                       return ret;
+               }
+       } else if ((count = ldap_count_entries(ldap_state->ldap_struct, *result)) > 1) {
+               DEBUG(0, ("Got too many (%d) domain info entries for domain %s\n",
+                         count, domain_name));
+               ldap_msgfree(*result);
+               *result = NULL;
+               return ret;
+       } else {
+               return NT_STATUS_OK;
+       }
+       
+       return ret;
+}
+
 /*******************************************************************
  Return a copy of the DN for a LDAPMessage. Convert from utf8 to CH_UNIX.
 ********************************************************************/
diff --git a/source/lib/smbldap_util.c b/source/lib/smbldap_util.c
deleted file mode 100644 (file)
index f609759..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/* 
-   Unix SMB/CIFS mplementation.
-   LDAP protocol helper functions for SAMBA
-   Copyright (C) Jean Fran├žois Micouleau       1998
-   Copyright (C) Gerald Carter                 2001-2003
-   Copyright (C) Shahms King                   2001
-   Copyright (C) Andrew Bartlett               2002-2003
-   Copyright (C) Stefan (metze) Metzmacher     2002-2003
-    
-   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 "smbldap.h"
-
-/**********************************************************************
- Add the sambaDomain to LDAP, so we don't have to search for this stuff
- again.  This is a once-add operation for now.
-
- TODO:  Add other attributes, and allow modification.
-*********************************************************************/
-static NTSTATUS add_new_domain_info(struct smbldap_state *ldap_state, 
-                                    const char *domain_name) 
-{
-       fstring sid_string;
-       fstring algorithmic_rid_base_string;
-       pstring filter, dn;
-       LDAPMod **mods = NULL;
-       int rc;
-       int ldap_op;
-       LDAPMessage *result = NULL;
-       int num_result;
-       char **attr_list;
-       uid_t u_low, u_high;
-       gid_t g_low, g_high;
-       uint32 rid_low, rid_high;
-
-       slprintf (filter, sizeof (filter) - 1, "(&(%s=%s)(objectclass=%s))", 
-                 get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN), 
-                 domain_name, LDAP_OBJ_DOMINFO);
-
-       attr_list = get_attr_list( dominfo_attr_list );
-       rc = smbldap_search_suffix(ldap_state, filter, attr_list, &result);
-       free_attr_list( attr_list );
-
-       if (rc != LDAP_SUCCESS) {
-               return NT_STATUS_UNSUCCESSFUL;
-       }
-
-       num_result = ldap_count_entries(ldap_state->ldap_struct, result);
-       
-       if (num_result > 1) {
-               DEBUG (0, ("More than domain with that name exists: bailing out!\n"));
-               ldap_msgfree(result);
-               return NT_STATUS_UNSUCCESSFUL;
-       }
-       
-       /* Check if we need to add an entry */
-       DEBUG(3,("Adding new domain\n"));
-       ldap_op = LDAP_MOD_ADD;
-
-       pstr_sprintf(dn, "%s=%s,%s", get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN),
-               domain_name, lp_ldap_suffix());
-
-       /* Free original search */
-       ldap_msgfree(result);
-
-       /* make the changes - the entry *must* not already have samba attributes */
-       smbldap_set_mod(&mods, LDAP_MOD_ADD, get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN), 
-               domain_name);
-
-       /* If we don't have an entry, then ask secrets.tdb for what it thinks.  
-          It may choose to make it up */
-
-       sid_to_string(sid_string, get_global_sam_sid());
-       smbldap_set_mod(&mods, LDAP_MOD_ADD, get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOM_SID), sid_string);
-
-       slprintf(algorithmic_rid_base_string, sizeof(algorithmic_rid_base_string) - 1, "%i", algorithmic_rid_base());
-       smbldap_set_mod(&mods, LDAP_MOD_ADD, get_attr_key2string(dominfo_attr_list, LDAP_ATTR_ALGORITHMIC_RID_BASE), 
-                       algorithmic_rid_base_string);
-       smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectclass", LDAP_OBJ_DOMINFO);
-       
-       /* add the sambaNext[User|Group]Rid attributes if the idmap ranges are set.
-          TODO: fix all the places where the line between idmap and normal operations
-          needed by smbd gets fuzzy   --jerry 2003-08-11                              */
-       
-       if ( lp_idmap_uid(&u_low, &u_high) && lp_idmap_gid(&g_low, &g_high)
-               && get_free_rid_range(&rid_low, &rid_high) ) 
-       {
-               fstring rid_str;
-               
-               fstr_sprintf( rid_str, "%i", rid_high|USER_RID_TYPE );
-               DEBUG(10,("setting next available user rid [%s]\n", rid_str));
-               smbldap_set_mod(&mods, LDAP_MOD_ADD, 
-                       get_attr_key2string(dominfo_attr_list, LDAP_ATTR_NEXT_USERRID), 
-                       rid_str);
-                       
-               fstr_sprintf( rid_str, "%i", rid_high|GROUP_RID_TYPE );
-               DEBUG(10,("setting next available group rid [%s]\n", rid_str));
-               smbldap_set_mod(&mods, LDAP_MOD_ADD, 
-                       get_attr_key2string(dominfo_attr_list, LDAP_ATTR_NEXT_GROUPRID), 
-                       rid_str);
-               
-        }
-
-
-       switch(ldap_op)
-       {
-       case LDAP_MOD_ADD: 
-               rc = smbldap_add(ldap_state, dn, mods);
-               break;
-       case LDAP_MOD_REPLACE: 
-               rc = smbldap_modify(ldap_state, dn, mods);
-               break;
-       default:        
-               DEBUG(0,("Wrong LDAP operation type: %d!\n", ldap_op));
-               return NT_STATUS_INVALID_PARAMETER;
-       }
-       
-       if (rc!=LDAP_SUCCESS) {
-               char *ld_error = NULL;
-               ldap_get_option(ldap_state->ldap_struct, LDAP_OPT_ERROR_STRING, &ld_error);
-               DEBUG(1,("failed to %s domain dn= %s with: %s\n\t%s\n",
-                      ldap_op == LDAP_MOD_ADD ? "add" : "modify",
-                      dn, ldap_err2string(rc),
-                      ld_error?ld_error:"unknown"));
-               SAFE_FREE(ld_error);
-
-               ldap_mods_free(mods, True);
-               return NT_STATUS_UNSUCCESSFUL;
-       }
-
-       DEBUG(2,("added: domain = %s in the LDAP database\n", domain_name));
-       ldap_mods_free(mods, True);
-       return NT_STATUS_OK;
-}
-
-/**********************************************************************
-Search for the domain info entry
-*********************************************************************/
-NTSTATUS smbldap_search_domain_info(struct smbldap_state *ldap_state,
-                                    LDAPMessage ** result, const char *domain_name,
-                                    BOOL try_add)
-{
-       NTSTATUS ret = NT_STATUS_UNSUCCESSFUL;
-       pstring filter;
-       int rc;
-       char **attr_list;
-       int count;
-
-       pstr_sprintf(filter, "(&(objectClass=%s)(%s=%s))",
-               LDAP_OBJ_DOMINFO,
-               get_attr_key2string(dominfo_attr_list, LDAP_ATTR_DOMAIN), 
-               domain_name);
-
-       DEBUG(2, ("Searching for:[%s]\n", filter));
-
-
-       attr_list = get_attr_list( dominfo_attr_list );
-       rc = smbldap_search_suffix(ldap_state, filter, attr_list , result);
-       free_attr_list( attr_list );
-
-       if (rc != LDAP_SUCCESS) {
-               DEBUG(2,("Problem during LDAPsearch: %s\n", ldap_err2string (rc)));
-               DEBUG(2,("Query was: %s, %s\n", lp_ldap_suffix(), filter));
-       } else if (ldap_count_entries(ldap_state->ldap_struct, *result) < 1) {
-               DEBUG(3, ("Got no domain info entries for domain\n"));
-               ldap_msgfree(*result);
-               *result = NULL;
-               if (try_add && NT_STATUS_IS_OK(ret = add_new_domain_info(ldap_state, domain_name))) {
-                       return smbldap_search_domain_info(ldap_state, result, domain_name, False);
-               } 
-               else {
-                       DEBUG(0, ("Adding domain info for %s failed with %s\n", 
-                               domain_name, nt_errstr(ret)));
-                       return ret;
-               }
-       } else if ((count = ldap_count_entries(ldap_state->ldap_struct, *result)) > 1) {
-               DEBUG(0, ("Got too many (%d) domain info entries for domain %s\n",
-                         count, domain_name));
-               ldap_msgfree(*result);
-               *result = NULL;
-               return ret;
-       } else {
-               return NT_STATUS_OK;
-       }
-       
-       return ret;
-}
-
index ad5de38581dbe1c4fdd5bf386aaa0f8c7214e628..0cdf693bb91c84a1ec7689c0f32ed5521a4b11d1 100644 (file)
@@ -51,9 +51,9 @@ int main(void)
        }
 
        for (i = 0; i < NCTX; i++) {
-               printf("talloc@%p %-40s %dkB\n", ctx[i],
+               printf("talloc@%p %-40s %ldkB\n", ctx[i],
                       talloc_pool_name(ctx[i]),
-                      talloc_pool_size(ctx[i]) >> 10);
+                      (unsigned long)talloc_pool_size(ctx[i]) >> 10);
        }
 
        printf("%s", talloc_describe_all(ctx[0]));
index 635ede9be2278d7bcdadef73e57ad09e778870fc..faca2cba879b78f62782bfd2fae3d2413350dc8e 100644 (file)
@@ -465,10 +465,9 @@ void unix_to_nt_time_abs(NTTIME *nt, time_t t)
        nt->low=~nt->low;
 }
 
-
 /****************************************************************************
-take an NTTIME structure, containing high / low time.  convert to unix time.
-lkclXXXX this may need 2 SIVALs not a memcpy.  we'll see...
+take a Unix time and convert to an NTTIME structure and place in buffer 
+pointed to by p.
 ****************************************************************************/
 void put_long_date(char *p,time_t t)
 {
index 2c0bd7978597664d5663151cab826c4c42d0f734..50bbb4c72c61348f7e3457320035017a1aa8ac19 100644 (file)
@@ -617,6 +617,23 @@ char *sid_binstring(const DOM_SID *sid)
        return s;
 }
 
+
+/*****************************************************************
+ Print a GUID structure for debugging.
+*****************************************************************/
+
+void print_guid(GUID *guid)
+{
+       int i;
+
+       d_printf("%08x-%04x-%04x", 
+                IVAL(guid->info, 0), SVAL(guid->info, 4), SVAL(guid->info, 6));
+       d_printf("-%02x%02x-", guid->info[8], guid->info[9]);
+       for (i=10;i<GUID_SIZE;i++)
+               d_printf("%02x", guid->info[i]);
+       d_printf("\n");
+}
+
 /*******************************************************************
  Tallocs a duplicate SID. 
 ********************************************************************/ 
index 1aa33a1a4be4caad2f67acd65b7cbede360191fc..2928584b8afe3d9cb868d73179b09ad07304735a 100644 (file)
@@ -697,7 +697,7 @@ char *StrnCpy_fn(const char *fn, int line,char *dest,const char *src,size_t n)
 
        if (!dest) {
                DEBUG(0,("ERROR: NULL dest in StrnCpy, called from [%s][%d]\n", fn, line));
-               return NULL;
+               return(NULL);
        }
 
        if (!src) {
@@ -1196,7 +1196,7 @@ char *strchr_m(const char *src, char c)
 
        for (s = src; *s && !(((unsigned char)s[0]) & 0x80); s++) {
                if (*s == c)
-                       return s;
+                       return (char *)s;
        }
 
        if (!*s)
@@ -1244,7 +1244,7 @@ char *strrchr_m(const char *s, char c)
                                        break;
                                }
                                /* No - we have a match ! */
-                               return cp;
+                               return (char *)cp;
                        }
                } while (cp-- != s);
                if (!got_mb)
index 4c35236c902636dba341cfd1cb2652c1e9b5779a..56f0ecd85b94a6a8d3850ec1a30eb0fa8de58a9f 100644 (file)
@@ -2,7 +2,7 @@
  *  Unix SMB/CIFS implementation.
  *  UUID server routines
  *  Copyright (C) Theodore Ts'o               1996, 1997,
- *  Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2002, 2003
+ *  Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2002.
  *
  *  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
 #define TIME_OFFSET_HIGH 0x01B21DD2
 #define TIME_OFFSET_LOW  0x13814000
 
-void smb_uuid_pack(const struct uuid uu, UUID_FLAT *ptr)
-{
-       SIVAL(ptr, 0, uu.time_low);
-       SSVAL(ptr, 4, uu.time_mid);
-       SSVAL(ptr, 6, uu.time_hi_and_version);
-       memcpy(ptr+8, uu.clock_seq, 2);
-       memcpy(ptr+10, uu.node, 6);
-}
+struct uuid {
+        uint32   time_low;
+        uint16   time_mid;
+        uint16   time_hi_and_version;
+        uint8    clock_seq[2];
+        uint8    node[6];
+};
 
-void smb_uuid_unpack(const UUID_FLAT in, struct uuid *uu)
+
+static void uuid_pack(const struct uuid *uu, GUID *ptr)
 {
-       uu->time_low = IVAL(in.info, 0);
-       uu->time_mid = SVAL(in.info, 4);
-       uu->time_hi_and_version = SVAL(in.info, 6);
-       memcpy(uu->clock_seq, in.info+8, 2);
-       memcpy(uu->node, in.info+10, 6);
+       uint8 *out = ptr->info;
+
+       SIVAL(out, 0, uu->time_low);
+       SSVAL(out, 4, uu->time_mid);
+       SSVAL(out, 6, uu->time_hi_and_version);
+       memcpy(out+8, uu->clock_seq, 2);
+       memcpy(out+10, uu->node, 6);
 }
 
-const struct uuid smb_uuid_unpack_static(const UUID_FLAT in)
+static void uuid_unpack(const GUID in, struct uuid *uu)
 {
-       static struct uuid uu;
+       const uint8 *ptr = in.info;
 
-       smb_uuid_unpack(in, &uu);
-       return uu;
+       uu->time_low = IVAL(ptr, 0);
+       uu->time_mid = SVAL(ptr, 4);
+       uu->time_hi_and_version = SVAL(ptr, 6);
+       memcpy(uu->clock_seq, ptr+8, 2);
+       memcpy(uu->node, ptr+10, 6);
 }
 
-void smb_uuid_generate_random(struct uuid *uu)
+void smb_uuid_generate_random(GUID *out)
 {
-       UUID_FLAT tmp;
+       GUID tmp;
+       struct uuid uu;
 
        generate_random_buffer(tmp.info, sizeof(tmp.info), True);
-       smb_uuid_unpack(tmp, uu);
+       uuid_unpack(tmp, &uu);
 
-       uu->clock_seq[0] = (uu->clock_seq[0] & 0x3F) | 0x80;
-       uu->time_hi_and_version = (uu->time_hi_and_version & 0x0FFF) | 0x4000;
+       uu.clock_seq[0] = (uu.clock_seq[0] & 0x3F) | 0x80;
+       uu.time_hi_and_version = (uu.time_hi_and_version & 0x0FFF) | 0x4000;
+       uuid_pack(&uu, out);
 }
 
-char *smb_uuid_to_string(const struct uuid uu)
+char *smb_uuid_to_string(const GUID in)
 {
+       struct uuid uu;
        char *out;
 
+       uuid_unpack(in, &uu);
+       
        asprintf(&out, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
                 uu.time_low, uu.time_mid, uu.time_hi_and_version,
                 uu.clock_seq[0], uu.clock_seq[1],
@@ -77,11 +87,13 @@ char *smb_uuid_to_string(const struct uuid uu)
        return out;
 }
 
-const char *smb_uuid_string_static(const struct uuid uu)
+const char *smb_uuid_string_static(const GUID in)
 {
+       struct uuid uu;
        static char out[37];
 
-       slprintf(out, sizeof(out), 
+       uuid_unpack(in, &uu);
+       slprintf(out, sizeof(out) -1, 
                 "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
                 uu.time_low, uu.time_mid, uu.time_hi_and_version,
                 uu.clock_seq[0], uu.clock_seq[1],
@@ -89,86 +101,3 @@ const char *smb_uuid_string_static(const struct uuid uu)
                 uu.node[3], uu.node[4], uu.node[5]);
        return out;
 }
-
-BOOL smb_string_to_uuid(const char *in, struct uuid* uu)
-{
-       BOOL ret = False;
-       const char *ptr = in;
-       char *end = (char *)in;
-       int i;
-
-       if (!in || !uu) goto out;
-
-       uu->time_low = strtoul(ptr, &end, 16);
-       if ((end - ptr) != 8 || *end != '-') goto out;
-       ptr = (end + 1);
-
-       uu->time_mid = strtoul(ptr, &end, 16);
-       if ((end - ptr) != 4 || *end != '-') goto out;
-       ptr = (end + 1);
-
-       uu->time_hi_and_version = strtoul(ptr, &end, 16);
-       if ((end - ptr) != 4 || *end != '-') goto out;
-       ptr = (end + 1);
-
-       for (i = 0; i < 2; i++) {
-               int adj = 0;
-               if (*ptr >= '0' && *ptr <= '9') {
-                       adj = '0';
-               } else if (*ptr >= 'a' && *ptr <= 'f') {
-                       adj = 'a';
-               } else if (*ptr >= 'A' && *ptr <= 'F') {
-                       adj = 'A';
-               } else {
-                       goto out;
-               }
-               uu->clock_seq[i] = (*ptr - adj) << 4;
-               ptr++;
-
-               if (*ptr >= '0' && *ptr <= '9') {
-                       adj = '0';
-               } else if (*ptr >= 'a' && *ptr <= 'f') {
-                       adj = 'a';
-               } else if (*ptr >= 'A' && *ptr <= 'F') {
-                       adj = 'A';
-               } else {
-                       goto out;
-               }
-               uu->clock_seq[i] |= (*ptr - adj);
-               ptr++;
-       }
-
-       if (*ptr != '-') goto out;
-       ptr++;
-
-       for (i = 0; i < 6; i++) {
-               int adj = 0;
-               if (*ptr >= '0' && *ptr <= '9') {
-                       adj = '0';
-               } else if (*ptr >= 'a' && *ptr <= 'f') {
-                       adj = 'a';
-               } else if (*ptr >= 'A' && *ptr <= 'F') {
-                       adj = 'A';
-               } else {
-                       goto out;
-               }
-               uu->node[i] = (*ptr - adj) << 4;
-               ptr++;
-
-               if (*ptr >= '0' && *ptr <= '9') {
-                       adj = '0';
-               } else if (*ptr >= 'a' && *ptr <= 'f') {
-                       adj = 'a';
-               } else if (*ptr >= 'A' && *ptr <= 'F') {
-                       adj = 'A';
-               } else {
-                       goto out;
-               }
-               uu->node[i] |= (*ptr - adj);
-               ptr++;
-       }
-
-       ret = True;
-out:
-        return ret;
-}
index 775a504f2b194a58b59290155bd6351098cca170..072f42513cb942c2e367980ad7417685ecde9355 100644 (file)
@@ -1091,14 +1091,20 @@ static void dump_binary(const char *field, struct berval **values)
        }
 }
 
+struct uuid {
+        uint32   i1;
+        uint16   i2;
+        uint16   i3;
+        uint8    s[8];
+};
+
 static void dump_guid(const char *field, struct berval **values)
 {
        int i;
-       UUID_FLAT guid;
+       GUID guid;
        for (i=0; values[i]; i++) {
                memcpy(guid.info, values[i]->bv_val, sizeof(guid.info));
-               printf("%s: %s\n", field, 
-                      smb_uuid_string_static(smb_uuid_unpack_static(guid)));
+               printf("%s: %s\n", field, smb_uuid_string_static(guid));
        }
 }
 
@@ -1623,18 +1629,16 @@ BOOL ads_pull_uint32(ADS_STRUCT *ads,
  * @return boolean indicating success
  **/
 BOOL ads_pull_guid(ADS_STRUCT *ads,
-                  void *msg, struct uuid *guid)
+                  void *msg, GUID *guid)
 {
        char **values;
-       UUID_FLAT flat_guid;
 
        values = ldap_get_values(ads->ld, msg, "objectGUID");
        if (!values)
                return False;
        
        if (values[0]) {
-               memcpy(&flat_guid.info, values[0], sizeof(UUID_FLAT));
-               smb_uuid_unpack(flat_guid, guid);
+               memcpy(guid, values[0], sizeof(GUID));
                ldap_value_free(values);
                return True;
        }
index d645a2fffb384c831755586c72b25f1e30369d74..c3abd6381825b84e3213b87d5fe085a8eb18455d 100644 (file)
@@ -361,7 +361,7 @@ void unlock_share_entry(connection_struct *conn,
 }
 
 /*******************************************************************
- Lock a hash bucket entry. Use an fsp for convenience.
+ Lock a hash bucket entry. use a fsp for convenience
 ******************************************************************/
 
 BOOL lock_share_entry_fsp(files_struct *fsp)
@@ -370,7 +370,7 @@ BOOL lock_share_entry_fsp(files_struct *fsp)
 }
 
 /*******************************************************************
- Unlock a hash bucket entry. Use an fsp for convenience.
+ Unlock a hash bucket entry.
 ******************************************************************/
 
 void unlock_share_entry_fsp(files_struct *fsp)
diff --git a/source/modules/developer.c b/source/modules/developer.c
deleted file mode 100644 (file)
index 7ffc3ff..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   Samba module with developer tools
-   Copyright (C) Andrew Tridgell 2001
-   Copyright (C) Jelmer Vernooij 2002
-   
-   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"
-
-static struct {
-       char from;
-       char *to;
-       int len;
-} weird_table[] = {
-       {'q', "^q^", 3},
-       {'Q', "^Q^", 3},
-       {0, NULL}
-};
-
-static size_t weird_pull(void *cd, char **inbuf, size_t *inbytesleft,
-                        char **outbuf, size_t *outbytesleft)
-{
-       while (*inbytesleft >= 1 && *outbytesleft >= 2) {
-               int i;
-               int done = 0;
-               for (i=0;weird_table[i].from;i++) {
-                       if (strncmp((*inbuf), 
-                                   weird_table[i].to, 
-                                   weird_table[i].len) == 0) {
-                               if (*inbytesleft < weird_table[i].len) {
-                                       DEBUG(0,("ERROR: truncated weird string\n"));
-                                       /* smb_panic("weird_pull"); */
-
-                               } else {
-                                       (*outbuf)[0] = weird_table[i].from;
-                                       (*outbuf)[1] = 0;
-                                       (*inbytesleft)  -= weird_table[i].len;
-                                       (*outbytesleft) -= 2;
-                                       (*inbuf)  += weird_table[i].len;
-                                       (*outbuf) += 2;
-                                       done = 1;
-                                       break;
-                               }
-                       }
-               }
-               if (done) continue;
-               (*outbuf)[0] = (*inbuf)[0];
-               (*outbuf)[1] = 0;
-               (*inbytesleft)  -= 1;
-               (*outbytesleft) -= 2;
-               (*inbuf)  += 1;
-               (*outbuf) += 2;
-       }
-
-       if (*inbytesleft > 0) {
-               errno = E2BIG;
-               return -1;
-       }
-       
-       return 0;
-}
-
-static size_t weird_push(void *cd, char **inbuf, size_t *inbytesleft,
-                        char **outbuf, size_t *outbytesleft)
-{
-       int ir_count=0;
-
-       while (*inbytesleft >= 2 && *outbytesleft >= 1) {
-               int i;
-               int done=0;
-               for (i=0;weird_table[i].from;i++) {
-                       if ((*inbuf)[0] == weird_table[i].from &&
-                           (*inbuf)[1] == 0) {
-                               if (*outbytesleft < weird_table[i].len) {
-                                       DEBUG(0,("No room for weird character\n"));
-                                       /* smb_panic("weird_push"); */
-                               } else {
-                                       memcpy(*outbuf, weird_table[i].to, 
-                                              weird_table[i].len);
-                                       (*inbytesleft)  -= 2;
-                                       (*outbytesleft) -= weird_table[i].len;
-                                       (*inbuf)  += 2;
-                                       (*outbuf) += weird_table[i].len;
-                                       done = 1;
-                                       break;
-                               }
-                       }
-               }
-               if (done) continue;
-
-               (*outbuf)[0] = (*inbuf)[0];
-               if ((*inbuf)[1]) ir_count++;
-               (*inbytesleft)  -= 2;
-               (*outbytesleft) -= 1;
-               (*inbuf)  += 2;
-               (*outbuf) += 1;
-       }
-
-       if (*inbytesleft == 1) {
-               errno = EINVAL;
-               return -1;
-       }
-
-       if (*inbytesleft > 1) {
-               errno = E2BIG;
-               return -1;
-       }
-       
-       return ir_count;
-}
-
-struct charset_functions weird_functions = {"WEIRD", weird_pull, weird_push};
-
-int charset_weird_init(void)
-{
-       smb_register_charset(&weird_functions);
-       return True;
-}
index fc66e0d6b49b584ef2335fcdff0051c3b79a91d1..3b021978056c04db6657b97635bc887570c8f48a 100644 (file)
@@ -255,7 +255,7 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
                                        q = ALIGN4(q, buf);
                                }
 
-                               DEBUG(3,("process_logon_packet: len = %d PTR_DIFF(q, buf) = %d\n", len, PTR_DIFF(q, buf) ));
+                               DEBUG(3,("process_logon_packet: len = %d PTR_DIFF(q, buf) = %ld\n", len, (unsigned long)PTR_DIFF(q, buf) ));
 
                                if (len - PTR_DIFF(q, buf) > 8) {
                                        /* with NT5 clients we can sometimes
@@ -313,8 +313,7 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
                                }
 #ifdef HAVE_ADS
                                else {
-                                       struct uuid domain_guid;
-                                       UUID_FLAT flat_guid;
+                                       GUID domain_guid;
                                        pstring domain;
                                        pstring hostname;
                                        char *component, *dc, *q1;
@@ -341,10 +340,8 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
                                                DEBUG(2, ("Could not fetch DomainGUID for %s\n", domain));
                                                return;
                                        }
-
-                                       smb_uuid_pack(domain_guid, &flat_guid);
-                                       memcpy(q, &flat_guid.info, UUID_FLAT_SIZE);
-                                       q += UUID_FLAT_SIZE;
+                                       memcpy(q, &domain_guid, sizeof(domain_guid));
+                                       q += sizeof(domain_guid);
 
                                        /* Forest */
                                        str_offset = q - q_orig;
index 04233bb85cb5db9eb22c01228f135b81d859d90a..1256ec3a3bc35c8ae6f5b012df4f9a4ffe52f458 100644 (file)
@@ -136,6 +136,37 @@ static BOOL wbinfo_get_usergroups(char *user)
        return True;
 }
 
+
+/* List group SIDs a user SID is a member of */
+static BOOL wbinfo_get_usersids(char *user_sid)
+{
+       struct winbindd_request request;
+       struct winbindd_response response;
+       NSS_STATUS result;
+       int i;
+       const char *s;
+
+       ZERO_STRUCT(response);
+
+       /* Send request */
+       fstrcpy(request.data.sid, user_sid);
+
+       result = winbindd_request(WINBINDD_GETUSERSIDS, &request, &response);
+
+       if (result != NSS_STATUS_SUCCESS)
+               return False;
+
+       s = response.extra_data;
+       for (i = 0; i < response.data.num_entries; i++) {
+               d_printf("%s\n", s);
+               s += strlen(s) + 1;
+       }
+
+       SAFE_FREE(response.extra_data);
+
+       return True;
+}
+
 /* Convert NetBIOS name to IP */
 
 static BOOL wbinfo_wins_byname(char *name)
@@ -884,7 +915,8 @@ enum {
        OPT_SET_AUTH_USER = 1000,
        OPT_GET_AUTH_USER,
        OPT_DOMAIN_NAME,
-       OPT_SEQUENCE
+       OPT_SEQUENCE,
+       OPT_USERSIDS
 };
 
 int main(int argc, char **argv)
@@ -923,6 +955,7 @@ int main(int argc, char **argv)
                { "trusted-domains", 'm', POPT_ARG_NONE, 0, 'm', "List trusted domains" },
                { "sequence", 0, POPT_ARG_NONE, 0, OPT_SEQUENCE, "Show sequence numbers of all domains" },
                { "user-groups", 'r', POPT_ARG_STRING, &string_arg, 'r', "Get user groups", "USER" },
+               { "user-sids", 0, POPT_ARG_STRING, &string_arg, OPT_USERSIDS, "Get user group sids for user SID", "SID" },
                { "authenticate", 'a', POPT_ARG_STRING, &string_arg, 'a', "authenticate user", "user%password" },
                { "set-auth-user", 0, POPT_ARG_STRING, &string_arg, OPT_SET_AUTH_USER, "Store user and password used by winbindd (root only)", "user%password" },
                { "get-auth-user", 0, POPT_ARG_NONE, NULL, OPT_GET_AUTH_USER, "Retrieve user and password used by winbindd (root only)", NULL },
@@ -1055,6 +1088,13 @@ int main(int argc, char **argv)
                                goto done;
                        }
                        break;
+               case OPT_USERSIDS:
+                       if (!wbinfo_get_usersids(string_arg)) {
+                               d_printf("Could not get group SIDs for user SID %s\n", 
+                                      string_arg);
+                               goto done;
+                       }
+                       break;
                case 'a': {
                                BOOL got_error = False;
 
index 125bc8ccdaf9b6e9f3aff8f854e21bdad1d3c465..ac4a861ff1b8f643ea3c4e9c54f0f5923026f987 100644 (file)
@@ -860,3 +860,152 @@ _nss_winbind_initgroups_dyn(char *user, gid_t group, long int *start,
  done:
        return ret;
 }
+
+
+/* return a list of group SIDs for a user SID */
+NSS_STATUS
+_nss_winbind_getusersids(const char *user_sid, char **group_sids,
+                        int *num_groups,
+                        char *buffer, size_t buf_size, int *errnop)
+{
+       NSS_STATUS ret;
+       struct winbindd_request request;
+       struct winbindd_response response;
+
+#ifdef DEBUG_NSS
+       fprintf(stderr, "[%5d]: getusersids %s\n", getpid(), user_sid);
+#endif
+
+       ZERO_STRUCT(request);
+       ZERO_STRUCT(response);
+
+       strncpy(request.data.sid, user_sid,sizeof(request.data.sid) - 1);
+       request.data.sid[sizeof(request.data.sid) - 1] = '\0';
+
+       ret = winbindd_request(WINBINDD_GETUSERSIDS, &request, &response);
+
+       if (ret != NSS_STATUS_SUCCESS) {
+               goto done;
+       }
+
+       if (buf_size < response.length - sizeof(response)) {
+               ret = NSS_STATUS_TRYAGAIN;
+               errno = *errnop = ERANGE;
+               goto done;
+       }
+
+       *num_groups = response.data.num_entries;
+       *group_sids = buffer;
+       memcpy(buffer, response.extra_data, response.length - sizeof(response));
+       errno = *errnop = 0;
+       
+ done:
+       free_response(&response);
+       return ret;
+}
+
+
+/* map a user or group name to a SID string */
+NSS_STATUS
+_nss_winbind_nametosid(const char *name, char **sid, char *buffer,
+                      size_t buflen, int *errnop)
+{
+       NSS_STATUS ret;
+       struct winbindd_response response;
+       struct winbindd_request request;
+
+#ifdef DEBUG_NSS
+       fprintf(stderr, "[%5d]: nametosid %s\n", getpid(), name);
+#endif
+
+       ZERO_STRUCT(response);
+       ZERO_STRUCT(request);
+
+       strncpy(request.data.name.name, name, 
+               sizeof(request.data.name.name) - 1);
+       request.data.name.name[sizeof(request.data.name.name) - 1] = '\0';
+
+       ret = winbindd_request(WINBINDD_LOOKUPNAME, &request, &response);
+       if (ret != NSS_STATUS_SUCCESS) {
+               *errnop = errno = EINVAL;
+               goto failed;
+       }
+
+       if (buflen < strlen(response.data.sid.sid)+1) {
+               ret = NSS_STATUS_TRYAGAIN;
+               *errnop = errno = ERANGE;
+               goto failed;
+       }
+
+       *errnop = errno = 0;
+       *sid = buffer;
+       strcpy(*sid, response.data.sid.sid);
+
+failed:
+       free_response(&response);
+       return ret;
+}
+
+/* map a sid string to a user or group name */
+NSS_STATUS
+_nss_winbind_sidtoname(const char *sid, char **name, char *buffer,
+                      size_t buflen, int *errnop)
+{
+       NSS_STATUS ret;
+       struct winbindd_response response;
+       struct winbindd_request request;
+       static char sep_char;
+       unsigned needed;
+
+#ifdef DEBUG_NSS
+       fprintf(stderr, "[%5d]: sidtoname %s\n", getpid(), sid);
+#endif
+
+       /* we need to fetch the separator first time through */
+       if (!sep_char) {
+               ZERO_STRUCT(response);
+               ZERO_STRUCT(request);
+
+               ret = winbindd_request(WINBINDD_INFO, &request, &response);
+               if (ret != NSS_STATUS_SUCCESS) {
+                       *errnop = errno = EINVAL;
+                       goto failed;
+               }
+
+               sep_char = response.data.info.winbind_separator;
+               free_response(&response);
+       }
+
+
+       strncpy(request.data.sid, sid, 
+               sizeof(request.data.sid) - 1);
+       request.data.sid[sizeof(request.data.sid) - 1] = '\0';
+
+       ret = winbindd_request(WINBINDD_LOOKUPSID, &request, &response);
+       if (ret != NSS_STATUS_SUCCESS) {
+               *errnop = errno = EINVAL;
+               goto failed;
+       }
+
+       needed = 
+               strlen(response.data.name.dom_name) +
+               strlen(response.data.name.name) + 2;
+
+       if (buflen < needed) {
+               ret = NSS_STATUS_TRYAGAIN;
+               *errnop = errno = ERANGE;
+               goto failed;
+       }
+
+       snprintf(buffer, needed, "%s%c%s", 
+                response.data.name.dom_name,
+                sep_char,
+                response.data.name.name);
+
+       *name = buffer;
+       *errnop = errno = 0;
+
+failed:
+       free_response(&response);
+       return ret;
+}
index 4b47ac13a2f3cbe3d149999ec636ba680078f57f..74df934ca2e2cc789e4df079d76227f24f580980 100644 (file)
@@ -22,6 +22,7 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include "includes.h"
 #include "winbindd.h"
 
 BOOL opt_nocache = False;
@@ -220,6 +221,7 @@ static struct dispatch_table dispatch_table[] = {
        { WINBINDD_GETPWENT, winbindd_getpwent, "GETPWENT" },
 
        { WINBINDD_GETGROUPS, winbindd_getgroups, "GETGROUPS" },
+       { WINBINDD_GETUSERSIDS, winbindd_getusersids, "GETUSERSIDS" },
 
        /* Group functions */
 
@@ -721,6 +723,7 @@ static void process_loop(void)
                                            && *(uint32 *) &state->request != sizeof(state->request)) {
                                                DEBUG(0,("process_loop: Invalid request size from pid %lu: %d bytes sent, should be %ld\n",
                                                                (unsigned long)state->request.pid, *(uint32 *) &state->request, (unsigned long)sizeof(state->request)));
+                                               DEBUGADD(0, ("This usually means that you are running old wbinfo, pam_winbind or libnss_winbind clients\n"));
 
                                                remove_client(state);
                                                break;
index 677afa1849f2f571627fec91a6c37f9de98dd2a1..ea6d93116fe6c75bb1b6f15551975681f8b4fda0 100644 (file)
@@ -25,7 +25,6 @@
 #ifndef _WINBINDD_H
 #define _WINBINDD_H
 
-#include "includes.h"
 #include "nterr.h"
 
 #include "winbindd_nss.h"
index 0c06df7fdd4670a434ec835c939a2bbdea08554f..08b9e2172c7fdda541c47d95dc66b846d530c870 100644 (file)
@@ -20,6 +20,7 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include "includes.h"
 #include "winbindd.h"
 
 #undef DBGC_CLASS
index 5d0f924d8f810bb92793a993219976ee361344a8..2fcf02a3164ddc8edbe35e05461b4eef7ce9aa01 100644 (file)
@@ -21,6 +21,7 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include "includes.h"
 #include "winbindd.h"
 
 #ifdef HAVE_ADS
index bc6967dee1cd13d720ac6b0d34f19105daaece7c..cc80a584e01754c3bcc72d8da3760902b92b91a7 100644 (file)
@@ -22,6 +22,7 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include "includes.h"
 #include "winbindd.h"
 
 #undef DBGC_CLASS
index 0630403cbce61e664170042ec64a5a11bfa4f240..ac9cd8f332931d329d42ce52b16af3970ac68d47 100644 (file)
@@ -56,6 +56,7 @@
 
  */
 
+#include "includes.h"
 #include "winbindd.h"
 
 #undef DBGC_CLASS
index 167630b0e1ff09ac0e8ed8126027a0093412017c..a9796afa3679712e0e6c18617e5b0bac81e0618d 100644 (file)
@@ -29,6 +29,7 @@
 
  */
 
+#include "includes.h"
 #include "winbindd.h"
 
 #undef DBGC_CLASS
index fba427536c8dd833c24fb156fb4e1cbbb1e60967..15bdc110366c695637e870dc28353e6ea78d9f1f 100644 (file)
@@ -22,6 +22,7 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include "includes.h"
 #include "winbindd.h"
 
 #undef DBGC_CLASS
@@ -1081,3 +1082,88 @@ enum winbindd_result winbindd_getgroups(struct winbindd_cli_state *state)
 
        return result;
 }
+
+
+/* Get user supplementary sids. This is equivalent to the
+   winbindd_getgroups() function but it involves a SID->SIDs mapping
+   rather than a NAME->SID->SIDS->GIDS mapping, which means we avoid
+   idmap. This call is designed to be used with applications that need
+   to do ACL evaluation themselves. Note that the cached info3 data is
+   not used 
+
+   this function assumes that the SID that comes in is a user SID. If
+   you pass in another type of SID then you may get unpredictable
+   results.
+*/
+enum winbindd_result winbindd_getusersids(struct winbindd_cli_state *state)
+{
+       DOM_SID user_sid;
+       NTSTATUS status;
+       DOM_SID **user_grpsids;
+       struct winbindd_domain *domain;
+       enum winbindd_result result = WINBINDD_ERROR;
+       unsigned int i;
+       TALLOC_CTX *mem_ctx;
+       char *ret;
+       uint32 num_groups;
+       unsigned ofs, ret_size = 0;
+
+       /* Ensure null termination */
+       state->request.data.sid[sizeof(state->request.data.sid)-1]='\0';
+
+       if (!string_to_sid(&user_sid, state->request.data.sid)) {
+               DEBUG(1, ("Could not get convert sid %s from string\n", state->request.data.sid));
+               return WINBINDD_ERROR;
+       }
+
+       if (!(mem_ctx = talloc_init("winbindd_getusersids(%s)",
+                                   state->request.data.username))) {
+               return WINBINDD_ERROR;
+       }
+
+       /* Get info for the domain */   
+       if ((domain = find_domain_from_sid(&user_sid)) == NULL) {
+               DEBUG(0,("could not find domain entry for sid %s\n", 
+                         sid_string_static(&user_sid)));
+               goto done;
+       }
+
+       status = domain->methods->lookup_usergroups(domain, mem_ctx, 
+                                                   &user_sid, &num_groups, 
+                                                   &user_grpsids);
+       if (!NT_STATUS_IS_OK(status)) 
+               goto done;
+
+       if (num_groups == 0) {
+               goto no_groups;
+       }
+
+       /* work out the response size */
+       for (i = 0; i < num_groups; i++) {
+               const char *s = sid_string_static(user_grpsids[i]);
+               ret_size += strlen(s) + 1;
+       }
+
+       /* build the reply */
+       ret = malloc(ret_size);
+       if (!ret) goto done;
+       ofs = 0;
+       for (i = 0; i < num_groups; i++) {
+               const char *s = sid_string_static(user_grpsids[i]);
+               safe_strcpy(ret + ofs, s, ret_size - ofs);
+               ofs += strlen(ret+ofs) + 1;
+       }
+
+no_groups:
+       /* Send data back to client */
+       state->response.data.num_entries = num_groups;
+       state->response.extra_data = ret;
+       state->response.length += ret_size;
+       result = WINBINDD_OK;
+
+ done:
+       talloc_destroy(mem_ctx);
+
+       return result;
+}
+
index 88fbb5ee0065d088e4216944d9345ae4390ddc6f..3352ed447c2bf6e55caf7c00de0731e3a67466af 100644 (file)
@@ -21,6 +21,7 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include "includes.h"
 #include "winbindd.h"
 
 #undef DBGC_CLASS
index 41fecd2816cf8d6d715e1fb73beed2be77ab96ff..76243c57ef33a60b73691908845333e4ef552092 100644 (file)
@@ -118,6 +118,9 @@ enum winbindd_cmd {
        /* find the location of our privileged pipe */
        WINBINDD_PRIV_PIPE_DIR,
 
+       /* return a list of group sids for a user sid */
+       WINBINDD_GETUSERSIDS,   
+
        WINBINDD_NUM_CMDS
 };
 
index 99621057874b6ef522b726b68f8b4f4723f61499..6e386760b421b4f70ecd29aa8adf89a746fa85c3 100644 (file)
@@ -22,6 +22,7 @@
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include "includes.h"
 #include "winbindd.h"
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_WINBIND
diff --git a/source/nsswitch/winbindd_passdb.c b/source/nsswitch/winbindd_passdb.c
deleted file mode 100644 (file)
index 503b978..0000000
+++ /dev/null
@@ -1,360 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   Winbind rpc backend functions
-
-   Copyright (C) Tim Potter 2000-2001,2003
-   Copyright (C) Simo Sorce 2003
-   
-   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 "winbindd.h"
-
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_WINBIND
-
-
-/* Query display info for a domain.  This returns enough information plus a
-   bit extra to give an overview of domain users for the User Manager
-   application. */
-static NTSTATUS query_user_list(struct winbindd_domain *domain,
-                              TALLOC_CTX *mem_ctx,
-                              uint32 *num_entries, 
-                              WINBIND_USERINFO **info)
-{
-       SAM_ACCOUNT *sam_account = NULL;
-       NTSTATUS result;
-       uint32 i;
-
-       DEBUG(3,("pdb: query_user_list\n"));
-
-       if (NT_STATUS_IS_ERR(result = pdb_init_sam(&sam_account))) {
-               return result;
-       }
-
-       i = 0;
-       *info = NULL;
-       
-       if (pdb_setsampwent(False)) {
-       
-               while (pdb_getsampwent(sam_account)) {
-               
-                       /* we return only nua accounts, or we will have duplicates */
-                       if (!idmap_check_sid_is_in_free_range(pdb_get_user_sid(sam_account))) {
-                               continue;
-                       }
-
-                       *info = talloc_realloc(mem_ctx, *info, (i + 1) * sizeof(WINBIND_USERINFO));
-                       if (!(*info)) {
-                               DEBUG(0,("query_user_list: out of memory!\n"));
-                               result = NT_STATUS_NO_MEMORY;
-                               break;
-                       }
-
-                       (*info)[i].user_sid = talloc(mem_ctx, sizeof(DOM_SID));
-                       (*info)[i].group_sid = talloc(mem_ctx, sizeof(DOM_SID));
-                       if (!((*info)[i].user_sid) || !((*info)[i].group_sid)) {
-                               DEBUG(0,("query_user_list: out of memory!\n"));
-                               result = NT_STATUS_NO_MEMORY;
-                               break;
-                       }
-                       sid_copy((*info)[i].user_sid, pdb_get_user_sid(sam_account));
-                       sid_copy((*info)[i].group_sid, pdb_get_group_sid(sam_account));
-
-                       (*info)[i].acct_name = talloc_strdup(mem_ctx, pdb_get_username(sam_account));
-                       (*info)[i].full_name = talloc_strdup(mem_ctx, pdb_get_fullname(sam_account));
-                       if (!((*info)[i].acct_name) || !((*info)[i].full_name)) {
-                               DEBUG(0,("query_user_list: out of memory!\n"));
-                               result = NT_STATUS_NO_MEMORY;
-                               break;
-                       }
-
-                       i++;
-
-                       if (NT_STATUS_IS_ERR(pdb_reset_sam(sam_account))) {
-                               result = NT_STATUS_UNSUCCESSFUL;
-                               break;
-                       }
-               }
-
-               *num_entries = i;
-               result = NT_STATUS_OK;
-       
-       } else {
-               result = NT_STATUS_UNSUCCESSFUL;
-       }
-
-       pdb_free_sam(&sam_account);
-       return result;
-}
-
-/* list all domain groups */
-static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
-                               TALLOC_CTX *mem_ctx,
-                               uint32 *num_entries, 
-                               struct acct_info **info)
-{
-       NTSTATUS result = NT_STATUS_OK;
-
-       DEBUG(3,("pdb: enum_dom_groups (group support not implemented)\n"));
-
-       *num_entries = 0;
-       *info = 0;
-
-       return result;  
-}
-
-/* List all domain groups */
-
-static NTSTATUS enum_local_groups(struct winbindd_domain *domain,
-                               TALLOC_CTX *mem_ctx,
-                               uint32 *num_entries, 
-                               struct acct_info **info)
-{
-       NTSTATUS result = NT_STATUS_OK;
-
-       DEBUG(3,("pdb: enum_local_groups (group support not implemented)\n"));
-
-       *num_entries = 0;
-       *info = 0;
-
-       return result;  
-}
-
-/* convert a single name to a sid in a domain */
-static NTSTATUS name_to_sid(struct winbindd_domain *domain,
-                           TALLOC_CTX *mem_ctx,
-                           const char *name,
-                           DOM_SID *sid,
-                           enum SID_NAME_USE *type)
-{
-       SAM_ACCOUNT *sam_account = NULL;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-
-       DEBUG(3,("pdb: name_to_sid name=%s (group support not implemented)\n", name));
-
-       if (NT_STATUS_IS_OK(pdb_init_sam(&sam_account))) {
-               if (!pdb_getsampwnam(sam_account, name)) {
-                       result = NT_STATUS_UNSUCCESSFUL;
-               } else { /* it is a sam user */
-                       sid_copy(sid, pdb_get_user_sid(sam_account));
-                       *type = SID_NAME_USER;
-                       result = NT_STATUS_OK;
-               }
-       }
-
-       pdb_free_sam(&sam_account);
-       return result;  
-}
-
-/*
-  convert a domain SID to a user or group name
-*/
-static NTSTATUS sid_to_name(struct winbindd_domain *domain,
-                           TALLOC_CTX *mem_ctx,
-                           DOM_SID *sid,
-                           char **name,
-                           enum SID_NAME_USE *type)
-{
-       SAM_ACCOUNT *sam_account = NULL;
-       NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
-       uint32 id;
-
-       DEBUG(3,("pdb: sid_to_name sid=%s\n", sid_string_static(sid)));
-
-       if (NT_STATUS_IS_OK(sid_to_uid(sid, &id))) { /* this is a user */
-
-               if (NT_STATUS_IS_ERR(result = pdb_init_sam(&sam_account))) {
-                       return result;
-               }
-       
-               if (!pdb_getsampwsid(sam_account, sid)) {
-                       pdb_free_sam(&sam_account);
-                       return NT_STATUS_UNSUCCESSFUL;
-               }
-       
-               *name = talloc_strdup(mem_ctx, pdb_get_username(sam_account));  
-               if (!(*name)) {
-                       DEBUG(0,("query_user: out of memory!\n"));
-                       pdb_free_sam(&sam_account);
-                       return NT_STATUS_NO_MEMORY;
-               }
-
-               pdb_free_sam(&sam_account);
-               *type = SID_NAME_USER;
-               result = NT_STATUS_OK;
-
-       } else if (NT_STATUS_IS_OK(sid_to_gid(sid, &id))) { /* this is a group */
-               
-               DEBUG(3,("pdb: sid_to_name: group support not implemented\n"));
-               result = NT_STATUS_UNSUCCESSFUL;
-       }
-
-       return result;
-}
-
-/* Lookup user information from a rid or username. */
-static NTSTATUS query_user(struct winbindd_domain *domain, 
-                          TALLOC_CTX *mem_ctx, 
-                          DOM_SID *user_sid, 
-                          WINBIND_USERINFO *user_info)