Merge branch 'master' of ssh://git.samba.org/data/git/samba
authorJelmer Vernooij <jelmer@samba.org>
Tue, 16 Dec 2008 14:36:53 +0000 (15:36 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Tue, 16 Dec 2008 14:36:53 +0000 (15:36 +0100)
83 files changed:
.gitignore
docs-xml/manpages-3/idmap_ad.8.xml
docs-xml/manpages-3/tdbtool.8.xml
docs-xml/smbdotconf/vfs/aclcompatibility.xml
lib/tdb/common/tdb.c
lib/tdb/include/tdb.h
lib/tdb/tools/tdbbackup.c
lib/tdb/tools/tdbtool.c
nsswitch/config.m4 [moved from source4/nsswitch/config.m4 with 78% similarity]
nsswitch/config.mk [moved from source4/nsswitch/config.mk with 95% similarity]
nsswitch/libwbclient/Doxyfile [moved from source3/nsswitch/libwbclient/Doxyfile with 82% similarity]
nsswitch/libwbclient/libwbclient.h [moved from source3/nsswitch/libwbclient/libwbclient.h with 100% similarity]
nsswitch/libwbclient/wbc_err_internal.h [moved from source3/nsswitch/libwbclient/wbc_err_internal.h with 100% similarity]
nsswitch/libwbclient/wbc_guid.c [moved from source3/nsswitch/libwbclient/wbc_guid.c with 100% similarity]
nsswitch/libwbclient/wbc_idmap.c [moved from source3/nsswitch/libwbclient/wbc_idmap.c with 100% similarity]
nsswitch/libwbclient/wbc_pam.c [moved from source3/nsswitch/libwbclient/wbc_pam.c with 100% similarity]
nsswitch/libwbclient/wbc_pwd.c [moved from source3/nsswitch/libwbclient/wbc_pwd.c with 100% similarity]
nsswitch/libwbclient/wbc_sid.c [moved from source3/nsswitch/libwbclient/wbc_sid.c with 100% similarity]
nsswitch/libwbclient/wbc_util.c [moved from source3/nsswitch/libwbclient/wbc_util.c with 98% similarity]
nsswitch/libwbclient/wbclient.c [moved from source3/nsswitch/libwbclient/wbclient.c with 99% similarity]
nsswitch/libwbclient/wbclient.h [moved from source3/nsswitch/libwbclient/wbclient.h with 99% similarity]
nsswitch/libwbclient/wbclient_internal.h [moved from source3/nsswitch/libwbclient/wbclient_internal.h with 100% similarity]
nsswitch/nsstest.c [moved from source4/nsswitch/nsstest.c with 95% similarity]
nsswitch/nsstest.h [moved from source4/nsswitch/nsstest.h with 99% similarity]
nsswitch/nsstest.m4 [moved from source4/nsswitch/nsstest.m4 with 87% similarity]
nsswitch/pam_winbind.c [moved from source3/nsswitch/pam_winbind.c with 100% similarity]
nsswitch/pam_winbind.h [moved from source3/nsswitch/pam_winbind.h with 97% similarity]
nsswitch/tests/test_wbinfo.sh [moved from source4/nsswitch/tests/test_wbinfo.sh with 99% similarity]
nsswitch/wb_common.c [moved from source3/nsswitch/wb_common.c with 95% similarity]
nsswitch/wbinfo.c [moved from source3/nsswitch/wbinfo.c with 99% similarity]
nsswitch/wbinfo4.c [moved from source4/nsswitch/wbinfo.c with 95% similarity]
nsswitch/winbind_client.h [moved from source3/nsswitch/winbind_client.h with 90% similarity]
nsswitch/winbind_krb5_locator.c [moved from source3/nsswitch/winbind_krb5_locator.c with 100% similarity]
nsswitch/winbind_nss.h [moved from source4/nsswitch/winbind_nss.h with 96% similarity]
nsswitch/winbind_nss_aix.c [moved from source3/nsswitch/winbind_nss_aix.c with 96% similarity]
nsswitch/winbind_nss_config.h [moved from source3/nsswitch/winbind_nss_config.h with 96% similarity]
nsswitch/winbind_nss_freebsd.c [moved from source3/nsswitch/winbind_nss_freebsd.c with 97% similarity]
nsswitch/winbind_nss_hpux.h [moved from source3/nsswitch/winbind_nss_hpux.h with 98% similarity]
nsswitch/winbind_nss_irix.c [moved from source3/nsswitch/winbind_nss_irix.c with 97% similarity]
nsswitch/winbind_nss_irix.h [moved from source4/nsswitch/winbind_nss_irix.h with 98% similarity]
nsswitch/winbind_nss_linux.c [moved from source3/nsswitch/winbind_nss_linux.c with 96% similarity]
nsswitch/winbind_nss_linux.h [moved from source3/nsswitch/winbind_nss_linux.h with 98% similarity]
nsswitch/winbind_nss_netbsd.c [moved from source3/nsswitch/winbind_nss_netbsd.c with 100% similarity]
nsswitch/winbind_nss_netbsd.h [moved from source4/nsswitch/winbind_nss_netbsd.h with 98% similarity]
nsswitch/winbind_nss_solaris.c [moved from source3/nsswitch/winbind_nss_solaris.c with 97% similarity]
nsswitch/winbind_nss_solaris.h [moved from source3/nsswitch/winbind_nss_solaris.h with 99% similarity]
nsswitch/winbind_struct_protocol.h [moved from source3/nsswitch/winbind_struct_protocol.h with 98% similarity]
nsswitch/wins.c [moved from source3/nsswitch/wins.c with 99% similarity]
pidl/config.mk
source3/Makefile.in
source3/configure.in
source3/lib/util_sock.c
source3/modules/getdate.c
source3/modules/getdate.y
source3/nsswitch/winbind_nss.h [deleted file]
source3/nsswitch/winbind_nss_irix.h [deleted file]
source3/nsswitch/winbind_nss_netbsd.h [deleted file]
source3/rpc_parse/parse_misc.c
source3/rpc_parse/parse_prs.c
source3/samba4.m4
source3/samba4.mk
source3/utils/net_status.c
source4/Makefile
source4/configure.ac
source4/lib/ldb/common/ldb_modules.c
source4/lib/ldb/include/ldb_private.h
source4/lib/ldb/ldb.i
source4/lib/ldb/ldb_tdb/ldb_index.c
source4/lib/ldb/ldb_wrap.c
source4/lib/ldb/tools/ldbadd.c
source4/lib/ldb/tools/ldbedit.c
source4/lib/ldb/tools/ldbmodify.c
source4/main.mk
source4/nsswitch/wb_common.c [deleted file]
source4/nsswitch/winbind_client.h [deleted file]
source4/nsswitch/winbind_nss_config.h [deleted file]
source4/nsswitch/winbind_nss_hpux.h [deleted file]
source4/nsswitch/winbind_nss_linux.c [deleted file]
source4/nsswitch/winbind_nss_linux.h [deleted file]
source4/nsswitch/winbind_nss_solaris.h [deleted file]
source4/nsswitch/winbind_struct_protocol.h [deleted file]
source4/rpc_server/dcerpc_server.c
source4/winbind/wb_samba3_protocol.c

index 7f83b91eee1d40d93212285682bcd836db86830b..4985738891f6d6ba9989239a5234f720dc0f8728 100644 (file)
@@ -51,6 +51,8 @@ examples/VFS/skel_transparent.so
 *.po
 *.pyc
 semantic.cache
+nsswitch/libnss_winbind.so
+nsswitch/libnss_wins.so
 source3/bin/*
 source3/config.cache
 source3/config.log
index fb0792eb9e70d8cfbefe44b3e561b4c90e017255..9437d34000be0bf7c1461f84a43df5afb05f4fe3 100644 (file)
@@ -23,8 +23,8 @@
        extensions. This module implements only the &quot;idmap&quot;
        API, and is READONLY. Mappings must be provided in advance
        by the administrator by adding the posixAccount/posixGroup
-       classess and relative attribute/value pairs to the users and
-       groups objects in AD</para>
+       classes and relative attribute/value pairs to the user and
+       group objects in the AD.</para>
 </refsynopsisdiv>
 
 <refsect1>
@@ -34,7 +34,7 @@
                <varlistentry>
                <term>range = low - high</term>
                <listitem><para>
-                       Defines the available matching uid and gid range for which the
+                       Defines the available matching UID and GID range for which the
                        backend is authoritative. Note that the range acts as a filter.
                        If specified any UID or GID stored in AD that fall outside the
                        range is ignored and the corresponding map is discarded.
@@ -47,7 +47,7 @@
                <listitem><para>
                        Defines the schema that idmap_ad should use when querying
                        Active Directory regarding user and group information.
-                       This can either the RFC2307 schema support included
+                       This can be either the RFC2307 schema support included
                        in Windows 2003 R2 or the Service for Unix (SFU) schema.
                </para></listitem>
                </varlistentry>
@@ -58,8 +58,8 @@
        <title>EXAMPLES</title>
        <para>
        The following example shows how to retrieve idmappings from our principal and
-       and trusted AD domains. All is needed is to set default to yes. If trusted
-       domains are present id conflicts must be resolved beforehand, there is no
+       and trusted AD domains. If trusted domains are present id conflicts must be
+       resolved beforehand, there is no
        guarantee on the order conflicting mappings would be resolved at this point.
 
        This example also shows how to leave a small non conflicting range for local
index 3f5dec4ecd8cb90ff4ad2b388b6e7cd7f5c99559..c75059b957efeb5379afa942b5bbed023f04585f 100644 (file)
                </para></listitem>
                </varlistentry>
 
+               <varlistentry>
+               <term>
+               <option>check</option>
+               </term>
+               <listitem><para>Check the integrity of the current database.
+               </para></listitem>
+               </varlistentry>
+
                <varlistentry>
                <term>
                <option>quit</option>
index 7891adc13b5fba95ffcfe47f9d51f15fb8839705..95f42cfe2a8334cc30bfb69ea1a64fd92898e75c 100644 (file)
@@ -1,5 +1,5 @@
 <samba:parameter name="acl compatibility"
-                 context="S"
+                 context="G"
                                 type="enum"
                  advanced="1" developer="1"
                  xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
index c7cec297f6cd0c5c27d81067b4a84a5224dd36ad..8c61ec1a89d0e6303a507e24455940d9eeff13ab 100644 (file)
@@ -800,3 +800,92 @@ failed:
        tdb_unlockall(tdb);
        return -1;
 }
+
+struct traverse_state {
+       bool error;
+       struct tdb_context *dest_db;
+};
+
+/*
+  traverse function for repacking
+ */
+static int repack_traverse(struct tdb_context *tdb, TDB_DATA key, TDB_DATA data, void *private)
+{
+       struct traverse_state *state = (struct traverse_state *)private;
+       if (tdb_store(state->dest_db, key, data, TDB_INSERT) != 0) {
+               state->error = true;
+               return -1;
+       }
+       return 0;
+}
+
+/*
+  repack a tdb
+ */
+int tdb_repack(struct tdb_context *tdb)
+{
+       struct tdb_context *tmp_db;
+       struct traverse_state state;
+
+       if (tdb_transaction_start(tdb) != 0) {
+               TDB_LOG((tdb, TDB_DEBUG_FATAL, __location__ " Failed to start transaction\n"));
+               return -1;
+       }
+
+       tmp_db = tdb_open("tmpdb", tdb_hash_size(tdb), TDB_INTERNAL, O_RDWR|O_CREAT, 0);
+       if (tmp_db == NULL) {
+               TDB_LOG((tdb, TDB_DEBUG_FATAL, __location__ " Failed to create tmp_db\n"));
+               tdb_transaction_cancel(tdb);
+               return -1;
+       }
+
+       state.error = false;
+       state.dest_db = tmp_db;
+
+       if (tdb_traverse_read(tdb, repack_traverse, &state) == -1) {
+               TDB_LOG((tdb, TDB_DEBUG_FATAL, __location__ " Failed to traverse copying out\n"));
+               tdb_transaction_cancel(tdb);
+               tdb_close(tmp_db);
+               return -1;              
+       }
+
+       if (state.error) {
+               TDB_LOG((tdb, TDB_DEBUG_FATAL, __location__ " Error during traversal\n"));
+               tdb_transaction_cancel(tdb);
+               tdb_close(tmp_db);
+               return -1;
+       }
+
+       if (tdb_wipe_all(tdb) != 0) {
+               TDB_LOG((tdb, TDB_DEBUG_FATAL, __location__ " Failed to wipe database\n"));
+               tdb_transaction_cancel(tdb);
+               tdb_close(tmp_db);
+               return -1;
+       }
+
+       state.error = false;
+       state.dest_db = tdb;
+
+       if (tdb_traverse_read(tmp_db, repack_traverse, &state) == -1) {
+               TDB_LOG((tdb, TDB_DEBUG_FATAL, __location__ " Failed to traverse copying back\n"));
+               tdb_transaction_cancel(tdb);
+               tdb_close(tmp_db);
+               return -1;              
+       }
+
+       if (state.error) {
+               TDB_LOG((tdb, TDB_DEBUG_FATAL, __location__ " Error during second traversal\n"));
+               tdb_transaction_cancel(tdb);
+               tdb_close(tmp_db);
+               return -1;
+       }
+
+       tdb_close(tmp_db);
+
+       if (tdb_transaction_commit(tdb) != 0) {
+               TDB_LOG((tdb, TDB_DEBUG_FATAL, __location__ " Failed to commit\n"));
+               return -1;
+       }
+
+       return 0;
+}
index c41c9941f0691074b59ec73e36f4ff003a9e9ef9..94b5e366b90cd28002ca4c21e405a0f2197b5ffb 100644 (file)
@@ -152,11 +152,14 @@ int tdb_chainlock_unmark(struct tdb_context *tdb, TDB_DATA key);
 
 void tdb_setalarm_sigptr(struct tdb_context *tdb, volatile sig_atomic_t *sigptr);
 
+/* wipe and repack */
+int tdb_wipe_all(struct tdb_context *tdb);
+int tdb_repack(struct tdb_context *tdb);
+
 /* Debug functions. Not used in production. */
 void tdb_dump_all(struct tdb_context *tdb);
 int tdb_printfreelist(struct tdb_context *tdb);
 int tdb_validate_freelist(struct tdb_context *tdb, int *pnum_entries);
-int tdb_wipe_all(struct tdb_context *tdb);
 int tdb_freelist_size(struct tdb_context *tdb);
 
 extern TDB_DATA tdb_null;
index 6f3ca48314f0ccbb0b48bcecf1637e0e3f628290..83c0e16399e1e1792559882e7dec73ca623e32ee 100644 (file)
@@ -126,9 +126,17 @@ static int backup_tdb(const char *old_name, const char *new_name, int hash_size)
                return 1;
        }
 
-       /* lock the old tdb */
-       if (tdb_lockall(tdb) != 0) {
-               fprintf(stderr,"Failed to lock %s\n", old_name);
+       if (tdb_transaction_start(tdb) != 0) {
+               printf("Failed to start transaction on old tdb\n");
+               tdb_close(tdb);
+               tdb_close(tdb_new);
+               unlink(tmp_name);
+               free(tmp_name);
+               return 1;
+       }
+
+       if (tdb_transaction_start(tdb_new) != 0) {
+               printf("Failed to start transaction on new tdb\n");
                tdb_close(tdb);
                tdb_close(tdb_new);
                unlink(tmp_name);
@@ -152,6 +160,14 @@ static int backup_tdb(const char *old_name, const char *new_name, int hash_size)
        /* close the old tdb */
        tdb_close(tdb);
 
+       if (tdb_transaction_commit(tdb_new) != 0) {
+               fprintf(stderr, "Failed to commit new tdb\n");
+               tdb_close(tdb_new);
+               unlink(tmp_name);
+               free(tmp_name);         
+               return 1;
+       }
+
        /* close the new tdb and re-open read-only */
        tdb_close(tdb_new);
        tdb_new = tdb_open(tmp_name, 0, TDB_DEFAULT, O_RDONLY, 0);
@@ -173,9 +189,6 @@ static int backup_tdb(const char *old_name, const char *new_name, int hash_size)
                return 1;
        }
 
-       /* make sure the new tdb has reached stable storage */
-       fsync(tdb_fd(tdb_new));
-
        /* close the new tdb and rename it to .bak */
        tdb_close(tdb_new);
        if (rename(tmp_name, new_name) != 0) {
index d104ccd7c44994e9d0f8ba138cbf4584343983dc..1ecad62a3deeb2dc3ad780fd1ef8cfebb822fda7 100644 (file)
@@ -57,6 +57,7 @@ enum commands {
        CMD_FIRST,
        CMD_NEXT,
        CMD_SYSTEM,
+       CMD_CHECK,
        CMD_QUIT,
        CMD_HELP
 };
@@ -87,6 +88,7 @@ COMMAND_TABLE cmd_table[] = {
        {"1",           CMD_FIRST},
        {"next",        CMD_NEXT},
        {"n",           CMD_NEXT},
+       {"check",       CMD_CHECK},
        {"quit",        CMD_QUIT},
        {"q",           CMD_QUIT},
        {"!",           CMD_SYSTEM},
@@ -179,7 +181,8 @@ static void help(void)
 "  delete    key        : delete a record by key\n"
 "  list                 : print the database hash table and freelist\n"
 "  free                 : print the database freelist\n"
-"  ! command            : execute system command\n"             
+"  check                : check the integrity of an opened database\n"
+"  ! command            : execute system command\n"
 "  1 | first            : print the first record\n"
 "  n | next             : print the next record\n"
 "  q | quit             : terminate\n"
@@ -452,6 +455,27 @@ static void next_record(TDB_CONTEXT *the_tdb, TDB_DATA *pkey)
                print_rec(the_tdb, *pkey, dbuf, NULL);
 }
 
+static int test_fn(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, void *state)
+{
+       return 0;
+}
+
+static void check_db(TDB_CONTEXT *the_tdb)
+{
+       int tdbcount=-1;
+       if (the_tdb) {
+               tdbcount = tdb_traverse(the_tdb, test_fn, NULL);
+       } else {
+               printf("Error: No database opened!\n");
+       }
+
+       if (tdbcount<0) {
+               printf("Integrity check for the opened database failed.\n");
+       } else {
+               printf("Database integrity is OK and has %d records.\n", tdbcount);
+       }
+}
+
 static int do_command(void)
 {
        COMMAND_TABLE *ctp = cmd_table;
@@ -552,6 +576,9 @@ static int do_command(void)
               if (bIterate)
                  next_record(tdb, &iterate_kbuf);
                return 0;
+           case CMD_CHECK:
+               check_db(tdb);
+               return 0;
            case CMD_HELP:
                help();
                return 0;
similarity index 78%
rename from source4/nsswitch/config.m4
rename to nsswitch/config.m4
index 207b7fa53ff5d3e7f6609cd2d0ea21725683ac02..2c8fa17ad98c9cf0b1d1e7fb090bff95cb256cf0 100644 (file)
@@ -3,10 +3,9 @@ AC_CHECK_HEADERS(nss.h nss_common.h ns_api.h )
 case "$host_os" in
        *linux*)
                SMB_LIBRARY(nss_winbind,
-                           [nsswitch/winbind_nss_linux.o],
+                           [../nsswitch/winbind_nss_linux.o],
                            [LIBWINBIND-CLIENT])
        ;;
        *)
        ;;
 esac
-
similarity index 95%
rename from source4/nsswitch/config.mk
rename to nsswitch/config.mk
index e8b9600882f1715f7cbbf19fb85dcd251f2a76ec..3a4f054d1f9f2b24095d80532ec8a030502564af 100644 (file)
@@ -31,4 +31,4 @@ PRIVATE_DEPENDENCIES = \
 #################################
 
 wbinfo_OBJ_FILES = \
-               $(nsswitchsrcdir)/wbinfo.o
+               $(nsswitchsrcdir)/wbinfo4.o
similarity index 82%
rename from source3/nsswitch/libwbclient/Doxyfile
rename to nsswitch/libwbclient/Doxyfile
index e12c2b06f03899dcbc5c8ca382a39aee2b7b1cc8..529a16fd6a035ac8a225533d09da1de1f9cbfe19 100644 (file)
 # Project related configuration options
 #---------------------------------------------------------------------------
 
-# This tag specifies the encoding used for all characters in the config file that 
-# follow. The default is UTF-8 which is also the encoding used for all text before 
-# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into 
-# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of 
+# This tag specifies the encoding used for all characters in the config file that
+# follow. The default is UTF-8 which is also the encoding used for all text before
+# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
+# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
 # possible encodings.
 
 DOXYFILE_ENCODING      = UTF-8
 
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
 # by quotes) that should identify the project.
 
 PROJECT_NAME           = Samba
 
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
 # if some version control system is used.
 
 PROJECT_NUMBER         = HEAD
 
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
 # where doxygen was started. If left blank the current directory will be used.
 
 OUTPUT_DIRECTORY       = dox
 
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
-# 4096 sub-directories (in 2 levels) under the output directory of each output 
-# format and will distribute the generated files over these directories. 
-# Enabling this option can be useful when feeding doxygen a huge amount of 
-# source files, where putting all generated files in the same directory would 
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
 # otherwise cause performance problems for the file system.
 
 CREATE_SUBDIRS         = NO
 
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
-# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, 
-# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, 
-# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, 
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
+# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
+# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
 # Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
 
 OUTPUT_LANGUAGE        = English
 
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
 # Set to NO to disable this.
 
 BRIEF_MEMBER_DESC      = YES
 
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
 # brief descriptions will be completely suppressed.
 
 REPEAT_BRIEF           = YES
 
-# This tag implements a quasi-intelligent brief description abbreviator 
-# that is used to form the text in various listings. Each string 
-# in this list, if found as the leading text of the brief description, will be 
-# stripped from the text and the result after processing the whole list, is 
-# used as the annotated text. Otherwise, the brief description is used as-is. 
-# If left blank, the following values are used ("$name" is automatically 
-# replaced with the name of the entity): "The $name class" "The $name widget" 
-# "The $name file" "is" "provides" "specifies" "contains" 
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
 # "represents" "a" "an" "the"
 
-ABBREVIATE_BRIEF       = 
+ABBREVIATE_BRIEF       =
 
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
 # description.
 
 ALWAYS_DETAILED_SEC    = NO
 
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
-# inherited members of a class in the documentation of that class as if those 
-# members were ordinary class members. Constructors, destructors and assignment 
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
 # operators of the base classes will not be shown.
 
 INLINE_INHERITED_MEMB  = NO
 
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
 # to NO the shortest path that makes the file name unique will be used.
 
 FULL_PATH_NAMES        = YES
 
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user-defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. The tag can be used to show relative paths in the file list. 
-# If left blank the directory from which doxygen is run is used as the 
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
 # path to strip.
 
 STRIP_FROM_PATH        = $(PWD)/
 
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
-# the path mentioned in the documentation of a class, which tells 
-# the reader which header file to include in order to use a class. 
-# If left blank only the name of the header file containing the class 
-# definition is used. Otherwise one should specify the include paths that 
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
 # are normally passed to the compiler using the -I flag.
 
-STRIP_FROM_INC_PATH    = 
+STRIP_FROM_INC_PATH    =
 
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
 # doesn't support long names like on DOS, Mac, or CD-ROM.
 
 SHORT_NAMES            = NO
 
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments will behave just like regular Qt-style comments 
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
 # (thus requiring an explicit @brief command for a brief description.)
 
 JAVADOC_AUTOBRIEF      = YES
 
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
-# interpret the first line (until the first dot) of a Qt-style 
-# comment as the brief description. If set to NO, the comments 
-# will behave just like regular Qt-style comments (thus requiring 
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
 # an explicit \brief command for a brief description.)
 
 QT_AUTOBRIEF           = NO
 
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
 # description. Set this tag to YES if you prefer the old behaviour instead.
 
 MULTILINE_CPP_IS_BRIEF = NO
 
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
 # will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member 
+# If set to NO, the detailed description appears after the member
 # documentation.
 
 DETAILS_AT_TOP         = NO
 
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
 # re-implements.
 
 INHERIT_DOCS           = YES
 
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
-# a new page for each member. If set to NO, the documentation of a member will 
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
 # be part of the file/class/namespace that contains it.
 
 SEPARATE_MEMBER_PAGES  = NO
 
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
 # Doxygen uses this value to replace tabs by spaces in code fragments.
 
 TAB_SIZE               = 8
 
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user-defined paragraph with heading "Side Effects:". 
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
 # You can put \n's in the value part of an alias to insert newlines.
 
-ALIASES                = 
+ALIASES                =
 
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
-# sources only. Doxygen will then generate output that is more tailored for C. 
-# For instance, some of the names that are used will be different. The list 
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
 # of all members will be omitted, etc.
 
 OPTIMIZE_OUTPUT_FOR_C  = YES
 
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
-# sources only. Doxygen will then generate output that is more tailored for Java. 
-# For instance, namespaces will be presented as packages, qualified scopes 
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
 # will look different, etc.
 
 OPTIMIZE_OUTPUT_JAVA   = NO
 
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
-# include (a tag file for) the STL sources as input, then you should 
-# set this tag to YES in order to let doxygen match functions declarations and 
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
-# func(std::string) {}). This also make the inheritance and collaboration 
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
+# include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
 # diagrams that involve STL classes more complete and accurate.
 
 BUILTIN_STL_SUPPORT    = NO
@@ -215,17 +215,17 @@ BUILTIN_STL_SUPPORT    = NO
 
 CPP_CLI_SUPPORT        = NO
 
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
 # all members of a group must be documented explicitly.
 
 DISTRIBUTE_GROUP_DOC   = NO
 
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
-# the same type (for instance a group of public functions) to be put as a 
-# subgroup of that type (e.g. under the Public Functions section). Set it to 
-# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
 # the \nosubgrouping command.
 
 SUBGROUPING            = YES
@@ -234,350 +234,350 @@ SUBGROUPING            = YES
 # Build related configuration options
 #---------------------------------------------------------------------------
 
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
 
 EXTRACT_ALL            = YES
 
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
 # will be included in the documentation.
 
 EXTRACT_PRIVATE        = YES
 
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
 # will be included in the documentation.
 
 EXTRACT_STATIC         = YES
 
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
 # If set to NO only classes defined in header files are included.
 
 EXTRACT_LOCAL_CLASSES  = YES
 
-# This flag is only useful for Objective-C code. When set to YES local 
-# methods, which are defined in the implementation section but not in 
-# the interface are included in the documentation. 
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
 # If set to NO (the default) only methods in the interface are included.
 
 EXTRACT_LOCAL_METHODS  = NO
 
-# If this flag is set to YES, the members of anonymous namespaces will be extracted 
-# and appear in the documentation as a namespace called 'anonymous_namespace{file}', 
-# where file will be replaced with the base name of the file that contains the anonymous 
+# If this flag is set to YES, the members of anonymous namespaces will be extracted
+# and appear in the documentation as a namespace called 'anonymous_namespace{file}',
+# where file will be replaced with the base name of the file that contains the anonymous
 # namespace. By default anonymous namespace are hidden.
 
 EXTRACT_ANON_NSPACES   = NO
 
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
 # This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_MEMBERS     = NO
 
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these classes will be included in the various 
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
 # overviews. This option has no effect if EXTRACT_ALL is enabled.
 
 HIDE_UNDOC_CLASSES     = NO
 
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
 # documentation.
 
 HIDE_FRIEND_COMPOUNDS  = NO
 
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
 # function's detailed documentation block.
 
 HIDE_IN_BODY_DOCS      = NO
 
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
 # Set it to YES to include the internal documentation.
 
 INTERNAL_DOCS          = YES
 
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower-case letters. If set to YES upper-case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
 # and Mac users are advised to set this option to NO.
 
 CASE_SENSE_NAMES       = YES
 
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
 # documentation. If set to YES the scope will be hidden.
 
 HIDE_SCOPE_NAMES       = YES
 
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put a list of the files that are included by a file in the documentation 
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
 # of that file.
 
 SHOW_INCLUDE_FILES     = YES
 
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
 # is inserted in the documentation for inline members.
 
 INLINE_INFO            = YES
 
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
 # declaration order.
 
 SORT_MEMBER_DOCS       = NO
 
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
-# brief documentation of file, namespace and class members alphabetically 
-# by member name. If set to NO (the default) the members will appear in 
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
 # declaration order.
 
 SORT_BRIEF_DOCS        = NO
 
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
-# sorted by fully-qualified names, including namespaces. If set to 
-# NO (the default), the class list will be sorted only by class name, 
-# not including the namespace part. 
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the 
+# Note: This option applies only to the class list, not to the
 # alphabetical list.
 
 SORT_BY_SCOPE_NAME     = NO
 
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
 # commands in the documentation.
 
 GENERATE_TODOLIST      = YES
 
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
 # commands in the documentation.
 
 GENERATE_TESTLIST      = YES
 
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
 # commands in the documentation.
 
 GENERATE_BUGLIST       = YES
 
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting 
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
 # \deprecated commands in the documentation.
 
 GENERATE_DEPRECATEDLIST= YES
 
-# The ENABLED_SECTIONS tag can be used to enable conditional 
+# The ENABLED_SECTIONS tag can be used to enable conditional
 # documentation sections, marked by \if sectionname ... \endif.
 
-ENABLED_SECTIONS       = 
+ENABLED_SECTIONS       =
 
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or define consists of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and defines in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
 # command in the documentation regardless of this setting.
 
 MAX_INITIALIZER_LINES  = 30
 
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
 # list will mention the files that were used to generate the documentation.
 
 SHOW_USED_FILES        = YES
 
-# If the sources in your project are distributed over multiple directories 
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
 # in the documentation. The default is NO.
 
 SHOW_DIRECTORIES       = NO
 
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
-# doxygen should invoke to get the current version for each file (typically from the 
-# version control system). Doxygen will invoke the program by executing (via 
-# popen()) the command <command> <input-file>, where <command> is the value of 
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
-# provided by doxygen. Whatever the program writes to standard output 
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
 # is used as the file version. See the manual for examples.
 
-FILE_VERSION_FILTER    = 
+FILE_VERSION_FILTER    =
 
 #---------------------------------------------------------------------------
 # configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
 
-# The QUIET tag can be used to turn on/off the messages that are generated 
+# The QUIET tag can be used to turn on/off the messages that are generated
 # by doxygen. Possible values are YES and NO. If left blank NO is used.
 
 QUIET                  = YES
 
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
 # NO is used.
 
 WARNINGS               = NO
 
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
 # automatically be disabled.
 
 WARN_IF_UNDOCUMENTED   = NO
 
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
-# potential errors in the documentation, such as not documenting some 
-# parameters in a documented function, or documenting parameters that 
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
 # don't exist or using markup commands wrongly.
 
 WARN_IF_DOC_ERROR      = YES
 
-# This WARN_NO_PARAMDOC option can be abled to get warnings for 
-# functions that are documented, but have no documentation for their parameters 
-# or return value. If set to NO (the default) doxygen will only warn about 
-# wrong or incomplete parameter documentation, but not about the absence of 
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
 # documentation.
 
 WARN_NO_PARAMDOC       = NO
 
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text. Optionally the format may contain 
-# $version, which will be replaced by the version of the file (if it could 
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
 # be obtained via FILE_VERSION_FILTER)
 
 WARN_FORMAT            = "$file:$line: $text "
 
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
 # to stderr.
 
-WARN_LOGFILE           = 
+WARN_LOGFILE           =
 
 #---------------------------------------------------------------------------
 # configuration options related to the input files
 #---------------------------------------------------------------------------
 
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
 # with spaces.
 
 INPUT                  = .
 
-# This tag can be used to specify the character encoding of the source files that 
-# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
-# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. 
+# This tag can be used to specify the character encoding of the source files that
+# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
+# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
 # See http://www.gnu.org/software/libiconv for the list of possible encodings.
 
 INPUT_ENCODING         = UTF-8
 
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
 
 FILE_PATTERNS          = *.c \
                          *.h \
                          *.idl
 
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
 # If left blank NO is used.
 
 RECURSIVE              = YES
 
-# The EXCLUDE tag can be used to specify files and/or directories that should 
-# excluded from the INPUT source files. This way you can easily exclude a 
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
 # subdirectory from a directory tree whose root is specified with the INPUT tag.
 
 EXCLUDE                = include/includes.h \
                          include/proto.h
 
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
-# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
 # from the input.
 
 EXCLUDE_SYMLINKS       = NO
 
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories. Note that the wildcards are matched 
-# against the file with absolute path, so to exclude all test directories 
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
 # for example use the pattern */test/*
 
-EXCLUDE_PATTERNS       = 
+EXCLUDE_PATTERNS       =
 
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
-# (namespaces, classes, functions, etc.) that should be excluded from the output. 
-# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, 
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the output.
+# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
 # a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
 
-EXCLUDE_SYMBOLS        = 
+EXCLUDE_SYMBOLS        =
 
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
 # the \include command).
 
-EXAMPLE_PATH           = 
+EXAMPLE_PATH           =
 
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
 # blank all files are included.
 
-EXAMPLE_PATTERNS       = 
+EXAMPLE_PATTERNS       =
 
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
 # Possible values are YES and NO. If left blank NO is used.
 
 EXAMPLE_RECURSIVE      = NO
 
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
 # the \image command).
 
-IMAGE_PATH             = 
+IMAGE_PATH             =
 
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be
 # ignored.
 
-INPUT_FILTER           = 
+INPUT_FILTER           =
 
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
-# basis.  Doxygen will compare the file name with each pattern and apply the 
-# filter if there is a match.  The filters are a list of the form: 
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.  Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.  The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
 # is applied to all files.
 
-FILTER_PATTERNS        = 
+FILTER_PATTERNS        =
 
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
 # files to browse (i.e. when SOURCE_BROWSER is set to YES).
 
 FILTER_SOURCE_FILES    = NO
@@ -586,34 +586,34 @@ FILTER_SOURCE_FILES    = NO
 # configuration options related to source browsing
 #---------------------------------------------------------------------------
 
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these sources. 
-# Note: To get rid of all source code in the generated output, make sure also 
-# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH 
-# then you must also enable this option. If you don't then doxygen will produce 
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH
+# then you must also enable this option. If you don't then doxygen will produce
 # a warning and turn it on anyway
 
 SOURCE_BROWSER         = YES
 
-# Setting the INLINE_SOURCES tag to YES will include the body 
+# Setting the INLINE_SOURCES tag to YES will include the body
 # of functions and classes directly in the documentation.
 
 INLINE_SOURCES         = YES
 
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
 # fragments. Normal C and C++ comments will always remain visible.
 
 STRIP_CODE_COMMENTS    = NO
 
-# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
-# then for each documented function all documented 
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
 # functions referencing it will be listed.
 
 REFERENCED_BY_RELATION = YES
 
-# If the REFERENCES_RELATION tag is set to YES (the default) 
-# then for each documented function all documented entities 
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
 # called/used by that function will be listed.
 
 REFERENCES_RELATION    = YES
@@ -625,16 +625,16 @@ REFERENCES_RELATION    = YES
 
 REFERENCES_LINK_SOURCE = YES
 
-# If the USE_HTAGS tag is set to YES then the references to source code 
-# will point to the HTML generated by the htags(1) tool instead of doxygen 
-# built-in source browser. The htags tool is part of GNU's global source 
-# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
 # will need version 4.8.6 or higher.
 
 USE_HTAGS              = NO
 
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
 # which an include is specified. Set to NO to disable this.
 
 VERBATIM_HEADERS       = YES
@@ -643,141 +643,141 @@ VERBATIM_HEADERS       = YES
 # configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
 
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
 # contains a lot of classes, structs, unions or interfaces.
 
 ALPHABETICAL_INDEX     = YES
 
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
 # in which this list will be split (can be a number in the range [1..20])
 
 COLS_IN_ALPHA_INDEX    = 1
 
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
 # should be ignored while generating the index headers.
 
-IGNORE_PREFIX          = 
+IGNORE_PREFIX          =
 
 #---------------------------------------------------------------------------
 # configuration options related to the HTML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
 # generate HTML output.
 
 GENERATE_HTML          = YES
 
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `html' will be used as the default path.
 
 HTML_OUTPUT            = .
 
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
 # doxygen will generate files with .html extension.
 
 HTML_FILE_EXTENSION    = .html
 
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
 # standard header.
 
-HTML_HEADER            = 
+HTML_HEADER            =
 
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
 # standard footer.
 
-HTML_FOOTER            = 
+HTML_FOOTER            =
 
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet. Note that doxygen will try to copy 
-# the style sheet file to the HTML output directory, so don't put your own 
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
 # stylesheet in the HTML output directory as well, or it will be erased!
 
-HTML_STYLESHEET        = 
+HTML_STYLESHEET        =
 
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
 # NO a bullet list will be used.
 
 HTML_ALIGN_MEMBERS     = YES
 
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
 # of the generated HTML documentation.
 
 GENERATE_HTMLHELP      = NO
 
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
-# documentation will contain sections that can be hidden and shown after the 
-# page has loaded. For this to work a browser that supports 
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
 # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
 
 HTML_DYNAMIC_SECTIONS  = NO
 
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
 # written to the html output directory.
 
-CHM_FILE               = 
+CHM_FILE               =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
 # the HTML help compiler on the generated index.hhp.
 
-HHC_LOCATION           = 
+HHC_LOCATION           =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
 # it should be included in the master .chm file (NO).
 
 GENERATE_CHI           = NO
 
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
 # normal table of contents (NO) in the .chm file.
 
 BINARY_TOC             = NO
 
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
 # to the contents of the HTML help documentation and to the tree view.
 
 TOC_EXPAND             = NO
 
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-# top of each HTML page. The value NO (the default) enables the index and 
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
 # the value YES disables it.
 
 DISABLE_INDEX          = NO
 
-# This tag can be used to set the number of enum values (range [1..20]) 
+# This tag can be used to set the number of enum values (range [1..20])
 # that doxygen will group on one line in the generated HTML documentation.
 
 ENUM_VALUES_PER_LINE   = 3
 
 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
 # probably better off using the HTML help feature.
 
 GENERATE_TREEVIEW      = NO
 
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
 # is shown.
 
 TREEVIEW_WIDTH         = 250
@@ -786,74 +786,74 @@ TREEVIEW_WIDTH         = 250
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
 # generate Latex output.
 
 GENERATE_LATEX         = NO
 
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `latex' will be used as the default path.
 
 LATEX_OUTPUT           = latex
 
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
 # invoked. If left blank `latex' will be used as the default command name.
 
 LATEX_CMD_NAME         = latex
 
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
 # default command name.
 
 MAKEINDEX_CMD_NAME     = makeindex
 
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
 # save some trees in general.
 
 COMPACT_LATEX          = NO
 
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
 # executive. If left blank a4wide will be used.
 
 PAPER_TYPE             = a4wide
 
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
 # packages that should be included in the LaTeX output.
 
-EXTRA_PACKAGES         = 
+EXTRA_PACKAGES         =
 
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
 # standard header. Notice: only use this tag if you know what you are doing!
 
-LATEX_HEADER           = 
+LATEX_HEADER           =
 
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
 # This makes the output suitable for online browsing using a pdf viewer.
 
 PDF_HYPERLINKS         = YES
 
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
 # higher quality PDF documentation.
 
 USE_PDFLATEX           = YES
 
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
 # This option is also used when generating formulas in HTML.
 
 LATEX_BATCHMODE        = YES
 
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
-# include the index chapters (such as File Index, Compound Index, etc.) 
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
 # in the output.
 
 LATEX_HIDE_INDICES     = NO
@@ -862,68 +862,68 @@ LATEX_HIDE_INDICES     = NO
 # configuration options related to the RTF output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimized for Word 97 and may not look very pretty with 
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
 # other RTF readers or editors.
 
 GENERATE_RTF           = NO
 
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `rtf' will be used as the default path.
 
 RTF_OUTPUT             = rtf
 
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
 # save some trees in general.
 
 COMPACT_RTF            = NO
 
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
 # Note: wordpad (write) and others do not support links.
 
 RTF_HYPERLINKS         = NO
 
-# Load stylesheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assignments. You only have to provide 
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
 # replacements, missing definitions are set to their default value.
 
-RTF_STYLESHEET_FILE    = 
+RTF_STYLESHEET_FILE    =
 
-# Set optional variables used in the generation of an rtf document. 
+# Set optional variables used in the generation of an rtf document.
 # Syntax is similar to doxygen's config file.
 
-RTF_EXTENSIONS_FILE    = 
+RTF_EXTENSIONS_FILE    =
 
 #---------------------------------------------------------------------------
 # configuration options related to the man page output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
 # generate man pages
 
 GENERATE_MAN           = NO
 
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `man' will be used as the default path.
 
 MAN_OUTPUT             = man
 
-# The MAN_EXTENSION tag determines the extension that is added to 
+# The MAN_EXTENSION tag determines the extension that is added to
 # the generated man pages (default is the subroutine's section .3)
 
 MAN_EXTENSION          = .3
 
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
 # would be unable to find the correct page. The default is NO.
 
 MAN_LINKS              = NO
@@ -932,33 +932,33 @@ MAN_LINKS              = NO
 # configuration options related to the XML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
 # the code including all documentation.
 
 GENERATE_XML           = NO
 
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
 # put in front of it. If left blank `xml' will be used as the default path.
 
 XML_OUTPUT             = xml
 
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
 # syntax of the XML files.
 
-XML_SCHEMA             = 
+XML_SCHEMA             =
 
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
 # syntax of the XML files.
 
-XML_DTD                = 
+XML_DTD                =
 
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
-# dump the program listings (including syntax highlighting 
-# and cross-referencing information) to the XML output. Note that 
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
 # enabling this will significantly increase the size of the XML output.
 
 XML_PROGRAMLISTING     = YES
@@ -967,10 +967,10 @@ XML_PROGRAMLISTING     = YES
 # configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
 # and incomplete at the moment.
 
 GENERATE_AUTOGEN_DEF   = NO
@@ -979,319 +979,319 @@ GENERATE_AUTOGEN_DEF   = NO
 # configuration options related to the Perl module output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
-# generate a Perl module file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
 # moment.
 
 GENERATE_PERLMOD       = NO
 
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
 # to generate PDF and DVI output from the Perl module output.
 
 PERLMOD_LATEX          = NO
 
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
-# nicely formatted so it can be parsed by a human reader.  This is useful 
-# if you want to understand what is going on.  On the other hand, if this 
-# tag is set to NO the size of the Perl module output will be much smaller 
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.  This is useful
+# if you want to understand what is going on.  On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
 # and Perl will parse it just the same.
 
 PERLMOD_PRETTY         = YES
 
-# The names of the make variables in the generated doxyrules.make file 
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
-# This is useful so different doxyrules.make files included by the same 
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
 # Makefile don't overwrite each other's variables.
 
-PERLMOD_MAKEVAR_PREFIX = 
+PERLMOD_MAKEVAR_PREFIX =
 
 #---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
+# Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
 
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
 # files.
 
 ENABLE_PREPROCESSING   = NO
 
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
 # way by setting EXPAND_ONLY_PREDEF to YES.
 
 MACRO_EXPANSION        = NO
 
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
 # PREDEFINED and EXPAND_AS_DEFINED tags.
 
 EXPAND_ONLY_PREDEF     = NO
 
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
 # in the INCLUDE_PATH (see below) will be search if a #include is found.
 
 SEARCH_INCLUDES        = YES
 
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
 # the preprocessor.
 
-INCLUDE_PATH           = 
+INCLUDE_PATH           =
 
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
 # be used.
 
-INCLUDE_FILE_PATTERNS  = 
+INCLUDE_FILE_PATTERNS  =
 
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed. To prevent a macro definition from being 
-# undefined via #undef or recursively expanded use the := operator 
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
 # instead of the = operator.
 
-PREDEFINED             = 
+PREDEFINED             =
 
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be expanded. 
-# The macro definition that is found in the sources will be used. 
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
 # Use the PREDEFINED tag if you want to use a different macro definition.
 
-EXPAND_AS_DEFINED      = 
+EXPAND_AS_DEFINED      =
 
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all function-like macros that are alone 
-# on a line, have an all uppercase name, and do not end with a semicolon. Such 
-# function macros are typically used for boiler-plate code, and will confuse 
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
 # the parser if not removed.
 
 SKIP_FUNCTION_MACROS   = YES
 
 #---------------------------------------------------------------------------
-# Configuration::additions related to external references   
+# Configuration::additions related to external references
 #---------------------------------------------------------------------------
 
-# The TAGFILES option can be used to specify one or more tagfiles. 
-# Optionally an initial location of the external documentation 
-# can be added for each tagfile. The format of a tag file without 
-# this location is as follows: 
-#   TAGFILES = file1 file2 ... 
-# Adding location for the tag files is done as follows: 
-#   TAGFILES = file1=loc1 "file2 = loc2" ... 
-# where "loc1" and "loc2" can be relative or absolute paths or 
-# URLs. If a location is present for each tag, the installdox tool 
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#   TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#   TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
 # does not have to be run to correct the links.
 # Note that each tag file must have a unique name
 # (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen 
+# If a tag file is not located in the directory in which doxygen
 # is run, you must also specify the path to the tagfile here.
 
-TAGFILES               = 
+TAGFILES               =
 
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
 # a tag file that is based on the input files it reads.
 
-GENERATE_TAGFILE       = 
+GENERATE_TAGFILE       =
 
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
 # will be listed.
 
 ALLEXTERNALS           = NO
 
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
 # be listed.
 
 EXTERNAL_GROUPS        = YES
 
-# The PERL_PATH should be the absolute path and name of the perl script 
+# The PERL_PATH should be the absolute path and name of the perl script
 # interpreter (i.e. the result of `which perl').
 
 PERL_PATH              = /usr/bin/perl
 
 #---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
+# Configuration options related to the dot tool
 #---------------------------------------------------------------------------
 
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
-# or super classes. Setting the tag to NO turns the diagrams off. Note that 
-# this option is superseded by the HAVE_DOT option below. This is only a 
-# fallback. It is recommended to install and use dot, since it yields more 
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
 # powerful graphs.
 
 CLASS_DIAGRAMS         = YES
 
-# You can define message sequence charts within doxygen comments using the \msc 
-# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to 
-# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to 
-# specify the directory where the mscgen tool resides. If left empty the tool is assumed to 
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
+# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
+# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
 # be found in the default search path.
 
-MSCGEN_PATH            = 
+MSCGEN_PATH            =
 
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
 # or is not a class.
 
 HIDE_UNDOC_RELATIONS   = YES
 
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
 # have no effect if this option is set to NO (the default)
 
 HAVE_DOT               = NO
 
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
 # the CLASS_DIAGRAMS tag to NO.
 
 CLASS_GRAPH            = YES
 
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
 # class references variables) of the class with other documented classes.
 
 COLLABORATION_GRAPH    = YES
 
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
 # will generate a graph for groups, showing the direct groups dependencies
 
 GROUP_GRAPHS           = YES
 
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
-# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
 # Language.
 
 UML_LOOK               = NO
 
-# If set to YES, the inheritance and collaboration graphs will show the 
+# If set to YES, the inheritance and collaboration graphs will show the
 # relations between templates and their instances.
 
 TEMPLATE_RELATIONS     = YES
 
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
 # other documented files.
 
 INCLUDE_GRAPH          = YES
 
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
 # indirectly include this file.
 
 INCLUDED_BY_GRAPH      = YES
 
-# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will 
-# generate a call dependency graph for every global function or class method. 
-# Note that enabling this option will significantly increase the time of a run. 
-# So in most cases it will be better to enable call graphs for selected 
+# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
 # functions only using the \callgraph command.
 
 CALL_GRAPH             = NO
 
-# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will 
-# generate a caller dependency graph for every global function or class method. 
-# Note that enabling this option will significantly increase the time of a run. 
-# So in most cases it will be better to enable caller graphs for selected 
+# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will
+# generate a caller dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
 # functions only using the \callergraph command.
 
 CALLER_GRAPH           = NO
 
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
 # will graphical hierarchy of all classes instead of a textual one.
 
 GRAPHICAL_HIERARCHY    = YES
 
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
-# then doxygen will show the dependencies a directory has on other directories 
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
 # in a graphical way. The dependency relations are determined by the #include
 # relations between the files in the directories.
 
 DIRECTORY_GRAPH        = YES
 
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
 # generated by dot. Possible values are png, jpg, or gif
 # If left blank png will be used.
 
 DOT_IMAGE_FORMAT       = png
 
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
 # found. If left blank, it is assumed the dot tool can be found in the path.
 
-DOT_PATH               = 
+DOT_PATH               =
 
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
 # \dotfile command).
 
-DOTFILE_DIRS           = 
+DOTFILE_DIRS           =
 
-# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
-# nodes that will be shown in the graph. If the number of nodes in a graph 
-# becomes larger than this value, doxygen will truncate the graph, which is 
-# visualized by representing a node as a red box. Note that doxygen if the number 
-# of direct children of the root node in a graph is already larger than 
-# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note 
+# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the number
+# of direct children of the root node in a graph is already larger than
+# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note
 # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
 
 DOT_GRAPH_MAX_NODES    = 50
 
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
-# graphs generated by dot. A depth value of 3 means that only nodes reachable 
-# from the root by following a path via at most 3 edges will be shown. Nodes 
-# that lay further from the root node will be omitted. Note that setting this 
-# option to 1 or 2 may greatly reduce the computation time needed for large 
-# code bases. Also note that the size of a graph can be further restricted by 
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
 
 MAX_DOT_GRAPH_DEPTH    = 0
 
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
-# background. This is disabled by default, which results in a white background. 
-# Warning: Depending on the platform used, enabling this option may lead to 
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, which results in a white background.
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
 # read).
 
 DOT_TRANSPARENT        = NO
 
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
-# files in one run (i.e. multiple -o and -T options on the command line). This 
-# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
 # support this, this feature is disabled by default.
 
 DOT_MULTI_TARGETS      = NO
 
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
 # arrows in the dot generated graphs.
 
 GENERATE_LEGEND        = YES
 
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermediate dot files that are used to generate 
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
 # the various graphs.
 
 DOT_CLEANUP            = YES
 
 #---------------------------------------------------------------------------
-# Configuration::additions related to the search engine   
+# Configuration::additions related to the search engine
 #---------------------------------------------------------------------------
 
-# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# The SEARCHENGINE tag specifies whether or not a search engine should be
 # used. If set to NO the values of all tags below this one will be ignored.
 
 SEARCHENGINE           = NO
similarity index 98%
rename from source3/nsswitch/libwbclient/wbc_util.c
rename to nsswitch/libwbclient/wbc_util.c
index 7cfb64b87e9d9749a3b788ff3fd3db3459072612..5c5034ee13f4e5006353901c1a5e45d94d7d5916 100644 (file)
@@ -299,7 +299,7 @@ static wbcErr process_domain_info_string(TALLOC_CTX *ctx,
 
        wbc_status = wbcStringToSid(r, &info->sid);
        BAIL_ON_WBC_ERROR(wbc_status);
-       
+
        /* Trust type */
        r = s;
        if ((s = strchr(r, '\\')) == NULL) {
@@ -332,9 +332,9 @@ static wbcErr process_domain_info_string(TALLOC_CTX *ctx,
        s++;
 
        if (strcmp(r, "Yes") == 0) {
-               info->trust_flags |= WBC_DOMINFO_TRUST_TRANSITIVE;              
+               info->trust_flags |= WBC_DOMINFO_TRUST_TRANSITIVE;
        }
-       
+
        /* Incoming */
        r = s;
        if ((s = strchr(r, '\\')) == NULL) {
@@ -345,7 +345,7 @@ static wbcErr process_domain_info_string(TALLOC_CTX *ctx,
        s++;
 
        if (strcmp(r, "Yes") == 0) {
-               info->trust_flags |= WBC_DOMINFO_TRUST_INCOMING;                
+               info->trust_flags |= WBC_DOMINFO_TRUST_INCOMING;
        }
 
        /* Outgoing */
@@ -358,7 +358,7 @@ static wbcErr process_domain_info_string(TALLOC_CTX *ctx,
        s++;
 
        if (strcmp(r, "Yes") == 0) {
-               info->trust_flags |= WBC_DOMINFO_TRUST_OUTGOING;                
+               info->trust_flags |= WBC_DOMINFO_TRUST_OUTGOING;
        }
 
        /* Online/Offline status */
@@ -385,14 +385,14 @@ wbcErr wbcListTrusts(struct wbcDomainInfo **domains, size_t *num_domains)
        wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE;
        char *p = NULL;
        char *q = NULL;
-       char *extra_data = NULL;        
-       int count = 0;  
+       char *extra_data = NULL;
+       int count = 0;
        struct wbcDomainInfo *d_list = NULL;
        int i = 0;
-       
+
        *domains = NULL;
        *num_domains = 0;
-       
+
        ZERO_STRUCT(response);
 
        /* Send request */
@@ -409,20 +409,20 @@ wbcErr wbcListTrusts(struct wbcDomainInfo **domains, size_t *num_domains)
        if (strlen(p) == 0) {
                /* We should always at least get back our
                   own SAM domain */
-               
+
                wbc_status = WBC_ERR_DOMAIN_NOT_FOUND;
                BAIL_ON_WBC_ERROR(wbc_status);
        }
 
        /* Count number of domains */
 
-       count = 0;      
+       count = 0;
        while (p) {
                count++;
 
                if ((q = strchr(p, '\n')) != NULL)
                        q++;
-               p = q;          
+               p = q;
        }
 
        d_list = talloc_array(NULL, struct wbcDomainInfo, count);
@@ -431,13 +431,13 @@ wbcErr wbcListTrusts(struct wbcDomainInfo **domains, size_t *num_domains)
        extra_data = strdup((char*)response.extra_data.data);
        BAIL_ON_PTR_ERROR(extra_data, wbc_status);
 
-       p = extra_data; 
+       p = extra_data;
 
        /* Outer loop processes the list of domain information */
 
        for (i=0; i<count && p; i++) {
                char *next = strchr(p, '\n');
-               
+
                if (next) {
                        *next = '\0';
                        next++;
@@ -449,9 +449,9 @@ wbcErr wbcListTrusts(struct wbcDomainInfo **domains, size_t *num_domains)
                p = next;
        }
 
-       *domains = d_list;      
-       *num_domains = i;       
-       
+       *domains = d_list;
+       *num_domains = i;
+
  done:
        if (!WBC_ERROR_IS_OK(wbc_status)) {
                if (d_list)
similarity index 99%
rename from source3/nsswitch/libwbclient/wbclient.c
rename to nsswitch/libwbclient/wbclient.c
index 3a9afad15d4c49ab0286c8e877bf2ed11bd73427..f5c72315f2e117ea87bb46c1d5de48a3dae03935 100644 (file)
@@ -155,5 +155,3 @@ done:
        talloc_free(info);
        return wbc_status;
 }
-
-
similarity index 99%
rename from source3/nsswitch/libwbclient/wbclient.h
rename to nsswitch/libwbclient/wbclient.h
index fcad3ff69bd8fb71204af93b6c30f53a61b9f601..990cc52df79d1f7444fca0c44fd7185472957426 100644 (file)
@@ -952,7 +952,7 @@ wbcErr wbcDomainInfo(const char *domain,
  *
  * @return #wbcErr
  **/
-wbcErr wbcListTrusts(struct wbcDomainInfo **domains, 
+wbcErr wbcListTrusts(struct wbcDomainInfo **domains,
                     size_t *num_domains);
 
 /* Flags for wbcLookupDomainController */
similarity index 95%
rename from source4/nsswitch/nsstest.c
rename to nsswitch/nsstest.c
index df7f33f8e019b6bcaf217e481803b6f2c669186f..26f816f5d1f237e58ef246c7a5dbefec0188d42a 100644 (file)
@@ -1,18 +1,18 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
    nss tester for winbindd
    Copyright (C) Andrew Tridgell 2001
-   
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -54,13 +54,13 @@ static void report_nss_error(const char *who, NSS_STATUS status)
 {
        last_error = status;
        total_errors++;
-       printf("ERROR %s: NSS_STATUS=%d  %d (nss_errno=%d)\n", 
+       printf("ERROR %s: NSS_STATUS=%d  %d (nss_errno=%d)\n",
               who, status, NSS_STATUS_SUCCESS, nss_errno);
 }
 
 static struct passwd *nss_getpwent(void)
 {
-       NSS_STATUS (*_nss_getpwent_r)(struct passwd *, char *, 
+       NSS_STATUS (*_nss_getpwent_r)(struct passwd *, char *,
                                      size_t , int *) = find_fn("getpwent_r");
        static struct passwd pwd;
        static char buf[1000];
@@ -79,12 +79,12 @@ static struct passwd *nss_getpwent(void)
 
 static struct passwd *nss_getpwnam(const char *name)
 {
-       NSS_STATUS (*_nss_getpwnam_r)(const char *, struct passwd *, char *, 
+       NSS_STATUS (*_nss_getpwnam_r)(const char *, struct passwd *, char *,
                                      size_t , int *) = find_fn("getpwnam_r");
        static struct passwd pwd;
        static char buf[1000];
        NSS_STATUS status;
-       
+
        status = _nss_getpwnam_r(name, &pwd, buf, sizeof(buf), &nss_errno);
        if (status == NSS_STATUS_NOTFOUND) {
                return NULL;
@@ -98,12 +98,12 @@ static struct passwd *nss_getpwnam(const char *name)
 
 static struct passwd *nss_getpwuid(uid_t uid)
 {
-       NSS_STATUS (*_nss_getpwuid_r)(uid_t , struct passwd *, char *, 
+       NSS_STATUS (*_nss_getpwuid_r)(uid_t , struct passwd *, char *,
                                      size_t , int *) = find_fn("getpwuid_r");
        static struct passwd pwd;
        static char buf[1000];
        NSS_STATUS status;
-       
+
        status = _nss_getpwuid_r(uid, &pwd, buf, sizeof(buf), &nss_errno);
        if (status == NSS_STATUS_NOTFOUND) {
                return NULL;
@@ -138,7 +138,7 @@ static void nss_endpwent(void)
 
 static struct group *nss_getgrent(void)
 {
-       NSS_STATUS (*_nss_getgrent_r)(struct group *, char *, 
+       NSS_STATUS (*_nss_getgrent_r)(struct group *, char *,
                                      size_t , int *) = find_fn("getgrent_r");
        static struct group grp;
        static char *buf;
@@ -147,7 +147,7 @@ static struct group *nss_getgrent(void)
 
        if (!buf) buf = malloc_array_p(char, buflen);
 
-again: 
+again:
        status = _nss_getgrent_r(&grp, buf, buflen, &nss_errno);
        if (status == NSS_STATUS_TRYAGAIN) {
                buflen *= 2;
@@ -166,7 +166,7 @@ again:
 
 static struct group *nss_getgrnam(const char *name)
 {
-       NSS_STATUS (*_nss_getgrnam_r)(const char *, struct group *, char *, 
+       NSS_STATUS (*_nss_getgrnam_r)(const char *, struct group *, char *,
                                      size_t , int *) = find_fn("getgrnam_r");
        static struct group grp;
        static char *buf;
@@ -174,7 +174,7 @@ static struct group *nss_getgrnam(const char *name)
        NSS_STATUS status;
 
        if (!buf) buf = malloc_array_p(char, buflen);
-again: 
+again:
        status = _nss_getgrnam_r(name, &grp, buf, buflen, &nss_errno);
        if (status == NSS_STATUS_TRYAGAIN) {
                buflen *= 2;
@@ -193,15 +193,15 @@ again:
 
 static struct group *nss_getgrgid(gid_t gid)
 {
-       NSS_STATUS (*_nss_getgrgid_r)(gid_t , struct group *, char *, 
+       NSS_STATUS (*_nss_getgrgid_r)(gid_t , struct group *, char *,
                                      size_t , int *) = find_fn("getgrgid_r");
        static struct group grp;
        static char *buf;
        static int buflen = 1000;
        NSS_STATUS status;
-       
+
        if (!buf) buf = malloc_array_p(char, buflen);
-again: 
+again:
        status = _nss_getgrgid_r(gid, &grp, buf, buflen, &nss_errno);
        if (status == NSS_STATUS_TRYAGAIN) {
                buflen *= 2;
@@ -241,7 +241,7 @@ static void nss_endgrent(void)
 static int nss_initgroups(char *user, gid_t group, gid_t **groups, long int *start, long int *size)
 {
        NSS_STATUS (*_nss_initgroups)(char *, gid_t , long int *,
-                                     long int *, gid_t **, long int , int *) = 
+                                     long int *, gid_t **, long int , int *) =
                find_fn("initgroups_dyn");
        NSS_STATUS status;
 
@@ -256,7 +256,7 @@ static int nss_initgroups(char *user, gid_t group, gid_t **groups, long int *sta
 
 static void print_passwd(struct passwd *pwd)
 {
-       printf("%s:%s:%d:%d:%s:%s:%s\n", 
+       printf("%s:%s:%d:%d:%s:%s:%s\n",
               pwd->pw_name,
               pwd->pw_passwd,
               pwd->pw_uid,
@@ -269,16 +269,16 @@ static void print_passwd(struct passwd *pwd)
 static void print_group(struct group *grp)
 {
        int i;
-       printf("%s:%s:%d: ", 
+       printf("%s:%s:%d: ",
               grp->gr_name,
               grp->gr_passwd,
               grp->gr_gid);
-       
+
        if (!grp->gr_mem[0]) {
                printf("\n");
                return;
        }
-       
+
        for (i=0; grp->gr_mem[i+1]; i++) {
                printf("%s, ", grp->gr_mem[i]);
        }
@@ -397,7 +397,7 @@ static void nss_test_errors(void)
 }
 
  int main(int argc, char *argv[])
-{      
+{
        if (argc > 1) so_path = argv[1];
        if (argc > 2) nss_name = argv[2];
 
similarity index 99%
rename from source4/nsswitch/nsstest.h
rename to nsswitch/nsstest.h
index 599faf2ee285e4eb85be9e8abf1d1bc71fa9eaa3..e69f17c85785755d7056829438b27fe248f76026 100644 (file)
@@ -1,18 +1,18 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
    nss includes for the nss tester
    Copyright (C) Kai Blin 2007
-   
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -25,7 +25,7 @@
 
 #ifdef HAVE_NSS_COMMON_H
 
-/* 
+/*
  * Sun Solaris
  */
 
similarity index 87%
rename from source4/nsswitch/nsstest.m4
rename to nsswitch/nsstest.m4
index 2856f9de155cb324fa11a2bf37fac2e5ee86d060..37596489c096f027f051933d87dd205529b2a5a0 100644 (file)
@@ -1,9 +1,8 @@
 case "$host_os" in
-       *linux*) 
+       *linux*)
                SMB_ENABLE(nsstest,YES)
        ;;
        *)
                SMB_ENABLE(nsstest,NO)
        ;;
 esac
-
similarity index 97%
rename from source3/nsswitch/pam_winbind.h
rename to nsswitch/pam_winbind.h
index 0656f5972e0b880ef0822eb5b1c750f3623e59e0..c6b2c5e72695499c5365ee2f3e9eef09dfc4a6e2 100644 (file)
@@ -1,4 +1,4 @@
-/* pam_winbind header file 
+/* pam_winbind header file
    (Solaris needs some macros from Linux for common PAM code)
 
    Shirish Kalele 2000
@@ -32,7 +32,7 @@
 /* Solaris always uses dynamic pam modules */
 #define PAM_EXTERN extern
 #if defined(HAVE_SECURITY_PAM_APPL_H)
-#include <security/pam_appl.h> 
+#include <security/pam_appl.h>
 #elif defined(HAVE_PAM_PAM_APPL_H)
 #include <pam/pam_appl.h>
 #endif
@@ -83,7 +83,7 @@ do {                             \
 
 #define _pam_drop(X) SAFE_FREE(X)
 
-#define  x_strdup(s)  ( (s) ? strdup(s):NULL )     
+#define  x_strdup(s)  ( (s) ? strdup(s):NULL )
 #endif /* HAVE_SECURITY__PAM_MACROS_H */
 
 #ifdef HAVE_SECURITY_PAM_EXT_H
@@ -167,4 +167,3 @@ struct pwb_context {
 #define TALLOC_FREE(ctx) do { if ((ctx) != NULL) {talloc_free(ctx); ctx=NULL;} } while(0)
 #define TALLOC_ZERO_P(ctx, type) (type *)_talloc_zero(ctx, sizeof(type), #type)
 #define TALLOC_P(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type)
-
similarity index 99%
rename from source4/nsswitch/tests/test_wbinfo.sh
rename to nsswitch/tests/test_wbinfo.sh
index a67fac9394d410cd5c25a29e7a2e6093fdcba9d5..4937e7e1a9415d8df3249d1716e70afdd58a881f 100755 (executable)
@@ -184,4 +184,3 @@ testit "wbinfo -K against $TARGET with domain creds" $wbinfo -K "$DOMAIN/$USERNA
 testit "wbinfo --separator against $TARGET" $wbinfo --separator || failed=`expr $failed + 1`
 
 exit $failed
-
similarity index 95%
rename from source3/nsswitch/wb_common.c
rename to nsswitch/wb_common.c
index a1646215bdff3d44e7fe977f7cb3bdb2cc8c67f6..d0dfcb8bbfb67326d82f2736b8110b3a9baf8688 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    winbind client common code
@@ -6,18 +6,18 @@
    Copyright (C) Tim Potter 2000
    Copyright (C) Andrew Tridgell 2000
    Copyright (C) Andrew Bartlett 2002
-   
-   
+
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -74,11 +74,11 @@ void winbind_close_sock(void)
 /* Make sure socket handle isn't stdin, stdout or stderr */
 #define RECURSION_LIMIT 3
 
-static int make_nonstd_fd_internals(int fd, int limit /* Recursion limiter */) 
+static int make_nonstd_fd_internals(int fd, int limit /* Recursion limiter */)
 {
        int new_fd;
        if (fd >= 0 && fd <= 2) {
-#ifdef F_DUPFD 
+#ifdef F_DUPFD
                if ((new_fd = fcntl(fd, F_DUPFD, 3)) == -1) {
                        return -1;
                }
@@ -92,9 +92,9 @@ static int make_nonstd_fd_internals(int fd, int limit /* Recursion limiter */)
 #else
                if (limit <= 0)
                        return -1;
-               
+
                new_fd = dup(fd);
-               if (new_fd == -1) 
+               if (new_fd == -1)
                        return -1;
 
                /* use the program stack to hold our list of FDs to close */
@@ -114,7 +114,7 @@ static int make_nonstd_fd_internals(int fd, int limit /* Recursion limiter */)
  Set close on exec also.
 ****************************************************************************/
 
-static int make_safe_fd(int fd) 
+static int make_safe_fd(int fd)
 {
        int result, flags;
        int new_fd = make_nonstd_fd_internals(fd, RECURSION_LIMIT);
@@ -366,65 +366,65 @@ static int winbind_open_pipe_sock(int recursing, int need_priv)
 int winbind_write_sock(void *buffer, int count, int recursing, int need_priv)
 {
        int result, nwritten;
-       
+
        /* Open connection to winbind daemon */
-       
+
  restart:
-       
+
        if (winbind_open_pipe_sock(recursing, need_priv) == -1) {
                errno = ENOENT;
                return -1;
        }
-       
+
        /* Write data to socket */
-       
+
        nwritten = 0;
-       
+
        while(nwritten < count) {
                struct timeval tv;
                fd_set r_fds;
-               
+
                /* Catch pipe close on other end by checking if a read()
                   call would not block by calling select(). */
 
                FD_ZERO(&r_fds);
                FD_SET(winbindd_fd, &r_fds);
                ZERO_STRUCT(tv);
-               
+
                if (select(winbindd_fd + 1, &r_fds, NULL, NULL, &tv) == -1) {
                        winbind_close_sock();
                        return -1;                   /* Select error */
                }
-               
+
                /* Write should be OK if fd not available for reading */
-               
+
                if (!FD_ISSET(winbindd_fd, &r_fds)) {
-                       
+
                        /* Do the write */
-                       
+
                        result = write(winbindd_fd,
-                                      (char *)buffer + nwritten, 
+                                      (char *)buffer + nwritten,
                                       count - nwritten);
-                       
+
                        if ((result == -1) || (result == 0)) {
-                               
+
                                /* Write failed */
-                               
+
                                winbind_close_sock();
                                return -1;
                        }
-                       
+
                        nwritten += result;
-                       
+
                } else {
-                       
+
                        /* Pipe has closed on remote end */
-                       
+
                        winbind_close_sock();
                        goto restart;
                }
        }
-       
+
        return nwritten;
 }
 
@@ -443,7 +443,7 @@ int winbind_read_sock(void *buffer, int count)
        while(nread < count) {
                struct timeval tv;
                fd_set r_fds;
-               
+
                /* Catch pipe close on other end by checking if a read()
                   call would not block by calling select(). */
 
@@ -457,7 +457,7 @@ int winbind_read_sock(void *buffer, int count)
                        winbind_close_sock();
                        return -1;                   /* Select error */
                }
-               
+
                if (selret == 0) {
                        /* Not ready for read yet... */
                        if (total_time >= 30) {
@@ -470,27 +470,27 @@ int winbind_read_sock(void *buffer, int count)
                }
 
                if (FD_ISSET(winbindd_fd, &r_fds)) {
-                       
+
                        /* Do the Read */
-                       
-                       int result = read(winbindd_fd, (char *)buffer + nread, 
+
+                       int result = read(winbindd_fd, (char *)buffer + nread,
                              count - nread);
-                       
+
                        if ((result == -1) || (result == 0)) {
-                               
+
                                /* Read failed.  I think the only useful thing we
                                   can do here is just return -1 and fail since the
                                   transaction has failed half way through. */
-                       
+
                                winbind_close_sock();
                                return -1;
                        }
-                       
+
                        nread += result;
-                       
+
                }
        }
-       
+
        return nread;
 }
 
@@ -503,15 +503,15 @@ int winbindd_read_reply(struct winbindd_response *response)
        if (!response) {
                return -1;
        }
-       
+
        /* Read fixed length response */
-       
+
        result1 = winbind_read_sock(response,
                                    sizeof(struct winbindd_response));
        if (result1 == -1) {
                return -1;
        }
-       
+
        /* We actually send the pointer value of the extra_data field from
           the server.  This has no meaning in the client's address space
           so we clear it out. */
@@ -519,17 +519,17 @@ int winbindd_read_reply(struct winbindd_response *response)
        response->extra_data.data = NULL;
 
        /* Read variable length response */
-       
+
        if (response->length > sizeof(struct winbindd_response)) {
-               int extra_data_len = response->length - 
+               int extra_data_len = response->length -
                        sizeof(struct winbindd_response);
-               
+
                /* Mallocate memory for extra data */
-               
+
                if (!(response->extra_data.data = malloc(extra_data_len))) {
                        return -1;
                }
-               
+
                result2 = winbind_read_sock(response->extra_data.data,
                                            extra_data_len);
                if (result2 == -1) {
@@ -537,14 +537,14 @@ int winbindd_read_reply(struct winbindd_response *response)
                        return -1;
                }
        }
-       
+
        /* Return total amount of data read */
-       
+
        return result1 + result2;
 }
 
-/* 
- * send simple types of requests 
+/*
+ * send simple types of requests
  */
 
 NSS_STATUS winbindd_send_request(int req_type, int need_priv,
@@ -562,33 +562,33 @@ NSS_STATUS winbindd_send_request(int req_type, int need_priv,
                ZERO_STRUCT(lrequest);
                request = &lrequest;
        }
-       
+
        /* Fill in request and send down pipe */
 
        winbindd_init_request(request, req_type);
-       
+
        if (winbind_write_sock(request, sizeof(*request),
                               request->wb_flags & WBFLAG_RECURSE,
-                              need_priv) == -1) 
+                              need_priv) == -1)
        {
                /* Set ENOENT for consistency.  Required by some apps */
                errno = ENOENT;
-               
+
                return NSS_STATUS_UNAVAIL;
        }
 
        if ((request->extra_len != 0) &&
            (winbind_write_sock(request->extra_data.data,
-                               request->extra_len,
+                               request->extra_len,
                                request->wb_flags & WBFLAG_RECURSE,
-                               need_priv) == -1)) 
+                               need_priv) == -1))
        {
                /* Set ENOENT for consistency.  Required by some apps */
                errno = ENOENT;
 
                return NSS_STATUS_UNAVAIL;
        }
-       
+
        return NSS_STATUS_SUCCESS;
 }
 
@@ -624,13 +624,13 @@ NSS_STATUS winbindd_get_response(struct winbindd_response *response)
        if (response->result != WINBINDD_OK) {
                return NSS_STATUS_NOTFOUND;
        }
-       
+
        return NSS_STATUS_SUCCESS;
 }
 
 /* Handle simple types of requests */
 
-NSS_STATUS winbindd_request_response(int req_type, 
+NSS_STATUS winbindd_request_response(int req_type,
                            struct winbindd_request *request,
                            struct winbindd_response *response)
 {
@@ -639,7 +639,7 @@ NSS_STATUS winbindd_request_response(int req_type,
 
        while ((status == NSS_STATUS_UNAVAIL) && (count < 10)) {
                status = winbindd_send_request(req_type, 0, request);
-               if (status != NSS_STATUS_SUCCESS) 
+               if (status != NSS_STATUS_SUCCESS)
                        return(status);
                status = winbindd_get_response(response);
                count += 1;
@@ -648,7 +648,7 @@ NSS_STATUS winbindd_request_response(int req_type,
        return status;
 }
 
-NSS_STATUS winbindd_priv_request_response(int req_type, 
+NSS_STATUS winbindd_priv_request_response(int req_type,
                                          struct winbindd_request *request,
                                          struct winbindd_response *response)
 {
@@ -657,7 +657,7 @@ NSS_STATUS winbindd_priv_request_response(int req_type,
 
        while ((status == NSS_STATUS_UNAVAIL) && (count < 10)) {
                status = winbindd_send_request(req_type, 1, request);
-               if (status != NSS_STATUS_SUCCESS) 
+               if (status != NSS_STATUS_SUCCESS)
                        return(status);
                status = winbindd_get_response(response);
                count += 1;
similarity index 99%
rename from source3/nsswitch/wbinfo.c
rename to nsswitch/wbinfo.c
index c85e210cc04de2fd999fc2085e3d0a12fc66aaee..36c2818ccf26b91a4a34528cdebd5f50def59ff4 100644 (file)
@@ -1,21 +1,21 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    Winbind status program.
 
    Copyright (C) Tim Potter      2000-2003
    Copyright (C) Andrew Bartlett 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 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -378,8 +378,8 @@ static bool wbinfo_list_domains(bool list_all_domains, bool verbose)
        }
 
        if (print_all) {
-               d_printf("%-16s%-24s%-12s%-12s%-5s%-5s\n", 
-                        "Domain Name", "DNS Domain", "Trust Type", 
+               d_printf("%-16s%-24s%-12s%-12s%-5s%-5s\n",
+                        "Domain Name", "DNS Domain", "Trust Type",
                         "Transitive", "In", "Out");
        }
 
@@ -398,10 +398,10 @@ static bool wbinfo_list_domains(bool list_all_domains, bool verbose)
                case WBC_DOMINFO_TRUSTTYPE_NONE:
                        d_printf("None        ");
                        break;
-               case WBC_DOMINFO_TRUSTTYPE_FOREST:              
+               case WBC_DOMINFO_TRUSTTYPE_FOREST:
                        d_printf("Forest      ");
                        break;
-               case WBC_DOMINFO_TRUSTTYPE_EXTERNAL:            
+               case WBC_DOMINFO_TRUSTTYPE_EXTERNAL:
                        d_printf("External    ");
                        break;
                case WBC_DOMINFO_TRUSTTYPE_IN_FOREST:
@@ -472,8 +472,8 @@ static bool wbinfo_show_onlinestatus(const char *domain)
                }
 
                is_offline = (domain_list[i].domain_flags & WBC_DOMINFO_DOMAIN_OFFLINE);
-               
-               d_printf("%s : %s\n", 
+
+               d_printf("%s : %s\n",
                         domain_list[i].short_name,
                         is_offline ? "offline" : "online" );
        }
@@ -1104,12 +1104,12 @@ static bool wbinfo_auth_krb5(char *username, const char *cctype, uint32 flags)
 
        /* Display response */
 
-       d_printf("plaintext kerberos password authentication for [%s] %s (requesting cctype: %s)\n", 
+       d_printf("plaintext kerberos password authentication for [%s] %s (requesting cctype: %s)\n",
                username, (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed", cctype);
 
        if (response.data.auth.nt_status)
-               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n", 
-                        response.data.auth.nt_status_string, 
+               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n",
+                        response.data.auth.nt_status_string,
                         response.data.auth.nt_status,
                         response.data.auth.error_string);
 
@@ -1162,7 +1162,7 @@ static bool wbinfo_auth(char *username)
 
 #if 0
        if (response.data.auth.nt_status)
-               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n", 
+               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n",
                         response.data.auth.nt_status_string,
                         response.data.auth.nt_status,
                         response.data.auth.error_string);
@@ -1260,7 +1260,7 @@ static bool wbinfo_auth_crap(char *username)
                 WBC_ERROR_IS_OK(wbc_status) ? "succeeded" : "failed");
 
        if (wbc_status == WBC_ERR_AUTH_ERROR) {
-               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n", 
+               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n",
                         err->nt_string,
                         err->nt_status,
                         err->display_string);
@@ -1312,7 +1312,7 @@ static bool wbinfo_klog(char *username)
                 (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed");
 
        if (response.data.auth.nt_status)
-               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n", 
+               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n",
                         response.data.auth.nt_status_string,
                         response.data.auth.nt_status,
                         response.data.auth.error_string);
@@ -1853,14 +1853,14 @@ int main(int argc, char **argv, char **envp)
                        break;
                case 'r':
                        if (!wbinfo_get_usergroups(string_arg)) {
-                               d_fprintf(stderr, "Could not get groups for user %s\n", 
+                               d_fprintf(stderr, "Could not get groups for user %s\n",
                                       string_arg);
                                goto done;
                        }
                        break;
                case OPT_USERSIDS:
                        if (!wbinfo_get_usersids(string_arg)) {
-                               d_fprintf(stderr, "Could not get group SIDs for user SID %s\n", 
+                               d_fprintf(stderr, "Could not get group SIDs for user SID %s\n",
                                       string_arg);
                                goto done;
                        }
similarity index 95%
rename from source4/nsswitch/wbinfo.c
rename to nsswitch/wbinfo4.c
index 60c95a3bd06d95a4864e83c9ea3ab4e44f6aa553..465c3f793cfa0d9e04c3550eef78864ca822cfb3 100644 (file)
@@ -1,21 +1,21 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    Winbind status program.
 
    Copyright (C) Tim Potter      2000-2003
    Copyright (C) Andrew Bartlett 2002-2007
-   
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include "dynconfig/dynconfig.h"
 #include "param/param.h"
 
+#ifndef fstrcpy
+#define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
+#endif
+
 extern int winbindd_fd;
 
 static char winbind_separator_int(bool strict)
@@ -65,7 +69,7 @@ static char winbind_separator_int(bool strict)
                /* HACK: (this module should not call lp_ funtions) */
                sep = *lp_winbind_separator(cmdline_lp_ctx);
        }
-       
+
        return sep;
 }
 
@@ -86,7 +90,7 @@ static const char *get_winbind_domain(void)
        if (winbindd_request_response(WINBINDD_DOMAIN_NAME, NULL, &response) !=
            NSS_STATUS_SUCCESS) {
                d_fprintf(stderr, "could not obtain winbind domain name!\n");
-               
+
                /* HACK: (this module should not call lp_ funtions) */
                return lp_workgroup(cmdline_lp_ctx);
        }
@@ -100,7 +104,7 @@ static const char *get_winbind_domain(void)
 /* Copy of parse_domain_user from winbindd_util.c.  Parse a string of the
    form DOMAIN/user into a domain and a user */
 
-static bool parse_wbinfo_domain_user(const char *domuser, fstring domain, 
+static bool parse_wbinfo_domain_user(const char *domuser, fstring domain,
                                     fstring user)
 {
 
@@ -111,7 +115,7 @@ static bool parse_wbinfo_domain_user(const char *domuser, fstring domain,
                fstrcpy(domain, get_winbind_domain());
                return true;
        }
-        
+
        fstrcpy(user, p+1);
        fstrcpy(domain, domuser);
        domain[PTR_DIFF(p, domuser)] = 0;
@@ -127,19 +131,19 @@ static bool wbinfo_get_userinfo(char *user)
        struct winbindd_request request;
        struct winbindd_response response;
        NSS_STATUS result;
-       
+
        ZERO_STRUCT(request);
        ZERO_STRUCT(response);
 
        /* Send request */
-       
+
        fstrcpy(request.data.username, user);
 
        result = winbindd_request_response(WINBINDD_GETPWNAM, &request, &response);
-       
+
        if (result != NSS_STATUS_SUCCESS)
                return false;
-       
+
        d_printf( "%s:%s:%d:%d:%s:%s:%s\n",
                          response.data.pw.pw_name,
                          response.data.pw.pw_passwd,
@@ -148,7 +152,7 @@ static bool wbinfo_get_userinfo(char *user)
                          response.data.pw.pw_gecos,
                          response.data.pw.pw_dir,
                          response.data.pw.pw_shell );
-       
+
        return true;
 }
 
@@ -201,11 +205,11 @@ static bool wbinfo_get_groupinfo(char *group)
        if ( result != NSS_STATUS_SUCCESS)
                return false;
 
-       d_printf( "%s:%s:%d\n",
+       d_printf( "%s:%s:%d\n",
                  response.data.gr.gr_name,
                  response.data.gr.gr_passwd,
                  response.data.gr.gr_gid );
-       
+
        return true;
 }
 
@@ -217,7 +221,7 @@ static bool wbinfo_get_usergroups(char *user)
        struct winbindd_response response;
        NSS_STATUS result;
        int i;
-       
+
        ZERO_STRUCT(request);
        ZERO_STRUCT(response);
 
@@ -290,7 +294,7 @@ static bool wbinfo_get_userdomgroups(const char *user_sid)
 
        if (response.data.num_entries != 0)
                printf("%s", (char *)response.extra_data.data);
-       
+
        SAFE_FREE(response.extra_data.data);
 
        return true;
@@ -503,16 +507,16 @@ static bool wbinfo_check_secret(void)
         ZERO_STRUCT(response);
 
         result = winbindd_request_response(WINBINDD_CHECK_MACHACC, NULL, &response);
-               
-       d_printf("checking the trust secret via RPC calls %s\n", 
+
+       d_printf("checking the trust secret via RPC calls %s\n",
                 (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed");
 
-       if (result != NSS_STATUS_SUCCESS)       
-               d_fprintf(stderr, "error code was %s (0x%x)\n", 
-                        response.data.auth.nt_status_string, 
-                        response.data.auth.nt_status);
-       
-       return result == NSS_STATUS_SUCCESS;    
+       if (result != NSS_STATUS_SUCCESS)
+               d_fprintf(stderr, "error code was %s (0x%x)\n",
+                        response.data.auth.nt_status_string,
+                        response.data.auth.nt_status);
+
+       return result == NSS_STATUS_SUCCESS;
 }
 
 /* Convert uid to sid */
@@ -669,7 +673,7 @@ static bool wbinfo_lookupname(char *name)
        ZERO_STRUCT(request);
        ZERO_STRUCT(response);
 
-       parse_wbinfo_domain_user(name, request.data.name.dom_name, 
+       parse_wbinfo_domain_user(name, request.data.name.dom_name,
                                 request.data.name.name);
 
        if (winbindd_request_response(WINBINDD_LOOKUPNAME, &request, &response) !=
@@ -717,12 +721,12 @@ static bool wbinfo_auth_krb5(char *username, const char *cctype, uint32_t flags)
 
        /* Display response */
 
-       d_printf("plaintext kerberos password authentication for [%s] %s (requesting cctype: %s)\n", 
+       d_printf("plaintext kerberos password authentication for [%s] %s (requesting cctype: %s)\n",
                username, (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed", cctype);
 
        if (response.data.auth.nt_status)
-               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n", 
-                        response.data.auth.nt_status_string, 
+               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n",
+                        response.data.auth.nt_status_string,
                         response.data.auth.nt_status,
                         response.data.auth.error_string);
 
@@ -772,12 +776,12 @@ static bool wbinfo_auth(char *username)
 
        /* Display response */
 
-        d_printf("plaintext password authentication %s\n", 
+        d_printf("plaintext password authentication %s\n",
                (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed");
 
        if (response.data.auth.nt_status)
-               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n", 
-                        response.data.auth.nt_status_string, 
+               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n",
+                        response.data.auth.nt_status_string,
                         response.data.auth.nt_status,
                         response.data.auth.error_string);
 
@@ -807,21 +811,21 @@ static bool wbinfo_auth_crap(struct loadparm_context *lp_ctx, char *username)
                 *p = 0;
                 fstrcpy(pass, p + 1);
        }
-               
+
        parse_wbinfo_domain_user(username, name_domain, name_user);
 
        request.data.auth_crap.logon_parameters = MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT | MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT;
 
        fstrcpy(request.data.auth_crap.user, name_user);
 
-       fstrcpy(request.data.auth_crap.domain, 
+       fstrcpy(request.data.auth_crap.domain,
                              name_domain);
 
        generate_random_buffer(request.data.auth_crap.chal, 8);
-        
+
        if (lp_client_ntlmv2_auth(lp_ctx)) {
                DATA_BLOB server_chal;
-               DATA_BLOB names_blob;   
+               DATA_BLOB names_blob;
 
                DATA_BLOB lm_response;
                DATA_BLOB nt_response;
@@ -833,12 +837,12 @@ static bool wbinfo_auth_crap(struct loadparm_context *lp_ctx, char *username)
                        return false;
                }
 
-               server_chal = data_blob(request.data.auth_crap.chal, 8); 
-               
+               server_chal = data_blob(request.data.auth_crap.chal, 8);
+
                /* Pretend this is a login to 'us', for blob purposes */
                names_blob = NTLMv2_generate_names_blob(mem_ctx, lp_netbios_name(lp_ctx), lp_workgroup(lp_ctx));
-               
-               if (!SMBNTLMv2encrypt(mem_ctx, name_user, name_domain, pass, &server_chal, 
+
+               if (!SMBNTLMv2encrypt(mem_ctx, name_user, name_domain, pass, &server_chal,
                                      &names_blob,
                                      &lm_response, &nt_response, NULL, NULL)) {
                        data_blob_free(&names_blob);
@@ -848,22 +852,22 @@ static bool wbinfo_auth_crap(struct loadparm_context *lp_ctx, char *username)
                data_blob_free(&names_blob);
                data_blob_free(&server_chal);
 
-               memcpy(request.data.auth_crap.nt_resp, nt_response.data, 
-                      MIN(nt_response.length, 
+               memcpy(request.data.auth_crap.nt_resp, nt_response.data,
+                      MIN(nt_response.length,
                           sizeof(request.data.auth_crap.nt_resp)));
                request.data.auth_crap.nt_resp_len = nt_response.length;
 
-               memcpy(request.data.auth_crap.lm_resp, lm_response.data, 
-                      MIN(lm_response.length, 
+               memcpy(request.data.auth_crap.lm_resp, lm_response.data,
+                      MIN(lm_response.length,
                           sizeof(request.data.auth_crap.lm_resp)));
                request.data.auth_crap.lm_resp_len = lm_response.length;
-                      
+
                data_blob_free(&nt_response);
                data_blob_free(&lm_response);
 
        } else {
-               if (lp_client_lanman_auth(lp_ctx) 
-                   && SMBencrypt(pass, request.data.auth_crap.chal, 
+               if (lp_client_lanman_auth(lp_ctx)
+                   && SMBencrypt(pass, request.data.auth_crap.chal,
                               (unsigned char *)request.data.auth_crap.lm_resp)) {
                        request.data.auth_crap.lm_resp_len = 24;
                } else {
@@ -879,12 +883,12 @@ static bool wbinfo_auth_crap(struct loadparm_context *lp_ctx, char *username)
 
        /* Display response */
 
-        d_printf("challenge/response password authentication %s\n", 
+        d_printf("challenge/response password authentication %s\n",
                (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed");
 
        if (response.data.auth.nt_status)
-               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n", 
-                        response.data.auth.nt_status_string, 
+               d_fprintf(stderr, "error code was %s (0x%x)\nerror messsage was: %s\n",
+                        response.data.auth.nt_status_string,
                         response.data.auth.nt_status,
                         response.data.auth.error_string);
 
@@ -904,7 +908,7 @@ static bool print_domain_users(const char *domain)
 
        ZERO_STRUCT(request);
        ZERO_STRUCT(response);
-       
+
        if (domain) {
                /* '.' is the special sign for our own domain */
                if ( strequal(domain, ".") )
@@ -926,7 +930,7 @@ static bool print_domain_users(const char *domain)
 
        while(next_token(&extra_data, name, ",", sizeof(fstring)))
                d_printf("%s\n", name);
-       
+
        SAFE_FREE(response.extra_data.data);
 
        return true;
@@ -966,7 +970,7 @@ static bool print_domain_groups(const char *domain)
                d_printf("%s\n", name);
 
        SAFE_FREE(response.extra_data.data);
-       
+
        return true;
 }
 
@@ -978,7 +982,7 @@ static bool wbinfo_ping(void)
 
        /* Display response */
 
-        d_printf("Ping to winbindd %s on fd %d\n", 
+        d_printf("Ping to winbindd %s on fd %d\n",
                (result == NSS_STATUS_SUCCESS) ? "succeeded" : "failed", winbindd_fd);
 
         return result == NSS_STATUS_SUCCESS;
@@ -1016,7 +1020,7 @@ int main(int argc, char **argv, char **envp)
        struct poptOption long_options[] = {
                POPT_AUTOHELP
 
-               /* longName, shortName, argInfo, argPtr, value, descrip, 
+               /* longName, shortName, argInfo, argPtr, value, descrip,
                   argDesc */
 
                { "domain-users", 'u', POPT_ARG_NONE, 0, 'u', "Lists all domain users", "domain"},
@@ -1042,7 +1046,7 @@ int main(int argc, char **argv, char **envp)
                { "user-domgroups", 0, POPT_ARG_STRING, &string_arg,
                  OPT_USERDOMGROUPS, "Get user domain groups", "SID" },
                { "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" },
+               { "authenticate", 'a', POPT_ARG_STRING, &string_arg, 'a', "authenticate user", "user%password" },
                { "getdcname", 0, POPT_ARG_STRING, &string_arg, OPT_GETDCNAME,
                  "Get a DC name for a foreign domain", "domainname" },
                { "ping", 'p', POPT_ARG_NONE, 0, 'p', "Ping winbindd to see if it is alive" },
@@ -1075,7 +1079,7 @@ int main(int argc, char **argv, char **envp)
 
        poptFreeContext(pc);
 
-       pc = poptGetContext(NULL, argc, (const char **)argv, long_options, 
+       pc = poptGetContext(NULL, argc, (const char **)argv, long_options,
                            POPT_CONTEXT_KEEP_FIRST);
 
        while((opt = poptGetNextOpt(pc)) != -1) {
@@ -1190,14 +1194,14 @@ int main(int argc, char **argv, char **envp)
                        break;
                case 'r':
                        if (!wbinfo_get_usergroups(string_arg)) {
-                               d_fprintf(stderr, "Could not get groups for user %s\n", 
+                               d_fprintf(stderr, "Could not get groups for user %s\n",
                                       string_arg);
                                goto done;
                        }
                        break;
                case OPT_USERSIDS:
                        if (!wbinfo_get_usersids(string_arg)) {
-                               d_fprintf(stderr, "Could not get group SIDs for user SID %s\n", 
+                               d_fprintf(stderr, "Could not get group SIDs for user SID %s\n",
                                       string_arg);
                                goto done;
                        }
similarity index 90%
rename from source3/nsswitch/winbind_client.h
rename to nsswitch/winbind_client.h
index 757f5869e90168de797e9bcee81ad395877ca1bd..b004d9c2c02ed22b6213b238b5e7ee97775fbab8 100644 (file)
@@ -6,10 +6,10 @@ void winbindd_free_response(struct winbindd_response *response);
 NSS_STATUS winbindd_send_request(int req_type, int need_priv,
                                 struct winbindd_request *request);
 NSS_STATUS winbindd_get_response(struct winbindd_response *response);
-NSS_STATUS winbindd_request_response(int req_type, 
+NSS_STATUS winbindd_request_response(int req_type,
                            struct winbindd_request *request,
                            struct winbindd_response *response);
-NSS_STATUS winbindd_priv_request_response(int req_type, 
+NSS_STATUS winbindd_priv_request_response(int req_type,
                                          struct winbindd_request *request,
                                          struct winbindd_response *response);
 int winbindd_read_reply(struct winbindd_response *response);
similarity index 96%
rename from source4/nsswitch/winbind_nss.h
rename to nsswitch/winbind_nss.h
index 0a3bc7cefac88172d2bb7d70bed6eff18e23a781..05e07ad5d3137ffaecec9656298222a81451ce59 100644 (file)
@@ -1,21 +1,21 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    A common place to work out how to define NSS_STATUS on various
    platforms.
 
    Copyright (C) Tim Potter 2000
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -25,8 +25,8 @@
 
 #ifdef HAVE_NSS_COMMON_H
 
-/* 
- * Sun Solaris 
+/*
+ * Sun Solaris
  */
 
 #include "nsswitch/winbind_nss_solaris.h"
@@ -42,7 +42,7 @@
 #elif HAVE_NS_API_H
 
 /*
- * SGI IRIX 
+ * SGI IRIX
  */
 
 #include "nsswitch/winbind_nss_irix.h"
similarity index 96%
rename from source3/nsswitch/winbind_nss_aix.c
rename to nsswitch/winbind_nss_aix.c
index 9c84e5f8aa518d33bccaad057a560f4db3cd0f6a..17578cf3501ad2b79206e0003a52f41748338dc1 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    AIX loadable authentication module, providing identification and
@@ -7,17 +7,17 @@
    Copyright (C) Tim Potter 2003
    Copyright (C) Steve Roylance 2003
    Copyright (C) Andrew Tridgell 2003-2004
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -31,7 +31,7 @@
   changing routines, so you do not need to install the winbind PAM
   module.
 
-  see 
+  see
   http://publib16.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/kernextc/sec_load_mod.htm
   for some information in the interface that this module implements
 
@@ -113,12 +113,12 @@ static void free_grp(struct group *grp)
 
        free(grp->gr_name);
        free(grp->gr_passwd);
-       
+
        if (!grp->gr_mem) {
                free(grp);
                return;
        }
-       
+
        for (i=0; grp->gr_mem[i]; i++) {
                free(grp->gr_mem[i]);
        }
@@ -200,7 +200,7 @@ static struct passwd *fill_pwent(struct winbindd_pw *pw)
        result->pw_gecos  = strdup(pw->pw_gecos);
        result->pw_dir    = strdup(pw->pw_dir);
        result->pw_shell  = strdup(pw->pw_shell);
-       
+
        return result;
 }
 
@@ -229,12 +229,12 @@ static struct group *fill_grent(struct winbindd_gr *gr, char *gr_mem)
        if ((gr->num_gr_mem < 0) || !gr_mem) {
                gr->num_gr_mem = 0;
        }
-       
+
        if (gr->num_gr_mem == 0) {
-               /* Group is empty */            
+               /* Group is empty */
                return result;
        }
-       
+
        result->gr_mem = (char **)malloc(sizeof(char *) * (gr->num_gr_mem+1));
        if (!result->gr_mem) {
                errno = ENOMEM;
@@ -243,8 +243,8 @@ static struct group *fill_grent(struct winbindd_gr *gr, char *gr_mem)
 
        /* Start looking at extra data */
        i=0;
-       for (name = strtok_r(gr_mem, ",", &p); 
-            name; 
+       for (name = strtok_r(gr_mem, ",", &p);
+            name;
             name = strtok_r(NULL, ",", &p)) {
                if (i == gr->num_gr_mem) {
                        break;
@@ -261,7 +261,7 @@ static struct group *fill_grent(struct winbindd_gr *gr, char *gr_mem)
 
 
 
-/* take a group id and return a filled struct group */ 
+/* take a group id and return a filled struct group */
 static struct group *wb_aix_getgrgid(gid_t gid)
 {
        struct winbindd_response response;
@@ -273,7 +273,7 @@ static struct group *wb_aix_getgrgid(gid_t gid)
 
        ZERO_STRUCT(response);
        ZERO_STRUCT(request);
-       
+
        request.data.gid = gid;
 
        ret = winbindd_request_response(WINBINDD_GETGRGID, &request, &response);
@@ -309,7 +309,7 @@ static struct group *wb_aix_getgrnam(const char *name)
        STRCPY_RETNULL(request.data.groupname, name);
 
        ret = winbindd_request_response(WINBINDD_GETGRNAM, &request, &response);
-       
+
        HANDLE_ERRORS(ret);
 
        grp = fill_grent(&response.data.gr, response.extra_data.data);
@@ -373,7 +373,7 @@ static char *wb_aix_getgrset(char *user)
 
        num_gids = response.data.num_entries;
        gid_list = (gid_t *)response.extra_data.data;
-               
+
        /* allocate a space large enough to contruct the string */
        tmpbuf = malloc(num_gids*12);
        if (!tmpbuf) {
@@ -381,9 +381,9 @@ static char *wb_aix_getgrset(char *user)
        }
 
        for (idx=i=0; i < num_gids-1; i++) {
-               idx += sprintf(tmpbuf+idx, "%u,", gid_list[i]); 
+               idx += sprintf(tmpbuf+idx, "%u,", gid_list[i]);
        }
-       idx += sprintf(tmpbuf+idx, "%u", gid_list[i]);  
+       idx += sprintf(tmpbuf+idx, "%u", gid_list[i]);
 
        winbindd_free_response(&response);
 
@@ -391,7 +391,7 @@ static char *wb_aix_getgrset(char *user)
 }
 
 
-/* take a uid and return a filled struct passwd */     
+/* take a uid and return a filled struct passwd */
 static struct passwd *wb_aix_getpwuid(uid_t uid)
 {
        struct winbindd_response response;
@@ -403,9 +403,9 @@ static struct passwd *wb_aix_getpwuid(uid_t uid)
 
        ZERO_STRUCT(response);
        ZERO_STRUCT(request);
-               
+
        request.data.uid = uid;
-       
+
        ret = winbindd_request_response(WINBINDD_GETPWUID, &request, &response);
 
        HANDLE_ERRORS(ret);
@@ -442,7 +442,7 @@ static struct passwd *wb_aix_getpwnam(const char *name)
        ret = winbindd_request_response(WINBINDD_GETPWNAM, &request, &response);
 
        HANDLE_ERRORS(ret);
-       
+
        pwd = fill_pwent(&response.data.pw);
 
        winbindd_free_response(&response);
@@ -471,7 +471,7 @@ static int wb_aix_lsuser(char *attributes[], attrval_t results[], int size)
 
        ZERO_STRUCT(request);
        ZERO_STRUCT(response);
-       
+
        ret = winbindd_request_response(WINBINDD_LIST_USERS, &request, &response);
        if (ret != 0) {
                errno = EINVAL;
@@ -486,7 +486,7 @@ static int wb_aix_lsuser(char *attributes[], attrval_t results[], int size)
                errno = ENOMEM;
                return -1;
        }
-       
+
        memcpy(s, response.extra_data.data, len+1);
 
        replace_commas(s);
@@ -495,7 +495,7 @@ static int wb_aix_lsuser(char *attributes[], attrval_t results[], int size)
        results[0].attr_flag = 0;
 
        winbindd_free_response(&response);
-       
+
        return 0;
 }
 
@@ -519,7 +519,7 @@ static int wb_aix_lsgroup(char *attributes[], attrval_t results[], int size)
 
        ZERO_STRUCT(request);
        ZERO_STRUCT(response);
-       
+
        ret = winbindd_request_response(WINBINDD_LIST_GROUPS, &request, &response);
        if (ret != 0) {
                errno = EINVAL;
@@ -534,7 +534,7 @@ static int wb_aix_lsgroup(char *attributes[], attrval_t results[], int size)
                errno = ENOMEM;
                return -1;
        }
-       
+
        memcpy(s, response.extra_data.data, len+1);
 
        replace_commas(s);
@@ -543,7 +543,7 @@ static int wb_aix_lsgroup(char *attributes[], attrval_t results[], int size)
        results[0].attr_flag = 0;
 
        winbindd_free_response(&response);
-       
+
        return 0;
 }
 
@@ -552,9 +552,9 @@ static attrval_t pwd_to_group(struct passwd *pwd)
 {
        attrval_t r;
        struct group *grp = wb_aix_getgrgid(pwd->pw_gid);
-       
+
        if (!grp) {
-               r.attr_flag = EINVAL;                           
+               r.attr_flag = EINVAL;
        } else {
                r.attr_flag = 0;
                r.attr_un.au_char = strdup(grp->gr_name);
@@ -692,18 +692,18 @@ static int wb_aix_group_attrib(const char *key, char *attributes[],
 /*
   called for user/group enumerations
 */
-static int wb_aix_getentry(char *key, char *table, char *attributes[], 
+static int wb_aix_getentry(char *key, char *table, char *attributes[],
                           attrval_t results[], int size)
 {
-       logit("Got getentry with key='%s' table='%s' size=%d attributes[0]='%s'\n", 
+       logit("Got getentry with key='%s' table='%s' size=%d attributes[0]='%s'\n",
              key, table, size, attributes[0]);
 
-       if (strcmp(key, "ALL") == 0 && 
+       if (strcmp(key, "ALL") == 0 &&
            strcmp(table, "user") == 0) {
                return wb_aix_lsuser(attributes, results, size);
        }
 
-       if (strcmp(key, "ALL") == 0 && 
+       if (strcmp(key, "ALL") == 0 &&
            strcmp(table, "group") == 0) {
                return wb_aix_lsgroup(attributes, results, size);
        }
@@ -732,7 +732,7 @@ static void *wb_aix_open(const char *name, const char *domain, int mode, char *o
        if (strstr(options, "debug")) {
                debug_enabled = 1;
        }
-       logit("open name='%s' mode=%d domain='%s' options='%s'\n", name, domain, 
+       logit("open name='%s' mode=%d domain='%s' options='%s'\n", name, domain,
              mode, options);
        return NULL;
 }
@@ -744,14 +744,14 @@ static void wb_aix_close(void *token)
 }
 
 #ifdef HAVE_STRUCT_SECMETHOD_TABLE_METHOD_ATTRLIST
-/* 
-   return a list of additional attributes supported by the backend 
+/*
+   return a list of additional attributes supported by the backend
 */
 static attrlist_t **wb_aix_attrlist(void)
 {
        /* pretty confusing but we are allocating the array of pointers
           and the structures we'll be pointing to all at once.  So
-          you need N+1 pointers and N structures. */
+          you need N+1 pointers and N structures. */
 
        attrlist_t **ret = NULL;
        attrlist_t *offset = NULL;
@@ -821,7 +821,7 @@ static attrlist_t **wb_aix_attrlist(void)
 
 
 /*
-  turn a long username into a short one. Needed to cope with the 8 char 
+  turn a long username into a short one. Needed to cope with the 8 char
   username limit in AIX 5.2 and below
 */
 static int wb_aix_normalize(char *longname, char *shortname)
@@ -854,7 +854,7 @@ static int wb_aix_normalize(char *longname, char *shortname)
 /*
   authenticate a user
  */
-static int wb_aix_authenticate(char *user, char *pass, 
+static int wb_aix_authenticate(char *user, char *pass,
                               int *reenter, char **message)
 {
        struct winbindd_request request;
@@ -950,7 +950,7 @@ static int wb_aix_chpass(char *user, char *oldpass, char *newpass, char **messag
 /*
   don't do any password strength testing for now
 */
-static int wb_aix_passwdrestrictions(char *user, char *newpass, char *oldpass, 
+static int wb_aix_passwdrestrictions(char *user, char *newpass, char *oldpass,
                                     char **message)
 {
        logit("passwdresrictions called for '%s'\n", user);
@@ -977,13 +977,13 @@ static char *wb_aix_getpasswd(char *user)
 }
 
 /*
-  this is called to update things like the last login time. We don't 
+  this is called to update things like the last login time. We don't
   currently pass this onto the DC
 */
-static int wb_aix_putentry(char *key, char *table, char *attributes[], 
+static int wb_aix_putentry(char *key, char *table, char *attributes[],
                           attrval_t values[], int size)
 {
-       logit("putentry key='%s' table='%s' attrib='%s'\n", 
+       logit("putentry key='%s' table='%s' attrib='%s'\n",
              key, table, size>=1?attributes[0]:"<null>");
        errno = ENOSYS;
        return -1;
@@ -1047,7 +1047,7 @@ int wb_aix_init(struct secmethod_table *methods)
        methods->method_passwdexpired      = wb_aix_passwdexpired;
        methods->method_putentry           = wb_aix_putentry;
        methods->method_getpasswd          = wb_aix_getpasswd;
-       methods->method_authenticate       = wb_aix_authenticate;       
+       methods->method_authenticate       = wb_aix_authenticate;
        methods->method_commit             = wb_aix_commit;
        methods->method_chpass             = wb_aix_chpass;
        methods->method_passwdrestrictions = wb_aix_passwdrestrictions;
@@ -1074,4 +1074,3 @@ int wb_aix_init(struct secmethod_table *methods)
 
        return AUTH_SUCCESS;
 }
-
similarity index 96%
rename from source3/nsswitch/winbind_nss_config.h
rename to nsswitch/winbind_nss_config.h
index bed507fdeb50e0e4c9771f539aad60e7980f35f1..3e2ce68252ab98362b895061b2a7f66c85463a4d 100644 (file)
@@ -1,20 +1,20 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    Winbind daemon for ntdom nss module
 
    Copyright (C) Tim Potter 2000
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -54,6 +54,7 @@
 #ifndef FSTRING_LEN
 #define FSTRING_LEN 256
 typedef char fstring[FSTRING_LEN];
+#define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
 #endif
 
 /* Some systems (SCO) treat UNIX domain sockets as FIFOs */
similarity index 97%
rename from source3/nsswitch/winbind_nss_freebsd.c
rename to nsswitch/winbind_nss_freebsd.c
index 02e29f3131022d2f8557feae7aa918b3296209b0..ac230c8a9a4c39eda4c648a2db6ffdedfb3b8ceb 100644 (file)
@@ -1,21 +1,21 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
-   AIX loadable authentication module, providing identification 
+   AIX loadable authentication module, providing identification
    routines against Samba winbind/Windows NT Domain
 
    Copyright (C) Aaron Collins 2003
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
similarity index 98%
rename from source3/nsswitch/winbind_nss_hpux.h
rename to nsswitch/winbind_nss_hpux.h
index 62cf3c26c5209aadffd7115519cdc746d3d60246..40a352d4d3b796fb8cd22a5368058cfc694ee819 100644 (file)
@@ -1,19 +1,19 @@
 /*
    Unix SMB/CIFS implementation.
+
    Donated by HP to enable Winbindd to build on HPUX 11.x.
    Copyright (C) Jeremy Allison 2002.
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public
    License along with this library; if not, see <http://www.gnu.org/licenses/>.
 */
 #ifdef HAVE_PTHREAD_H
 #include <pthread.h>
 #endif
+
 typedef enum {
        NSS_SUCCESS,
        NSS_NOTFOUND,
        NSS_UNAVAIL,
        NSS_TRYAGAIN
 } nss_status_t;
+
 typedef nss_status_t NSS_STATUS;
 
 struct nss_backend;
+
 typedef nss_status_t (*nss_backend_op_t)(struct nss_backend *, void *args);
+
 struct nss_backend {
        nss_backend_op_t *ops;
        int n_ops;
@@ -58,41 +58,41 @@ typedef int nss_dbop_t;
 #include <errno.h>
 #include <netdb.h>
 #include <limits.h>
+
 #ifndef NSS_INCLUDE_UNSAFE
 #define NSS_INCLUDE_UNSAFE      1       /* Build old, MT-unsafe interfaces, */
 #endif  /* NSS_INCLUDE_UNSAFE */
+
 enum nss_netgr_argn {
        NSS_NETGR_MACHINE,
        NSS_NETGR_USER,
        NSS_NETGR_DOMAIN,
        NSS_NETGR_N
 };
+
 enum nss_netgr_status {
        NSS_NETGR_FOUND,
        NSS_NETGR_NO,
        NSS_NETGR_NOMEM
 };
+
 typedef unsigned nss_innetgr_argc;
 typedef char **nss_innetgr_argv;
+
 struct nss_innetgr_1arg {
        nss_innetgr_argc argc;
        nss_innetgr_argv argv;
 };
+
 typedef struct {
        void *result;        /* "result" parameter to getXbyY_r() */
        char *buffer;        /* "buffer"     "             "      */
        int buflen;         /* "buflen"     "             "      */
 } nss_XbyY_buf_t;
+
 extern nss_XbyY_buf_t *_nss_XbyY_buf_alloc(int struct_size, int buffer_size);
 extern void _nss_XbyY_buf_free(nss_XbyY_buf_t *);
+
 union nss_XbyY_key {
        uid_t uid;
        gid_t gid;
@@ -116,7 +116,7 @@ union nss_XbyY_key {
        } serv;
        void *ether;
 };
+
 typedef struct nss_XbyY_args {
        nss_XbyY_buf_t  buf;
        int stayopen;
@@ -127,11 +127,11 @@ typedef struct nss_XbyY_args {
         */
        int (*str2ent)(const char *instr, int instr_len, void *ent, char *buffer, int buflen);
        union nss_XbyY_key key;
+
        void *returnval;
        int erange;
        int h_errno;
        nss_status_t status;
 } nss_XbyY_args_t;
+
 #endif /* _WINBIND_NSS_HPUX_H */
similarity index 97%
rename from source3/nsswitch/winbind_nss_irix.c
rename to nsswitch/winbind_nss_irix.c
index 5bc0fa54da9a00d0fd68e64f877ff42fa3487758..66fa4b529d6e6adba5342e85b7d4f201db2ca8f2 100644 (file)
@@ -1,21 +1,21 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    Windows NT Domain nsswitch module
 
    Copyright (C) Tim Potter 2000
    Copyright (C) James Peach 2006
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -38,7 +38,7 @@ int asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
 #endif
 
 /* Maximum number of users to pass back over the unix domain socket
-   per call. This is not a static limit on the total number of users 
+   per call. This is not a static limit on the total number of users
    or groups returned in total. */
 
 #define MAX_GETPWENT_USERS 250
@@ -170,7 +170,7 @@ do_request(nsd_file_t *rq, struct winbindd_request *request)
        }
 }
 
-static int 
+static int
 winbind_callback(nsd_file_t **rqp, int fd)
 {
        struct winbindd_response response;
@@ -195,7 +195,7 @@ winbind_callback(nsd_file_t **rqp, int fd)
        if (status != NSS_STATUS_SUCCESS) {
                /* free any extra data area in response structure */
                winbindd_free_response(&response);
-               nsd_logprintf(NSD_LOG_MIN, 
+               nsd_logprintf(NSD_LOG_MIN,
                        "callback (winbind) returning not found, status = %d\n",
                        status);
 
@@ -225,9 +225,9 @@ winbind_callback(nsd_file_t **rqp, int fd)
                if (rlen == 0 || result == NULL) {
                        return NSD_ERROR;
                }
-               
+
                winbindd_free_response(&response);
-               
+
                nsd_logprintf(NSD_LOG_MIN, "    %s\n", result);
                nsd_set_result(rq, NS_SUCCESS, result, rlen, DYNAMIC);
                return NSD_OK;
@@ -236,7 +236,7 @@ winbind_callback(nsd_file_t **rqp, int fd)
            case WINBINDD_GETPWNAM:
            {
                struct winbindd_pw *pw = &response.data.pw;
-           
+
                nsd_logprintf(NSD_LOG_MIN,
                        "callback (winbind) GETPWUID | GETPWUID\n");
 
@@ -250,9 +250,9 @@ winbind_callback(nsd_file_t **rqp, int fd)
                                pw->pw_shell);
                if (rlen == 0 || result == NULL)
                    return NSD_ERROR;
-           
+
                winbindd_free_response(&response);
-           
+
                nsd_logprintf(NSD_LOG_MIN, "    %s\n", result);
                nsd_set_result(rq, NS_SUCCESS, result, rlen, DYNAMIC);
                return NSD_OK;
@@ -263,7 +263,7 @@ winbind_callback(nsd_file_t **rqp, int fd)
            {
                const struct winbindd_gr *gr = &response.data.gr;
                const char * members;
-           
+
                nsd_logprintf(NSD_LOG_MIN,
                        "callback (winbind) GETGRNAM | GETGRGID\n");
 
@@ -272,14 +272,14 @@ winbind_callback(nsd_file_t **rqp, int fd)
                } else {
                        members = "";
                }
-           
+
                rlen = asprintf(&result, "%s:%s:%d:%s\n",
                            gr->gr_name, gr->gr_passwd, gr->gr_gid, members);
                if (rlen == 0 || result == NULL)
                    return NSD_ERROR;
-           
+
                winbindd_free_response(&response);
-           
+
                nsd_logprintf(NSD_LOG_MIN, "    %s\n", result);
                nsd_set_result(rq, NS_SUCCESS, result, rlen, DYNAMIC);
                return NSD_OK;
@@ -296,46 +296,46 @@ winbind_callback(nsd_file_t **rqp, int fd)
            case WINBINDD_GETGRLST:
            {
                int entries;
-           
+
                nsd_logprintf(NSD_LOG_MIN,
                    "callback (winbind) GETGRENT | GETGRLIST %d responses\n",
                    response.data.num_entries);
-           
+
                if (response.data.num_entries) {
                    const struct winbindd_gr *gr = &response.data.gr;
                    const char * members;
                    fstring grp_name;
                    int     i;
-           
+
                    gr = (struct winbindd_gr *)response.extra_data.data;
                    if (! gr ) {
                        nsd_logprintf(NSD_LOG_MIN, "     no extra_data\n");
                        winbindd_free_response(&response);
                        return NSD_ERROR;
                    }
-           
+
                    members = (char *)response.extra_data.data +
                        (response.data.num_entries * sizeof(struct winbindd_gr));
-           
+
                    for (i = 0; i < response.data.num_entries; i++) {
                        snprintf(grp_name, sizeof(grp_name) - 1, "%s:%s:%d:",
                                    gr->gr_name, gr->gr_passwd, gr->gr_gid);
-           
+
                        nsd_append_element(rq, NS_SUCCESS, result, rlen);
                        nsd_append_result(rq, NS_SUCCESS,
                                &members[gr->gr_mem_ofs],
                                strlen(&members[gr->gr_mem_ofs]));
-           
+
                        /* Don't log the whole list, because it might be
                         * _really_ long and we probably don't want to clobber
                         * the log with it.
                         */
                        nsd_logprintf(NSD_LOG_MIN, "    %s (...)\n", grp_name);
-           
+
                        gr++;
                    }
                }
-           
+
                entries = response.data.num_entries;
                winbindd_free_response(&response);
                if (entries < MAX_GETPWENT_USERS)
@@ -405,7 +405,7 @@ winbind_callback(nsd_file_t **rqp, int fd)
        }
 }
 
-static int 
+static int
 winbind_timeout(nsd_file_t **rqp, nsd_times_t *to)
 {
        nsd_file_t *rq;
@@ -455,7 +455,7 @@ send_next_request(nsd_file_t *rq, struct winbindd_request *request)
        SAFE_FREE(request);
 
        if (status != NSS_STATUS_SUCCESS) {
-               nsd_logprintf(NSD_LOG_MIN, 
+               nsd_logprintf(NSD_LOG_MIN,
                        "send_next_request (winbind) error status = %d\n",
                        status);
                rq->f_status = status;
@@ -512,15 +512,15 @@ int lookup(nsd_file_t *rq)
            request->data.uid = atoi(key);
            rq->f_cmd_data = (void *)WINBINDD_GETPWUID;
        } else if (strcasecmp(map,"passwd.byname") == 0) {
-           strncpy(request->data.username, key, 
+           strncpy(request->data.username, key,
                sizeof(request->data.username) - 1);
            request->data.username[sizeof(request->data.username) - 1] = '\0';
-           rq->f_cmd_data = (void *)WINBINDD_GETPWNAM; 
+           rq->f_cmd_data = (void *)WINBINDD_GETPWNAM;
        } else if (strcasecmp(map,"group.byname") == 0) {
-           strncpy(request->data.groupname, key, 
+           strncpy(request->data.groupname, key,
                sizeof(request->data.groupname) - 1);
            request->data.groupname[sizeof(request->data.groupname) - 1] = '\0';
-           rq->f_cmd_data = (void *)WINBINDD_GETGRNAM; 
+           rq->f_cmd_data = (void *)WINBINDD_GETGRNAM;
        } else if (strcasecmp(map,"group.bygid") == 0) {
            request->data.gid = atoi(key);
            rq->f_cmd_data = (void *)WINBINDD_GETGRGID;
similarity index 98%
rename from source4/nsswitch/winbind_nss_irix.h
rename to nsswitch/winbind_nss_irix.h
index b40b14b0b034c894e6362ab28deac024936182b8..b47d23e204b7943ac83f46b3304cddef1c2caeef 100644 (file)
@@ -1,20 +1,20 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    Winbind daemon for ntdom nss module
 
    Copyright (C) Tim Potter 2000
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
similarity index 96%
rename from source3/nsswitch/winbind_nss_linux.c
rename to nsswitch/winbind_nss_linux.c
index c11c18759e65cb4526c6dd32c2ac24322637312a..2b51a8e15dbf6de4c7d848b745c53ab189e173f3 100644 (file)
@@ -1,20 +1,20 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    Windows NT Domain nsswitch module
 
    Copyright (C) Tim Potter 2000
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -30,7 +30,7 @@ static pthread_mutex_t winbind_nss_mutex = PTHREAD_MUTEX_INITIALIZER;
 #endif
 
 /* Maximum number of users to pass back over the unix domain socket
-   per call. This is not a static limit on the total number of users 
+   per call. This is not a static limit on the total number of users
    or groups returned in total. */
 
 #define MAX_GETPWENT_USERS 250
@@ -38,37 +38,37 @@ static pthread_mutex_t winbind_nss_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 NSS_STATUS _nss_winbind_setpwent(void);
 NSS_STATUS _nss_winbind_endpwent(void);
-NSS_STATUS _nss_winbind_getpwent_r(struct passwd *result, char *buffer, 
+NSS_STATUS _nss_winbind_getpwent_r(struct passwd *result, char *buffer,
                                   size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getpwuid_r(uid_t uid, struct passwd *result, 
+NSS_STATUS _nss_winbind_getpwuid_r(uid_t uid, struct passwd *result,
                                   char *buffer, size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getpwnam_r(const char *name, struct passwd *result, 
+NSS_STATUS _nss_winbind_getpwnam_r(const char *name, struct passwd *result,
                                   char *buffer, size_t buflen, int *errnop);
 NSS_STATUS _nss_winbind_setgrent(void);
 NSS_STATUS _nss_winbind_endgrent(void);
-NSS_STATUS _nss_winbind_getgrent_r(struct group *result, char *buffer, 
+NSS_STATUS _nss_winbind_getgrent_r(struct group *result, char *buffer,
                                   size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getgrlst_r(struct group *result, char *buffer, 
+NSS_STATUS _nss_winbind_getgrlst_r(struct group *result, char *buffer,
                                   size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getgrnam_r(const char *name, struct group *result, 
+NSS_STATUS _nss_winbind_getgrnam_r(const char *name, struct group *result,
                                   char *buffer, size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_getgrgid_r(gid_t gid, struct group *result, char *buffer, 
+NSS_STATUS _nss_winbind_getgrgid_r(gid_t gid, struct group *result, char *buffer,
                                   size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_initgroups_dyn(char *user, gid_t group, long int *start, 
-                                      long int *size, gid_t **groups, 
+NSS_STATUS _nss_winbind_initgroups_dyn(char *user, gid_t group, long int *start,
+                                      long int *size, gid_t **groups,
                                       long int limit, int *errnop);
-NSS_STATUS _nss_winbind_getusersids(const char *user_sid, char **group_sids, 
-                                   int *num_groups, char *buffer, size_t buf_size, 
+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 _nss_winbind_nametosid(const char *name, char **sid, char *buffer,
                                  size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_sidtoname(const char *sid, char **name, char *buffer, 
+NSS_STATUS _nss_winbind_sidtoname(const char *sid, char **name, char *buffer,
                                  size_t buflen, int *errnop);
 NSS_STATUS _nss_winbind_sidtouid(const char *sid, uid_t *uid, int *errnop);
 NSS_STATUS _nss_winbind_sidtogid(const char *sid, gid_t *gid, int *errnop);
-NSS_STATUS _nss_winbind_uidtosid(uid_t uid, char **sid, char *buffer, 
+NSS_STATUS _nss_winbind_uidtosid(uid_t uid, char **sid, char *buffer,
                                 size_t buflen, int *errnop);
-NSS_STATUS _nss_winbind_gidtosid(gid_t gid, char **sid, char *buffer, 
+NSS_STATUS _nss_winbind_gidtosid(gid_t gid, char **sid, char *buffer,
                                 size_t buflen, int *errnop);
 
 /* Prototypes from wb_common.c */
@@ -180,7 +180,7 @@ static NSS_STATUS fill_pwent(struct passwd *result,
 {
        /* User name */
 
-       if ((result->pw_name = 
+       if ((result->pw_name =
             get_static(buffer, buflen, strlen(pw->pw_name) + 1)) == NULL) {
 
                /* Out of memory */
@@ -192,7 +192,7 @@ static NSS_STATUS fill_pwent(struct passwd *result,
 
        /* Password */
 
-       if ((result->pw_passwd = 
+       if ((result->pw_passwd =
             get_static(buffer, buflen, strlen(pw->pw_passwd) + 1)) == NULL) {
 
                /* Out of memory */
@@ -201,7 +201,7 @@ static NSS_STATUS fill_pwent(struct passwd *result,
        }
 
        strcpy(result->pw_passwd, pw->pw_passwd);
-        
+
        /* [ug]id */
 
        result->pw_uid = pw->pw_uid;
@@ -209,7 +209,7 @@ static NSS_STATUS fill_pwent(struct passwd *result,
 
        /* GECOS */
 
-       if ((result->pw_gecos = 
+       if ((result->pw_gecos =
             get_static(buffer, buflen, strlen(pw->pw_gecos) + 1)) == NULL) {
 
                /* Out of memory */
@@ -218,10 +218,10 @@ static NSS_STATUS fill_pwent(struct passwd *result,
        }
 
        strcpy(result->pw_gecos, pw->pw_gecos);
-       
+
        /* Home directory */
-       
-       if ((result->pw_dir = 
+
+       if ((result->pw_dir =
             get_static(buffer, buflen, strlen(pw->pw_dir) + 1)) == NULL) {
 
                /* Out of memory */
@@ -232,10 +232,10 @@ static NSS_STATUS fill_pwent(struct passwd *result,
        strcpy(result->pw_dir, pw->pw_dir);
 
        /* Logon shell */
-       
-       if ((result->pw_shell = 
+
+       if ((result->pw_shell =
             get_static(buffer, buflen, strlen(pw->pw_shell) + 1)) == NULL) {
-               
+
                /* Out of memory */
 
                return NSS_STATUS_TRYAGAIN;
@@ -423,7 +423,7 @@ _nss_winbind_endpwent(void)
 /* Fetch the next password entry from ntdom password database */
 
 NSS_STATUS
-_nss_winbind_getpwent_r(struct passwd *result, char *buffer, 
+_nss_winbind_getpwent_r(struct passwd *result, char *buffer,
                        size_t buflen, int *errnop)
 {
        NSS_STATUS ret;
@@ -446,7 +446,7 @@ _nss_winbind_getpwent_r(struct passwd *result, char *buffer,
        }
 
        /* Else call winbindd to get a bunch of entries */
-       
+
        if (num_pw_cache > 0) {
                winbindd_free_response(&getpwent_response);
        }
@@ -456,7 +456,7 @@ _nss_winbind_getpwent_r(struct passwd *result, char *buffer,
 
        request.data.num_entries = MAX_GETPWENT_USERS;
 
-       ret = winbindd_request_response(WINBINDD_GETPWENT, &request, 
+       ret = winbindd_request_response(WINBINDD_GETPWENT, &request,
                               &getpwent_response);
 
        if (ret == NSS_STATUS_SUCCESS) {
@@ -483,7 +483,7 @@ _nss_winbind_getpwent_r(struct passwd *result, char *buffer,
 
                ret = fill_pwent(result, &pw_cache[ndx_pw_cache],
                                 &buffer, &buflen);
-               
+
                /* Out of memory - try again */
 
                if (ret == NSS_STATUS_TRYAGAIN) {
@@ -547,7 +547,7 @@ _nss_winbind_getpwuid_r(uid_t uid, struct passwd *result, char *buffer,
                ret = winbindd_request_response(WINBINDD_GETPWUID, &request, &response);
 
                if (ret == NSS_STATUS_SUCCESS) {
-                       ret = fill_pwent(result, &response.data.pw, 
+                       ret = fill_pwent(result, &response.data.pw,
                                         &buffer, &buflen);
 
                        if (ret == NSS_STATUS_TRYAGAIN) {
@@ -615,7 +615,7 @@ _nss_winbind_getpwnam_r(const char *name, struct passwd *result, char *buffer,
                ZERO_STRUCT(response);
                ZERO_STRUCT(request);
 
-               strncpy(request.data.username, name, 
+               strncpy(request.data.username, name,
                        sizeof(request.data.username) - 1);
                request.data.username
                        [sizeof(request.data.username) - 1] = '\0';
@@ -746,7 +746,7 @@ winbind_getgrent(enum winbindd_cmd cmd,
        NSS_STATUS ret;
        static struct winbindd_request request;
        static int called_again;
-       
+
 
 #ifdef DEBUG_NSS
        fprintf(stderr, "[%5d]: getgrent\n", getpid());
@@ -764,7 +764,7 @@ winbind_getgrent(enum winbindd_cmd cmd,
        }
 
        /* Else call winbindd to get a bunch of entries */
-       
+
        if (num_gr_cache > 0) {
                winbindd_free_response(&getgrent_response);
        }
@@ -774,7 +774,7 @@ winbind_getgrent(enum winbindd_cmd cmd,
 
        request.data.num_entries = MAX_GETGRENT_USERS;
 
-       ret = winbindd_request_response(cmd, &request, 
+       ret = winbindd_request_response(cmd, &request,
                               &getgrent_response);
 
        if (ret == NSS_STATUS_SUCCESS) {
@@ -810,7 +810,7 @@ winbind_getgrent(enum winbindd_cmd cmd,
                ret = fill_grent(result, &gr_cache[ndx_gr_cache],
                                 ((char *)getgrent_response.extra_data.data)+mem_ofs,
                                 &buffer, &buflen);
-               
+
                /* Out of memory - try again */
 
                if (ret == NSS_STATUS_TRYAGAIN) {
@@ -869,7 +869,7 @@ _nss_winbind_getgrnam_r(const char *name,
        static struct winbindd_response response;
        struct winbindd_request request;
        static int keep_response;
-       
+
 #ifdef DEBUG_NSS
        fprintf(stderr, "[%5d]: getgrnam %s\n", getpid(), name);
 #endif
@@ -888,7 +888,7 @@ _nss_winbind_getgrnam_r(const char *name,
                ZERO_STRUCT(request);
                ZERO_STRUCT(response);
 
-               strncpy(request.data.groupname, name, 
+               strncpy(request.data.groupname, name,
                        sizeof(request.data.groupname));
                request.data.groupname
                        [sizeof(request.data.groupname) - 1] = '\0';
@@ -896,7 +896,7 @@ _nss_winbind_getgrnam_r(const char *name,
                ret = winbindd_request_response(WINBINDD_GETGRNAM, &request, &response);
 
                if (ret == NSS_STATUS_SUCCESS) {
-                       ret = fill_grent(result, &response.data.gr, 
+                       ret = fill_grent(result, &response.data.gr,
                                         (char *)response.extra_data.data,
                                         &buffer, &buflen);
 
@@ -911,7 +911,7 @@ _nss_winbind_getgrnam_r(const char *name,
 
                /* We've been called again */
 
-               ret = fill_grent(result, &response.data.gr, 
+               ret = fill_grent(result, &response.data.gr,
                                 (char *)response.extra_data.data, &buffer,
                                 &buflen);
 
@@ -975,8 +975,8 @@ _nss_winbind_getgrgid_r(gid_t gid,
 
                if (ret == NSS_STATUS_SUCCESS) {
 
-                       ret = fill_grent(result, &response.data.gr, 
-                                        (char *)response.extra_data.data, 
+                       ret = fill_grent(result, &response.data.gr,
+                                        (char *)response.extra_data.data,
                                         &buffer, &buflen);
 
                        if (ret == NSS_STATUS_TRYAGAIN) {
@@ -990,7 +990,7 @@ _nss_winbind_getgrgid_r(gid_t gid,
 
                /* We've been called again */
 
-               ret = fill_grent(result, &response.data.gr, 
+               ret = fill_grent(result, &response.data.gr,
                                 (char *)response.extra_data.data, &buffer,
                                 &buflen);
 
@@ -1110,7 +1110,7 @@ _nss_winbind_initgroups_dyn(char *user, gid_t group, long int *start,
                        *start += 1;
                }
        }
-       
+
        /* Back to your regularly scheduled programming */
 
  done:
@@ -1167,7 +1167,7 @@ _nss_winbind_getusersids(const char *user_sid, char **group_sids,
        *group_sids = buffer;
        memcpy(buffer, response.extra_data.data, response.length - sizeof(response));
        errno = *errnop = 0;
-       
+
  done:
        winbindd_free_response(&response);
 
@@ -1199,7 +1199,7 @@ _nss_winbind_nametosid(const char *name, char **sid, char *buffer,
        ZERO_STRUCT(response);
        ZERO_STRUCT(request);
 
-       strncpy(request.data.name.name, name, 
+       strncpy(request.data.name.name, name,
                sizeof(request.data.name.name) - 1);
        request.data.name.name[sizeof(request.data.name.name) - 1] = '\0';
 
@@ -1264,7 +1264,7 @@ _nss_winbind_sidtoname(const char *sid, char **name, char *buffer,
        }
 
 
-       strncpy(request.data.sid, sid, 
+       strncpy(request.data.sid, sid,
                sizeof(request.data.sid) - 1);
        request.data.sid[sizeof(request.data.sid) - 1] = '\0';
 
@@ -1274,7 +1274,7 @@ _nss_winbind_sidtoname(const char *sid, char **name, char *buffer,
                goto failed;
        }
 
-       needed = 
+       needed =
                strlen(response.data.name.dom_name) +
                strlen(response.data.name.name) + 2;
 
@@ -1284,7 +1284,7 @@ _nss_winbind_sidtoname(const char *sid, char **name, char *buffer,
                goto failed;
        }
 
-       snprintf(buffer, needed, "%s%c%s", 
+       snprintf(buffer, needed, "%s%c%s",
                 response.data.name.dom_name,
                 sep_char,
                 response.data.name.name);
similarity index 98%
rename from source3/nsswitch/winbind_nss_linux.h
rename to nsswitch/winbind_nss_linux.h
index 74aaec5ce6059af2f23c4ee9944abf94a25cadf8..db5a378aad642867bf2878cf7d994df4deae7034 100644 (file)
@@ -1,20 +1,20 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    Winbind daemon for ntdom nss module
 
    Copyright (C) Tim Potter 2000
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
similarity index 98%
rename from source4/nsswitch/winbind_nss_netbsd.h
rename to nsswitch/winbind_nss_netbsd.h
index dceb57c78444b88824259b065dd351c1f6c9bcf7..5aeb2b9d7da705dffa4e4c2b94322dba24c01315 100644 (file)
@@ -1,21 +1,21 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
-   NetBSD loadable authentication module, providing identification 
+   NetBSD loadable authentication module, providing identification
    routines against Samba winbind/Windows NT Domain
 
    Copyright (C) Luke Mewburn 2004-2005
-  
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
similarity index 97%
rename from source3/nsswitch/winbind_nss_solaris.c
rename to nsswitch/winbind_nss_solaris.c
index 865b6ebbb068d6d3597a442a99dc7f6441ceaf55..4c85bd3621b57275300e7551090348ffac520024 100644 (file)
@@ -1,8 +1,8 @@
 /*
-  Solaris NSS wrapper for winbind 
+  Solaris NSS wrapper for winbind
   - Shirish Kalele 2000
-  
-  Based on Luke Howard's ldap_nss module for Solaris 
+
+  Based on Luke Howard's ldap_nss module for Solaris
   */
 
 /*
@@ -38,7 +38,7 @@
 #include <sys/syslog.h>
 #endif /*hpux*/
 
-#if defined(HAVE_NSS_COMMON_H) || defined(HPUX) 
+#if defined(HAVE_NSS_COMMON_H) || defined(HPUX)
 
 #undef NSS_DEBUG
 
@@ -63,9 +63,9 @@ struct nss_groupsbymem {
        gid_t *gid_array;
        int maxgids;
        int force_slow_way;
-       int (*str2ent)(const char *instr, int instr_len, void *ent, 
+       int (*str2ent)(const char *instr, int instr_len, void *ent,
                      char *buffer, int buflen);
-       nss_status_t (*process_cstr)(const char *instr, int instr_len, 
+       nss_status_t (*process_cstr)(const char *instr, int instr_len,
                                    struct nss_groupsbymem *);
        int numgids;
 };
@@ -106,7 +106,7 @@ _nss_winbind_getpwent_solwrap (nss_backend_t* be, void *args)
        int* errnop = &NSS_ARGS(args)->erange;
        char logmsg[80];
 
-       ret = _nss_winbind_getpwent_r(result, buffer, 
+       ret = _nss_winbind_getpwent_r(result, buffer,
                                      buflen, errnop);
 
        if(ret == NSS_STATUS_SUCCESS)
@@ -119,7 +119,7 @@ _nss_winbind_getpwent_solwrap (nss_backend_t* be, void *args)
                        snprintf(logmsg, 79, "_nss_winbind_getpwent_solwrap: Returning error: %d.\n",ret);
                        NSS_DEBUG(logmsg);
                }
-    
+
        return ret;
 }
 
@@ -138,7 +138,7 @@ _nss_winbind_getpwnam_solwrap (nss_backend_t* be, void* args)
                                                &NSS_ARGS(args)->erange);
        if(ret == NSS_STATUS_SUCCESS)
                NSS_ARGS(args)->returnval = (void*) result;
-  
+
        return ret;
 }
 
@@ -147,7 +147,7 @@ _nss_winbind_getpwuid_solwrap(nss_backend_t* be, void* args)
 {
        NSS_STATUS ret;
        struct passwd* result = (struct passwd*) NSS_ARGS(args)->buf.result;
-  
+
        NSS_DEBUG("_nss_winbind_getpwuid_solwrap");
        ret = _nss_winbind_getpwuid_r (NSS_ARGS(args)->key.uid,
                                       result,
@@ -156,7 +156,7 @@ _nss_winbind_getpwuid_solwrap(nss_backend_t* be, void* args)
                                       &NSS_ARGS(args)->erange);
        if(ret == NSS_STATUS_SUCCESS)
                NSS_ARGS(args)->returnval = (void*) result;
-  
+
        return ret;
 }
 
@@ -183,7 +183,7 @@ _nss_winbind_passwd_constr (const char* db_name,
                            const char* cfg_args)
 {
        nss_backend_t *be;
-  
+
        if(!(be = SMB_MALLOC_P(nss_backend_t)) )
                return NULL;
 
@@ -221,7 +221,7 @@ _nss_winbind_getgrent_solwrap(nss_backend_t* be, void* args)
        int* errnop = &NSS_ARGS(args)->erange;
        char logmsg[80];
 
-       ret = _nss_winbind_getgrent_r(result, buffer, 
+       ret = _nss_winbind_getgrent_r(result, buffer,
                                      buflen, errnop);
 
        if(ret == NSS_STATUS_SUCCESS)
@@ -235,7 +235,7 @@ _nss_winbind_getgrent_solwrap(nss_backend_t* be, void* args)
                }
 
        return ret;
-       
+
 }
 
 static NSS_STATUS
@@ -253,10 +253,10 @@ _nss_winbind_getgrnam_solwrap(nss_backend_t* be, void* args)
 
        if(ret == NSS_STATUS_SUCCESS)
                NSS_ARGS(args)->returnval = (void*) result;
-  
+
        return ret;
 }
-  
+
 static NSS_STATUS
 _nss_winbind_getgrgid_solwrap(nss_backend_t* be, void* args)
 {
@@ -310,7 +310,7 @@ _nss_winbind_group_destr (nss_backend_t* be, void* args)
        return NSS_STATUS_SUCCESS;
 }
 
-static nss_backend_op_t group_ops[] = 
+static nss_backend_op_t group_ops[] =
 {
        _nss_winbind_group_destr,
        _nss_winbind_endgrent_solwrap,
@@ -319,7 +319,7 @@ static nss_backend_op_t group_ops[] =
        _nss_winbind_getgrnam_solwrap,
        _nss_winbind_getgrgid_solwrap,
        _nss_winbind_getgroupsbymember_solwrap
-}; 
+};
 
 nss_backend_t*
 _nss_winbind_group_constr (const char* db_name,
@@ -333,7 +333,7 @@ _nss_winbind_group_constr (const char* db_name,
 
        be->ops = group_ops;
        be->n_ops = sizeof(group_ops) / sizeof(nss_backend_op_t);
-  
+
        NSS_DEBUG("Initialized nss_winbind group backend");
        return be;
 }
@@ -410,7 +410,7 @@ parse_response(int af, nss_XbyY_args_t* argp, struct winbindd_response *response
                argp->erange = 1;
                return NSS_STR_PARSE_ERANGE;
        }
-       
+
        data = response->data.winsresp;
        for( i = 0; i < addrcount; i++) {
                p = strchr(data, '\t');
@@ -524,7 +524,7 @@ _nss_winbind_hosts_getbyname(nss_backend_t* be, void *args)
 
        ZERO_STRUCT(response);
        ZERO_STRUCT(request);
-       
+
        strncpy(request.data.winsreq, argp->key.name, sizeof(request.data.winsreq) - 1);
        request.data.winsreq[sizeof(request.data.winsreq) - 1] = '\0';
 
@@ -560,7 +560,7 @@ _nss_winbind_hosts_getbyaddr(nss_backend_t* be, void *args)
                        request.data.winsreq, sizeof request.data.winsreq);
 #else
         snprintf(request.data.winsreq, sizeof request.data.winsreq,
-                "%u.%u.%u.%u", 
+                "%u.%u.%u.%u",
                 ((unsigned char *)argp->key.hostaddr.addr)[0],
                 ((unsigned char *)argp->key.hostaddr.addr)[1],
                 ((unsigned char *)argp->key.hostaddr.addr)[2],
similarity index 99%
rename from source3/nsswitch/winbind_nss_solaris.h
rename to nsswitch/winbind_nss_solaris.h
index 84062dbab4a3d0dae99f1d2c5a17ed0a0bfec0f8..c6cadefc38a81c9c3d01ed01d502386aa5191888 100644 (file)
@@ -1,20 +1,20 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    Winbind daemon for ntdom nss module
 
    Copyright (C) Tim Potter 2000
-   
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3 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 Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
similarity index 98%
rename from source3/nsswitch/winbind_struct_protocol.h
rename to nsswitch/winbind_struct_protocol.h
index 36873f2096f2552dc12e3f6f9c604ba97f735c24..fe3da817910eb107c6dd8b5d686c4d3801b6e3bc 100644 (file)
@@ -1,14 +1,14 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
 
    Winbind daemon for ntdom nss module
 
    Copyright (C) Tim Potter 2000
    Copyright (C) Gerald Carter 2006
-   
+
    You are free to use this interface definition in any way you see
    fit, including without restriction, using this header in your own
-   products. You do not need to give any attribution.  
+   products. You do not need to give any attribution.
 */
 
 #ifndef SAFE_FREE
@@ -41,8 +41,6 @@
 
 /* Update this when you change the interface.  */
 
-/* Version 20: added WINBINDD_REMOVE_MAPPING command */
-
 #define WINBIND_INTERFACE_VERSION 20
 
 /* Have to deal with time_t being 4 or 8 bytes due to structure alignment.
@@ -217,7 +215,7 @@ typedef struct winbindd_gr {
 /*******************************************************************************
  * This structure MUST be the same size in the 32bit and 64bit builds
  * for compatibility between /lib64/libnss_winbind.so and /lib/libnss_winbind.so
- * 
+ *
  * DO NOT CHANGE THIS STRUCTURE WITHOUT TESTING THE 32BIT NSS LIB AGAINST
  * A 64BIT WINBINDD    --jerry
  ******************************************************************************/
@@ -327,7 +325,7 @@ struct winbindd_request {
                } dsgetdcname;
 
                /* padding -- needed to fix alignment between 32bit and 64bit libs.
-                  The size is the sizeof the union without the padding aligned on 
+                  The size is the sizeof the union without the padding aligned on
                   an 8 byte boundary.   --jerry */
 
                char padding[1800];
@@ -353,27 +351,27 @@ enum winbindd_result {
 /*******************************************************************************
  * This structure MUST be the same size in the 32bit and 64bit builds
  * for compatibility between /lib64/libnss_winbind.so and /lib/libnss_winbind.so
- * 
+ *
  * DO NOT CHANGE THIS STRUCTURE WITHOUT TESTING THE 32BIT NSS LIB AGAINST
  * A 64BIT WINBINDD    --jerry
  ******************************************************************************/
 
 struct winbindd_response {
-    
+
        /* Header information */
 
        uint32_t length;                      /* Length of response */
        enum winbindd_result result;          /* Result code */
 
        /* Fixed length return data */
-       
+
        union {
                int interface_version;  /* Try to ensure this is always in the same spot... */
-               
+
                fstring winsresp;               /* WINS response */
 
                /* getpwnam, getpwuid */
-               
+
                struct winbindd_pw pw;
 
                /* getgrnam, getgrgid */
@@ -387,7 +385,7 @@ struct winbindd_response {
                } sid;
                struct winbindd_name {
                        fstring dom_name;       /* lookupsid */
-                       fstring name;       
+                       fstring name;
                        int type;
                } name;
                uid_t uid;          /* sid_to_uid */
similarity index 99%
rename from source3/nsswitch/wins.c
rename to nsswitch/wins.c
index e028eb8cf2ba69fcdc4437fb43b84b742cd65ea8..80f01191080c46ea136867773060f30603aaade8 100644 (file)
@@ -1,21 +1,21 @@
-/* 
+/*
    Unix SMB/CIFS implementation.
-   a WINS nsswitch module 
+   a WINS nsswitch module
    Copyright (C) Andrew Tridgell 1999
-   
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-   
+
 */
 
 #include "includes.h"
@@ -207,7 +207,7 @@ int lookup(nsd_file_t *rq)
        bool found = False;
 
        nsd_logprintf(NSD_LOG_MIN, "entering lookup (wins)\n");
-       if (! rq) 
+       if (! rq)
                return NSD_ERROR;
 
        map = nsd_attr_fetch_string(rq->f_attrs, "table", (char*)0);
@@ -225,7 +225,7 @@ int lookup(nsd_file_t *rq)
        response[0] = '\0';
        len = sizeof(response) - 2;
 
-       /* 
+       /*
         * response needs to be a string of the following format
         * ip_address[ ip_address]*\tname[ alias]*
         */
@@ -276,7 +276,7 @@ int lookup(nsd_file_t *rq)
                if (size > len) {
                    free(ip_list);
                    return NSD_ERROR;
-               }   
+               }
                strncat(response,key,size);
                strncat(response,"\n",1);
                found = True;
@@ -306,7 +306,7 @@ static char *get_static(char **buffer, size_t *buflen, int len)
 
        /* Error check.  We return false if things aren't set up right, or
           there isn't enough buffer space left. */
-       
+
        if ((buffer == NULL) || (buflen == NULL) || (*buflen < len)) {
                return NULL;
        }
@@ -333,7 +333,7 @@ _nss_wins_gethostbyname_r(const char *hostname, struct hostent *he,
        int i, count;
        fstring name;
        size_t namelen;
-               
+
 #if HAVE_PTHREAD
        pthread_mutex_lock(&wins_nss_mutex);
 #endif
index 45582f5d568b54fce90aa66f13759d710978c3be..d7a84e3fcc23c0db4b3a64672890d6cd7d965e22 100644 (file)
@@ -28,4 +28,7 @@ $(pidldir)/lib/Parse/Pidl/Expr.pm: $(pidldir)/idl.yp
 
 testcov-html:: pidl-testcov
 
+pidl-clean:
+       /bin/rm -f $(pidldir)/Makefile
 
+clean:: pidl-clean
index 33af2c230020e77ac30ed464241f9917d29e0dc5..4b5c99e3b1f86fd82ee99326c10b403702d712f6 100644 (file)
@@ -244,7 +244,7 @@ SMBLDAP_OBJ = @SMBLDAP@ @SMBLDAPUTIL@
 
 VERSION_OBJ = lib/version.o
 
-WBCOMMON_OBJ = nsswitch/wb_common.o
+WBCOMMON_OBJ = ../nsswitch/wb_common.o
 
 AFS_OBJ = lib/afs.o
 
@@ -809,7 +809,7 @@ RPCCLIENT_OBJ = $(RPCCLIENT_OBJ1) \
             $(LIBADS_OBJ) $(POPT_LIB_OBJ) \
             $(SMBLDAP_OBJ) $(DCUTIL_OBJ) $(LDB_OBJ) 
 
-PAM_WINBIND_OBJ = nsswitch/pam_winbind.o localedir.o $(WBCOMMON_OBJ) \
+PAM_WINBIND_OBJ = ../nsswitch/pam_winbind.o localedir.o $(WBCOMMON_OBJ) \
                  $(LIBREPLACE_OBJ) @BUILD_INIPARSER@
 
 LIBSMBCLIENT_OBJ0 = \
@@ -1009,7 +1009,7 @@ SMBFILTER_OBJ = utils/smbfilter.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
                  $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \
                 $(LIBNDR_GEN_OBJ0)
 
-WINBIND_WINS_NSS_OBJ = nsswitch/wins.o $(PARAM_OBJ) \
+WINBIND_WINS_NSS_OBJ = ../nsswitch/wins.o $(PARAM_OBJ) \
        $(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) $(NSSWINS_OBJ) $(KRBCLIENT_OBJ) \
        $(LIBNDR_GEN_OBJ0)
 
@@ -1073,7 +1073,7 @@ WINBINDD_OBJ = \
                $(AFS_OBJ) $(AFS_SETTOKEN_OBJ) \
                $(LIBADS_SERVER_OBJ) $(SERVER_MUTEX_OBJ) $(LDB_OBJ) 
 
-WBINFO_OBJ = nsswitch/wbinfo.o $(LIBSAMBA_OBJ) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
+WBINFO_OBJ = ../nsswitch/wbinfo.o $(LIBSAMBA_OBJ) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
                $(POPT_LIB_OBJ) $(AFS_SETTOKEN_OBJ) \
                lib/winbind_util.o $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@
 
@@ -1110,7 +1110,7 @@ LDBADD_OBJ = $(LDB_CMDLINE_OBJ) lib/ldb/tools/ldbadd.o
 LDBDEL_OBJ = $(LDB_CMDLINE_OBJ) lib/ldb/tools/ldbdel.o
 LDBMODIFY_OBJ = $(LDB_CMDLINE_OBJ) lib/ldb/tools/ldbmodify.o
 
-WINBIND_KRB5_LOCATOR_OBJ1 = nsswitch/winbind_krb5_locator.o
+WINBIND_KRB5_LOCATOR_OBJ1 = ../nsswitch/winbind_krb5_locator.o
 WINBIND_KRB5_LOCATOR_OBJ = $(WINBIND_KRB5_LOCATOR_OBJ1) $(LIBREPLACE_OBJ)
 
 POPT_OBJ=../lib/popt/findme.o ../lib/popt/popt.o ../lib/popt/poptconfig.o \
@@ -1767,13 +1767,13 @@ shlibs test_shlibs: @LIBTDB_SHARED@
 #
 #-------------------------------------------------------------------
 
-LIBWBCLIENT_OBJ0 = nsswitch/libwbclient/wbclient.o \
-                 nsswitch/libwbclient/wbc_util.o \
-                 nsswitch/libwbclient/wbc_pwd.o \
-                 nsswitch/libwbclient/wbc_idmap.o \
-                 nsswitch/libwbclient/wbc_sid.o \
-                 nsswitch/libwbclient/wbc_guid.o \
-                 nsswitch/libwbclient/wbc_pam.o
+LIBWBCLIENT_OBJ0 = ../nsswitch/libwbclient/wbclient.o \
+                 ../nsswitch/libwbclient/wbc_util.o \
+                 ../nsswitch/libwbclient/wbc_pwd.o \
+                 ../nsswitch/libwbclient/wbc_idmap.o \
+                 ../nsswitch/libwbclient/wbc_sid.o \
+                 ../nsswitch/libwbclient/wbc_guid.o \
+                 ../nsswitch/libwbclient/wbc_pam.o
 LIBWBCLIENT_OBJ = $(LIBWBCLIENT_OBJ0) \
                  $(WBCOMMON_OBJ) \
                  @LIBTALLOC_STATIC@ $(LIBREPLACE_OBJ)
@@ -1784,7 +1784,7 @@ LIBWBCLIENT_SHARED_TARGET_SONAME=$(LIBWBCLIENT_SHARED_TARGET).$(LIBWBCLIENT_SOVE
 LIBWBCLIENT_STATIC_TARGET=@LIBWBCLIENT_STATIC_TARGET@
 LIBWBCLIENT=@LIBWBCLIENT_STATIC@ @LIBWBCLIENT_SHARED@
 LIBWBCLIENT_SYMS=$(srcdir)/exports/libwbclient.@SYMSEXT@
-LIBWBCLIENT_HEADERS=$(srcdir)/nsswitch/libwbclient/wbclient.h
+LIBWBCLIENT_HEADERS=$(srcdir)/../nsswitch/libwbclient/wbclient.h
 
 $(LIBWBCLIENT_SYMS): $(LIBWBCLIENT_HEADERS)
        @$(MKSYMS_SH) $(AWK) $@ $(LIBWBCLIENT_HEADERS)
@@ -2776,7 +2776,7 @@ etags::
        etags --append `find $(srcdir)/../source4/ldap_server -name "*.[ch]"`
        etags --append `find $(srcdir)/../source4/smb_server -name "*.[ch]"`
        etags --append `find $(srcdir)/../source4/include -name "*.[ch]"`
-       etags --append `find $(srcdir)/../source4/nsswitch -name "*.[ch]"`
+       etags --append `find $(srcdir)/../nsswitch -name "*.[ch]"`
        etags --append `find $(srcdir)/../source4/cldap_server -name "*.[ch]"`
        etags --append `find $(srcdir)/../source4/utils -name "*.[ch]"`
        etags --append `find $(srcdir)/../source4/librpc -name "*.[ch]"`
index b90b1b3f6043ac8a4ebc5b9d05c672ef678e39e7..42bdddf5f986d0c8393562d7037983a91f073677 100644 (file)
@@ -5699,8 +5699,8 @@ HAVE_WINBIND=yes
 # Define the winbind shared library name and any specific linker flags
 # it needs to be built with.
 
-WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
-WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
+WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
+WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
 NSSSONAMEVERSIONSUFFIX=""
 WINBIND_NSS_PTHREAD=""
@@ -5708,16 +5708,16 @@ WINBIND_NSS_PTHREAD=""
 case "$host_os" in
        *linux*)
                NSSSONAMEVERSIONSUFFIX=".2"
-               WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
+               WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
                ;;
        *freebsd[[5-9]]*)
                # FreeBSD winbind client is implemented as a wrapper around
                # the Linux version.
                NSSSONAMEVERSIONSUFFIX=".1"
-               WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
-                   nsswitch/winbind_nss_linux.o"
-               WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
-               WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
+               WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
+                   ../nsswitch/winbind_nss_linux.o"
+               WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
+               WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
                ;;
 
        *netbsd*[[3-9]]*)
@@ -5727,10 +5727,10 @@ case "$host_os" in
                #
                if test x"$ac_cv_func_getpwent_r" = x"yes"; then
                        WINBIND_NSS_EXTRA_OBJS="\
-                           nsswitch/winbind_nss_netbsd.o \
-                           nsswitch/winbind_nss_linux.o"
-                       WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
-                       WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
+                           ../nsswitch/winbind_nss_netbsd.o \
+                           ../nsswitch/winbind_nss_linux.o"
+                       WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
+                       WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
                else
                        HAVE_WINBIND=no
                        winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
@@ -5738,28 +5738,28 @@ case "$host_os" in
                ;;
        *irix*)
                # IRIX has differently named shared libraries
-               WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
-               WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
-               WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
+               WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
+               WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
+               WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
                ;;
        *solaris*)
                # Solaris winbind client is implemented as a wrapper around
                # the Linux version.
                NSSSONAMEVERSIONSUFFIX=".1"
-               WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
-                   nsswitch/winbind_nss_linux.o"
+               WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
+                   ../nsswitch/winbind_nss_linux.o"
                WINBIND_NSS_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
                PAM_WINBIND_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
                ;;
        *hpux11*)
-               WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
+               WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
                ;;
        *aix*)
                # AIX has even differently named shared libraries.  No
                # WINS support has been implemented yet.
-               WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
+               WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
                WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
-               WINBIND_NSS="nsswitch/WINBIND"
+               WINBIND_NSS="../nsswitch/WINBIND"
                WINBIND_WINS_NSS=""
                ;;
        *)
index 605bbf1fb6b4b557e6aff4926cc09f196a87276d..7fe8ed82a21b82ecca5205c4bd060d396b14f844 100644 (file)
@@ -368,13 +368,14 @@ static void print_socket_options(int s)
         * leak in SCO Openserver 5.0 */
        /* reported on samba-technical  --jerry */
        if ( DEBUGLEVEL >= 5 ) {
+               DEBUG(5,("Socket options:\n"));
                for (; p->name != NULL; p++) {
                        if (getsockopt(s, p->level, p->option,
                                                (void *)&value, &vlen) == -1) {
-                               DEBUG(5,("Could not test socket option %s.\n",
+                               DEBUGADD(5,("\tCould not test socket option %s.\n",
                                                        p->name));
                        } else {
-                               DEBUG(5,("socket option %s = %d\n",
+                               DEBUGADD(5,("\t%s = %d\n",
                                                        p->name,value));
                        }
                }
index 149a3e1ab977b126118ed60ea555484f3d4b0b9c..a27b75f7f1ec1870739a7e4ba36beccf1932f08f 100644 (file)
@@ -1,7 +1,9 @@
-/* A Bison parser, made by GNU Bison 1.875a.  */
+/* A Bison parser, made by GNU Bison 2.3.  */
 
-/* Skeleton parser for Yacc-like parsing with Bison,
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
 
    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
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, when this file is copied by Bison into a
-   Bison output file, you may use that output file without restriction.
-   This special exception was added by the Free Software Foundation
-   in version 1.24 of Bison.  */
-
-/* Written by Richard Stallman by simplifying the original so called
-   ``semantic'' parser.  */
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
 
 /* All symbols defined below should begin with yy or YY, to avoid
    infringing on user name space.  This should be done even for local
@@ -34,6 +46,9 @@
 /* Identify Bison output.  */
 #define YYBISON 1
 
+/* Bison version.  */
+#define YYBISON_VERSION "2.3"
+
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
 
@@ -69,6 +84,7 @@
      tUNUMBER = 273
    };
 #endif
+/* Tokens.  */
 #define tAGO 258
 #define tDST 259
 #define tDAY 260
@@ -250,9 +266,6 @@ typedef struct
 #define YYLEX_PARAM parm
 #define YYPARSE_PARAM parm
 
-static int yyerror ();
-static int yylex ();
-
 
 
 /* Enabling traces.  */
@@ -268,14 +281,21 @@ static int yylex ();
 # define YYERROR_VERBOSE 0
 #endif
 
-#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 172 "getdate.y"
-typedef union YYSTYPE {
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+#line 169 "getdate.y"
+{
   int intval;
   textint textintval;
-} YYSTYPE;
-/* Line 191 of yacc.c.  */
-#line 281 "getdate.c"
+}
+/* Line 187 of yacc.c.  */
+#line 298 "getdate.c"
+       YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
@@ -284,51 +304,179 @@ typedef union YYSTYPE {
 
 
 /* Copy the second part of user declarations.  */
+#line 174 "getdate.y"
 
 
-/* Line 214 of yacc.c.  */
-#line 293 "getdate.c"
+static int yyerror(const char *);
+static int yylex(YYSTYPE *, parser_control *);
 
-#if ! defined (yyoverflow) || YYERROR_VERBOSE
 
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
 
-# if YYSTACK_USE_ALLOCA
-#  define YYSTACK_ALLOC alloca
+/* Line 216 of yacc.c.  */
+#line 317 "getdate.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
 # else
-#  ifndef YYSTACK_USE_ALLOCA
-#   if defined (alloca) || defined (_ALLOCA_H)
-#    define YYSTACK_ALLOC alloca
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int i)
+#else
+static int
+YYID (i)
+    int i;
+#endif
+{
+  return i;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
 #   else
-#    ifdef __GNUC__
-#     define YYSTACK_ALLOC __builtin_alloca
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
 #    endif
 #   endif
 #  endif
 # endif
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning. */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
 # else
-#  if defined (__STDC__) || defined (__cplusplus)
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   define YYSIZE_T size_t
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
 #  endif
-#  define YYSTACK_ALLOC malloc
-#  define YYSTACK_FREE free
 # endif
-#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
 
 
-#if (! defined (yyoverflow) \
-     && (! defined (__cplusplus) \
-        || (YYSTYPE_IS_TRIVIAL)))
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
 {
-  short yyss;
+  yytype_int16 yyss;
   YYSTYPE yyvs;
   };
 
@@ -338,24 +486,24 @@ union yyalloc
 /* The size of an array large to enough to hold all stacks, each with
    N elements.  */
 # define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (short) + sizeof (YYSTYPE))                                \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
       + YYSTACK_GAP_MAXIMUM)
 
 /* Copy COUNT objects from FROM to TO.  The source and destination do
    not overlap.  */
 # ifndef YYCOPY
-#  if 1 < __GNUC__
+#  if defined __GNUC__ && 1 < __GNUC__
 #   define YYCOPY(To, From, Count) \
       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
 #  else
 #   define YYCOPY(To, From, Count)             \
       do                                       \
        {                                       \
-         register YYSIZE_T yyi;                \
+         YYSIZE_T yyi;                         \
          for (yyi = 0; yyi < (Count); yyi++)   \
            (To)[yyi] = (From)[yyi];            \
        }                                       \
-      while (0)
+      while (YYID (0))
 #  endif
 # endif
 
@@ -373,39 +521,33 @@ union yyalloc
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
        yyptr += yynewbytes / sizeof (*yyptr);                          \
       }                                                                        \
-    while (0)
+    while (YYID (0))
 
 #endif
 
-#if defined (__STDC__) || defined (__cplusplus)
-   typedef signed char yysigned_char;
-#else
-   typedef short yysigned_char;
-#endif
-
-/* YYFINAL -- State number of the termination state. */
+/* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
 #define YYLAST   52
 
-/* YYNTOKENS -- Number of terminals. */
+/* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  22
-/* YYNNTS -- Number of nonterminals. */
+/* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  12
-/* YYNRULES -- Number of rules. */
+/* YYNRULES -- Number of rules.  */
 #define YYNRULES  54
-/* YYNRULES -- Number of states. */
+/* YYNRULES -- Number of states.  */
 #define YYNSTATES  64
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
 #define YYMAXUTOK   273
 
-#define YYTRANSLATE(YYX)                                               \
+#define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const unsigned char yytranslate[] =
+static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -440,7 +582,7 @@ static const unsigned char yytranslate[] =
 #if YYDEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    YYRHS.  */
-static const unsigned char yyprhs[] =
+static const yytype_uint8 yyprhs[] =
 {
        0,     0,     3,     4,     7,     9,    11,    13,    15,    17,
       19,    21,    24,    29,    34,    41,    48,    50,    53,    55,
@@ -450,8 +592,8 @@ static const unsigned char yyprhs[] =
      149,   152,   154,   156,   157
 };
 
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yysigned_char yyrhs[] =
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
 {
       23,     0,    -1,    -1,    23,    24,    -1,    25,    -1,    26,
       -1,    27,    -1,    29,    -1,    28,    -1,    30,    -1,    32,
@@ -472,27 +614,27 @@ static const yysigned_char yyrhs[] =
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const unsigned short yyrline[] =
+static const yytype_uint16 yyrline[] =
 {
-       0,   188,   188,   190,   194,   196,   198,   200,   202,   204,
-     206,   210,   217,   224,   232,   239,   251,   253,   258,   260,
-     262,   267,   272,   277,   285,   290,   310,   317,   325,   330,
-     336,   341,   350,   359,   363,   365,   367,   369,   371,   373,
-     375,   377,   379,   381,   383,   385,   387,   389,   391,   393,
-     395,   397,   402,   439,   440
+       0,   192,   192,   194,   198,   200,   202,   204,   206,   208,
+     210,   214,   221,   228,   236,   243,   255,   257,   262,   264,
+     266,   271,   276,   281,   289,   294,   314,   321,   329,   334,
+     340,   345,   354,   363,   367,   369,   371,   373,   375,   377,
+     379,   381,   383,   385,   387,   389,   391,   393,   395,   397,
+     399,   401,   406,   443,   444
 };
 #endif
 
-#if YYDEBUG || YYERROR_VERBOSE
-/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
 static const char *const yytname[] =
 {
-  "$end", "error", "$undefined", "tAGO", "tDST", "tDAY", "tDAY_UNIT", 
-  "tDAYZONE", "tHOUR_UNIT", "tLOCAL_ZONE", "tMERIDIAN", "tMINUTE_UNIT", 
-  "tMONTH", "tMONTH_UNIT", "tSEC_UNIT", "tYEAR_UNIT", "tZONE", "tSNUMBER", 
-  "tUNUMBER", "':'", "','", "'/'", "$accept", "spec", "item", "time", 
-  "local_zone", "zone", "day", "date", "rel", "relunit", "number", 
+  "$end", "error", "$undefined", "tAGO", "tDST", "tDAY", "tDAY_UNIT",
+  "tDAYZONE", "tHOUR_UNIT", "tLOCAL_ZONE", "tMERIDIAN", "tMINUTE_UNIT",
+  "tMONTH", "tMONTH_UNIT", "tSEC_UNIT", "tYEAR_UNIT", "tZONE", "tSNUMBER",
+  "tUNUMBER", "':'", "','", "'/'", "$accept", "spec", "item", "time",
+  "local_zone", "zone", "day", "date", "rel", "relunit", "number",
   "o_merid", 0
 };
 #endif
@@ -500,7 +642,7 @@ static const char *const yytname[] =
 # ifdef YYPRINT
 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
    token YYLEX-NUM.  */
-static const unsigned short yytoknum[] =
+static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
      265,   266,   267,   268,   269,   270,   271,   272,   273,    58,
@@ -509,7 +651,7 @@ static const unsigned short yytoknum[] =
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const unsigned char yyr1[] =
+static const yytype_uint8 yyr1[] =
 {
        0,    22,    23,    23,    24,    24,    24,    24,    24,    24,
       24,    25,    25,    25,    25,    25,    26,    26,    27,    27,
@@ -520,7 +662,7 @@ static const unsigned char yyr1[] =
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const unsigned char yyr2[] =
+static const yytype_uint8 yyr2[] =
 {
        0,     2,     0,     2,     1,     1,     1,     1,     1,     1,
        1,     2,     4,     4,     6,     6,     1,     2,     1,     1,
@@ -533,7 +675,7 @@ static const unsigned char yyr2[] =
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
    means the default is an error.  */
-static const unsigned char yydefact[] =
+static const yytype_uint8 yydefact[] =
 {
        2,     0,     1,    21,    42,    19,    45,    16,    48,     0,
       39,    51,    36,    18,     0,    52,     3,     4,     5,     6,
@@ -544,8 +686,8 @@ static const unsigned char yydefact[] =
       53,    25,    15,    14
 };
 
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yysigned_char yydefgoto[] =
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
 {
       -1,     1,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    58
@@ -554,7 +696,7 @@ static const yysigned_char yydefgoto[] =
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
 #define YYPACT_NINF -17
-static const yysigned_char yypact[] =
+static const yytype_int8 yypact[] =
 {
      -17,     0,   -17,     1,   -17,   -17,   -17,    19,   -17,   -14,
      -17,   -17,   -17,    32,    26,    14,   -17,   -17,   -17,   -17,
@@ -566,7 +708,7 @@ static const yysigned_char yypact[] =
 };
 
 /* YYPGOTO[NTERM-NUM].  */
-static const yysigned_char yypgoto[] =
+static const yytype_int8 yypgoto[] =
 {
      -17,   -17,   -17,   -17,   -17,   -17,   -17,   -17,   -17,   -17,
      -17,   -10
@@ -577,7 +719,7 @@ static const yysigned_char yypgoto[] =
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
 #define YYTABLE_NINF -1
-static const unsigned char yytable[] =
+static const yytype_uint8 yytable[] =
 {
        2,    49,    50,    55,    27,     3,     4,     5,     6,     7,
       62,     8,     9,    10,    11,    12,    13,    14,    15,    35,
@@ -587,7 +729,7 @@ static const unsigned char yytable[] =
       63,    60,    61
 };
 
-static const unsigned char yycheck[] =
+static const yytype_uint8 yycheck[] =
 {
        0,    17,    18,    10,    18,     5,     6,     7,     8,     9,
       17,    11,    12,    13,    14,    15,    16,    17,    18,     5,
@@ -599,7 +741,7 @@ static const unsigned char yycheck[] =
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
-static const unsigned char yystos[] =
+static const yytype_uint8 yystos[] =
 {
        0,    23,     0,     5,     6,     7,     8,     9,    11,    12,
       13,    14,    15,    16,    17,    18,    24,    25,    26,    27,
@@ -610,22 +752,6 @@ static const unsigned char yystos[] =
       18,    18,    17,    33
 };
 
-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
-# define YYSIZE_T __SIZE_TYPE__
-#endif
-#if ! defined (YYSIZE_T) && defined (size_t)
-# define YYSIZE_T size_t
-#endif
-#if ! defined (YYSIZE_T)
-# if defined (__STDC__) || defined (__cplusplus)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# endif
-#endif
-#if ! defined (YYSIZE_T)
-# define YYSIZE_T unsigned int
-#endif
-
 #define yyerrok                (yyerrstatus = 0)
 #define yyclearin      (yychar = YYEMPTY)
 #define YYEMPTY                (-2)
@@ -633,7 +759,7 @@ static const unsigned char yystos[] =
 
 #define YYACCEPT       goto yyacceptlab
 #define YYABORT                goto yyabortlab
-#define YYERROR                goto yyerrlab1
+#define YYERROR                goto yyerrorlab
 
 
 /* Like YYERROR except do call yyerror.  This remains here temporarily
@@ -651,30 +777,63 @@ do                                                                \
       yychar = (Token);                                                \
       yylval = (Value);                                                \
       yytoken = YYTRANSLATE (yychar);                          \
-      YYPOPSTACK;                                              \
+      YYPOPSTACK (1);                                          \
       goto yybackup;                                           \
     }                                                          \
   else                                                         \
-    {                                                          \
-      yyerror ("syntax error: cannot back up");\
+    {                                                          \
+      yyerror (YY_("syntax error: cannot back up")); \
       YYERROR;                                                 \
     }                                                          \
-while (0)
+while (YYID (0))
+
 
 #define YYTERROR       1
 #define YYERRCODE      256
 
-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
-   are run).  */
 
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
 #ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)         \
-  Current.first_line   = Rhs[1].first_line;      \
-  Current.first_column = Rhs[1].first_column;    \
-  Current.last_line    = Rhs[N].last_line;       \
-  Current.last_column  = Rhs[N].last_column;
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
 #endif
 
+
 /* YYLEX -- calling `yylex' with the right arguments.  */
 
 #ifdef YYLEX_PARAM
@@ -695,42 +854,96 @@ while (0)
 do {                                           \
   if (yydebug)                                 \
     YYFPRINTF Args;                            \
-} while (0)
+} while (YYID (0))
 
-# define YYDSYMPRINT(Args)                     \
-do {                                           \
-  if (yydebug)                                 \
-    yysymprint Args;                           \
-} while (0)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
 
-# define YYDSYMPRINTF(Title, Token, Value, Location)           \
-do {                                                           \
-  if (yydebug)                                                 \
-    {                                                          \
-      YYFPRINTF (stderr, "%s ", Title);                                \
-      yysymprint (stderr,                                      \
-                  Token, Value);       \
-      YYFPRINTF (stderr, "\n");                                        \
-    }                                                          \
-} while (0)
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
 
 /*------------------------------------------------------------------.
 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (cinluded).                                                   |
+| TOP (included).                                                   |
 `------------------------------------------------------------------*/
 
-#if defined (__STDC__) || defined (__cplusplus)
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_stack_print (short *bottom, short *top)
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
 #else
 static void
 yy_stack_print (bottom, top)
-    short *bottom;
-    short *top;
+    yytype_int16 *bottom;
+    yytype_int16 *top;
 #endif
 {
   YYFPRINTF (stderr, "Stack now");
-  for (/* Nothing. */; bottom <= top; ++bottom)
+  for (; bottom <= top; ++bottom)
     YYFPRINTF (stderr, " %d", *bottom);
   YYFPRINTF (stderr, "\n");
 }
@@ -739,45 +952,52 @@ yy_stack_print (bottom, top)
 do {                                                           \
   if (yydebug)                                                 \
     yy_stack_print ((Bottom), (Top));                          \
-} while (0)
+} while (YYID (0))
 
 
 /*------------------------------------------------.
 | Report that the YYRULE is going to be reduced.  |
 `------------------------------------------------*/
 
-#if defined (__STDC__) || defined (__cplusplus)
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static void
-yy_reduce_print (int yyrule)
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
 #else
 static void
-yy_reduce_print (yyrule)
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
     int yyrule;
 #endif
 {
+  int yynrhs = yyr2[yyrule];
   int yyi;
-  unsigned int yylineno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
-             yyrule - 1, yylineno);
-  /* Print the symbols being reduced, and their result.  */
-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
-    YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
-  YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      );
+      fprintf (stderr, "\n");
+    }
 }
 
 # define YY_REDUCE_PRINT(Rule)         \
 do {                                   \
   if (yydebug)                         \
-    yy_reduce_print (Rule);            \
-} while (0)
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
 
 /* Nonzero means print parse trace.  It is left uninitialized so that
    multiple parsers can coexist.  */
 int yydebug;
 #else /* !YYDEBUG */
 # define YYDPRINTF(Args)
-# define YYDSYMPRINT(Args)
-# define YYDSYMPRINTF(Title, Token, Value, Location)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
 # define YY_STACK_PRINT(Bottom, Top)
 # define YY_REDUCE_PRINT(Rule)
 #endif /* !YYDEBUG */
@@ -792,13 +1012,9 @@ int yydebug;
    if the built-in stack extension method is used).
 
    Do not make this value too large; the results are undefined if
-   SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
    evaluated with infinite-precision integer arithmetic.  */
 
-#if YYMAXDEPTH == 0
-# undef YYMAXDEPTH
-#endif
-
 #ifndef YYMAXDEPTH
 # define YYMAXDEPTH 10000
 #endif
@@ -808,45 +1024,47 @@ int yydebug;
 #if YYERROR_VERBOSE
 
 # ifndef yystrlen
-#  if defined (__GLIBC__) && defined (_STRING_H)
+#  if defined __GLIBC__ && defined _STRING_H
 #   define yystrlen strlen
 #  else
 /* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static YYSIZE_T
-#   if defined (__STDC__) || defined (__cplusplus)
 yystrlen (const char *yystr)
-#   else
+#else
+static YYSIZE_T
 yystrlen (yystr)
-     const char *yystr;
-#   endif
+    const char *yystr;
+#endif
 {
-  register const char *yys = yystr;
-
-  while (*yys++ != '\0')
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
     continue;
-
-  return yys - yystr - 1;
+  return yylen;
 }
 #  endif
 # endif
 
 # ifndef yystpcpy
-#  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
 #   define yystpcpy stpcpy
 #  else
 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
    YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static char *
-#   if defined (__STDC__) || defined (__cplusplus)
 yystpcpy (char *yydest, const char *yysrc)
-#   else
+#else
+static char *
 yystpcpy (yydest, yysrc)
-     char *yydest;
-     const char *yysrc;
-#   endif
+    char *yydest;
+    const char *yysrc;
+#endif
 {
-  register char *yyd = yydest;
-  register const char *yys = yysrc;
+  char *yyd = yydest;
+  const char *yys = yysrc;
 
   while ((*yyd++ = *yys++) != '\0')
     continue;
@@ -856,70 +1074,192 @@ yystpcpy (yydest, yysrc)
 #  endif
 # endif
 
-#endif /* !YYERROR_VERBOSE */
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
 
-\f
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
 
-#if YYDEBUG
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+  if (! yyres)
+    return yystrlen (yystr);
 
-#if defined (__STDC__) || defined (__cplusplus)
-static void
-yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yysymprint (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
 {
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
+  int yyn = yypact[yystate];
 
-  if (yytype < YYNTOKENS)
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
     {
-      YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-# ifdef YYPRINT
-      YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
 # endif
-    }
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
 
-  switch (yytype)
-    {
-      default:
-        break;
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
     }
-  YYFPRINTF (yyoutput, ")");
 }
+#endif /* YYERROR_VERBOSE */
+\f
 
-#endif /* ! YYDEBUG */
 /*-----------------------------------------------.
 | Release the memory associated to this symbol.  |
 `-----------------------------------------------*/
 
-#if defined (__STDC__) || defined (__cplusplus)
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 static void
-yydestruct (int yytype, YYSTYPE *yyvaluep)
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
 #else
 static void
-yydestruct (yytype, yyvaluep)
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
     int yytype;
     YYSTYPE *yyvaluep;
 #endif
 {
-  /* Pacify ``unused variable'' warnings.  */
-  (void) yyvaluep;
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
 
   switch (yytype)
     {
 
       default:
-        break;
+       break;
     }
 }
 \f
@@ -927,13 +1267,13 @@ yydestruct (yytype, yyvaluep)
 /* Prevent warnings from -Wmissing-prototypes.  */
 
 #ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
+#if defined __STDC__ || defined __cplusplus
 int yyparse (void *YYPARSE_PARAM);
-# else
+#else
 int yyparse ();
-# endif
+#endif
 #else /* ! YYPARSE_PARAM */
-#if defined (__STDC__) || defined (__cplusplus)
+#if defined __STDC__ || defined __cplusplus
 int yyparse (void);
 #else
 int yyparse ();
@@ -950,14 +1290,18 @@ int yyparse ();
 `----------*/
 
 #ifdef YYPARSE_PARAM
-# if defined (__STDC__) || defined (__cplusplus)
-int yyparse (void *YYPARSE_PARAM)
-# else
-int yyparse (YYPARSE_PARAM)
-  void *YYPARSE_PARAM;
-# endif
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif