Merge branch 'master' of ssh://git.samba.org/data/git/samba
authorAlexander Bokovoy <ab@samba.org>
Sat, 8 Aug 2009 05:07:24 +0000 (08:07 +0300)
committerAlexander Bokovoy <ab@samba.org>
Sat, 8 Aug 2009 05:07:24 +0000 (08:07 +0300)
179 files changed:
examples/LDAP/samba-schema-netscapeds5.x
lib/tdb/common/open.c
lib/tdb/common/traverse.c
librpc/gen_ndr/epmapper.h
librpc/gen_ndr/ndr_epmapper.c
librpc/gen_ndr/ndr_epmapper.h
librpc/idl/epmapper.idl
librpc/rpc/binding.c
nsswitch/winbind_struct_protocol.h
pidl/expr.yp
pidl/idl.yp
pidl/lib/Parse/Pidl/Expr.pm
pidl/lib/Parse/Pidl/IDL.pm
pidl/lib/Parse/Pidl/NDR.pm
source3/Makefile.in
source3/include/includes.h
source3/include/proto.h
source3/include/smb.h
source3/lib/bitmap.c
source3/lib/conn_tdb.c
source3/lib/ctdbd_conn.c
source3/lib/smbldap.c
source3/lib/util_tdb.c
source3/lib/winbind_util.c
source3/lib/wins_srv.c
source3/librpc/gen_ndr/cli_wbint.c [new file with mode: 0644]
source3/librpc/gen_ndr/cli_wbint.h [new file with mode: 0644]
source3/librpc/gen_ndr/ndr_wbint.c [new file with mode: 0644]
source3/librpc/gen_ndr/ndr_wbint.h [new file with mode: 0644]
source3/librpc/gen_ndr/srv_wbint.c [new file with mode: 0644]
source3/librpc/gen_ndr/srv_wbint.h [new file with mode: 0644]
source3/librpc/gen_ndr/wbint.h [new file with mode: 0644]
source3/librpc/idl/wbint.idl [new file with mode: 0644]
source3/libsmb/libsmb_context.c
source3/locale/net/de.po [new file with mode: 0644]
source3/locale/net/genmsg [new file with mode: 0755]
source3/modules/vfs_default.c
source3/po/de.msg
source3/po/en.msg
source3/po/fr.msg
source3/po/genmsg
source3/po/it.msg
source3/po/ja.msg
source3/po/pl.msg
source3/po/ru.msg
source3/po/tr.msg
source3/printing/nt_printing.c
source3/rpc_server/srv_srvsvc_nt.c
source3/rpc_server/srv_wkssvc_nt.c
source3/samba4.mk
source3/smbd/conn.c
source3/smbd/dir.c
source3/smbd/files.c
source3/smbd/globals.c
source3/smbd/globals.h
source3/smbd/ipc.c
source3/smbd/msdfs.c
source3/smbd/posix_acls.c
source3/smbd/process.c
source3/smbd/reply.c
source3/smbd/server.c
source3/smbd/service.c
source3/smbd/smb2_tcon.c
source3/smbd/trans2.c
source3/utils/net_rap.c
source3/utils/net_registry.c
source3/utils/net_registry_util.c
source3/utils/net_rpc.c
source3/utils/net_rpc_audit.c
source3/winbindd/wb_getpwsid.c [new file with mode: 0644]
source3/winbindd/wb_gettoken.c [new file with mode: 0644]
source3/winbindd/wb_gid2sid.c [new file with mode: 0644]
source3/winbindd/wb_lookupname.c [new file with mode: 0644]
source3/winbindd/wb_lookupsid.c [new file with mode: 0644]
source3/winbindd/wb_lookupuseraliases.c [new file with mode: 0644]
source3/winbindd/wb_lookupusergroups.c [new file with mode: 0644]
source3/winbindd/wb_queryuser.c [new file with mode: 0644]
source3/winbindd/wb_sid2gid.c [new file with mode: 0644]
source3/winbindd/wb_sid2uid.c [new file with mode: 0644]
source3/winbindd/wb_uid2sid.c [new file with mode: 0644]
source3/winbindd/winbindd.c
source3/winbindd/winbindd.h
source3/winbindd/winbindd_async.c
source3/winbindd/winbindd_cache.c
source3/winbindd/winbindd_domain.c
source3/winbindd/winbindd_dual.c
source3/winbindd/winbindd_dual_ndr.c [new file with mode: 0644]
source3/winbindd/winbindd_dual_srv.c [new file with mode: 0644]
source3/winbindd/winbindd_getgroups.c [new file with mode: 0644]
source3/winbindd/winbindd_getpwnam.c [new file with mode: 0644]
source3/winbindd/winbindd_getpwsid.c [new file with mode: 0644]
source3/winbindd/winbindd_getpwuid.c [new file with mode: 0644]
source3/winbindd/winbindd_getsidaliases.c [new file with mode: 0644]
source3/winbindd/winbindd_getuserdomgroups.c [new file with mode: 0644]
source3/winbindd/winbindd_gid_to_sid.c [new file with mode: 0644]
source3/winbindd/winbindd_group.c
source3/winbindd/winbindd_idmap.c
source3/winbindd/winbindd_locator.c
source3/winbindd/winbindd_lookupname.c [new file with mode: 0644]
source3/winbindd/winbindd_lookupsid.c [new file with mode: 0644]
source3/winbindd/winbindd_misc.c
source3/winbindd/winbindd_proto.h
source3/winbindd/winbindd_sid.c
source3/winbindd/winbindd_sid_to_gid.c [new file with mode: 0644]
source3/winbindd/winbindd_sid_to_uid.c [new file with mode: 0644]
source3/winbindd/winbindd_uid_to_sid.c [new file with mode: 0644]
source3/winbindd/winbindd_user.c
source4/dsdb/samdb/ldb_modules/samldb.c
source4/dsdb/schema/schema_set.c
source4/heimdal/kuser/kinit.c
source4/heimdal/kuser/kuser_locl.h
source4/heimdal/lib/gssapi/krb5/cfx.c
source4/heimdal/lib/hcrypto/aes.c
source4/heimdal/lib/hcrypto/bn.c
source4/heimdal/lib/hcrypto/des.c
source4/heimdal/lib/hcrypto/dh-imath.c
source4/heimdal/lib/hcrypto/dh.c
source4/heimdal/lib/hcrypto/dsa.c
source4/heimdal/lib/hcrypto/engine.c
source4/heimdal/lib/hcrypto/evp-hcrypto.c
source4/heimdal/lib/hcrypto/md2.c
source4/heimdal/lib/hcrypto/md4.c
source4/heimdal/lib/hcrypto/md5.c
source4/heimdal/lib/hcrypto/pkcs12.c
source4/heimdal/lib/hcrypto/pkcs5.c
source4/heimdal/lib/hcrypto/rand-egd.c
source4/heimdal/lib/hcrypto/rand-fortuna.c
source4/heimdal/lib/hcrypto/rand-timer.c
source4/heimdal/lib/hcrypto/rand-unix.c
source4/heimdal/lib/hcrypto/rand.c
source4/heimdal/lib/hcrypto/rc2.c
source4/heimdal/lib/hcrypto/rc4.c
source4/heimdal/lib/hcrypto/rijndael-alg-fst.c
source4/heimdal/lib/hcrypto/rnd_keys.c
source4/heimdal/lib/hcrypto/rsa-imath.c
source4/heimdal/lib/hcrypto/rsa.c
source4/heimdal/lib/hcrypto/sha.c
source4/heimdal/lib/hcrypto/sha256.c
source4/heimdal/lib/hcrypto/ui.c
source4/heimdal/lib/krb5/context.c
source4/heimdal/lib/krb5/krb5_locl.h
source4/heimdal/lib/roken/vis.hin
source4/heimdal_build/roken.h
source4/ldap_server/ldap_server.c
source4/lib/ldb/common/attrib_handlers.c
source4/lib/ldb/modules/rdn_name.c
source4/lib/messaging/messaging.c
source4/libcli/composite/composite.c
source4/libcli/dgram/dgramsocket.c
source4/libcli/raw/clisocket.c
source4/libcli/raw/interfaces.h
source4/libcli/raw/raweas.c
source4/libcli/raw/rawfile.c
source4/libcli/raw/rawlpq.c
source4/libcli/raw/smb_signing.c
source4/libcli/smb2/smb2_calls.h
source4/libcli/smb2/smb2_constants.h
source4/libcli/smb2/util.c
source4/libcli/smb_composite/connect.c
source4/libcli/wrepl/winsrepl.c
source4/librpc/rpc/dcerpc.c
source4/nbt_server/wins/winswack.c
source4/ntvfs/posix/pvfs_acl.c
source4/ntvfs/posix/pvfs_open.c
source4/ntvfs/posix/pvfs_util.c
source4/script/installmisc.sh
source4/scripting/python/samba/samdb.py
source4/setup/enableaccount
source4/setup/pwsettings [new file with mode: 0755]
source4/setup/secrets_sasl_ldap.ldif
source4/smb_server/smb/receive.c
source4/smb_server/smb/reply.c
source4/smbd/process_standard.c
source4/smbd/server.c
source4/torture/ldap/basic.c
source4/torture/raw/rename.c
source4/winbind/wb_init_domain.c
testsuite/libsmbclient/src/Makefile
testsuite/libsmbclient/src/stat/stat_k.c [new file with mode: 0644]

index efc528b78642edb4162d25aa1054ade74fcfbe5a..661521cc02f295c2bf6e67cd068c3f9c36cab774 100644 (file)
@@ -4,9 +4,11 @@
 ## Thomas Mueller 12.04.2003, thomas.mueller@christ-wasser.de
 ## Richard Renard rrenard@idealx.com 2005-01-28
 ## - added support for MungedDial, BadPasswordCount, BadPasswordTime, PasswordHistory, LogonHours
+## TAKEDA Yasuma yasuma@osstech.co.jp 2008-11-06
+## - added sambaTrustedDomainPassword objectClasses
 ## - in Sun One 5.2 copy it as 99samba-schema-netscapeds5.ldif
 ##
-## Samba 3.0 schema file for Netscape DS 5.x
+## Samba 3.2 schema file for Netscape DS 5.x
 ##
 ## INSTALL-DIRECTORY/slapd-your_name/config/schema/samba-schema-netscapeds5.ldif
 ####################################################################
@@ -33,6 +35,7 @@ objectClasses: ( 1.3.6.1.4.1.7165.2.2.5 NAME 'sambaDomain' SUP top STRUCTURAL DE
 objectClasses: ( 1.3.6.1.4.1.7165.1.2.2.7 NAME 'sambaUnixIdPool' SUP top AUXILIARY DESC 'Pool for allocating UNIX uids/gids' MUST ( uidNumber $ gidNumber ) X-ORIGIN 'user defined' )
 objectClasses: ( 1.3.6.1.4.1.7165.1.2.2.8 NAME 'sambaIdmapEntry' SUP top AUXILIARY DESC 'Mapping from a SID to an ID' MUST ( sambaSID ) MAY ( uidNumber $ gidNumber )  X-ORIGIN 'user defined' )
 objectClasses: ( 1.3.6.1.4.1.7165.1.2.2.9 NAME 'sambaSidEntry' SUP top STRUCTURAL DESC 'Structural Class for a SID' MUST ( sambaSID )  X-ORIGIN 'user defined' )
+objectClasses: ( 1.3.6.1.4.1.7165.2.2.15 NAME 'sambaTrustedDomainPassword' SUP top STRUCTURAL DESC 'Samba Trusted Domain Password' MUST ( sambaDomainName $ sambaSID $ sambaClearTextPassword $ sambaPwdLastSet ) MAY  ( sambaPreviousClearTextPassword ) X-ORIGIN 'user defined')
 attributeTypes: ( 1.3.6.1.4.1.7165.2.1.24 NAME 'sambaLMPassword' DESC 'LanManager Password' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE X-ORIGIN 'user defined' )
 attributeTypes: ( 1.3.6.1.4.1.7165.2.1.25 NAME 'sambaNTPassword' DESC 'MD4 hash of the unicode password' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE X-ORIGIN 'user defined' )
 attributeTypes: ( 1.3.6.1.4.1.7165.2.1.26 NAME 'sambaAcctFlags'        DESC 'Account Flags' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE X-ORIGIN 'user defined' )
@@ -60,3 +63,5 @@ attributeTypes: ( 1.3.6.1.4.1.7165.2.1.21 NAME 'sambaNextUserRid' DESC 'Next NT
 attributeTypes: ( 1.3.6.1.4.1.7165.2.1.22 NAME 'sambaNextGroupRid' DESC 'Next NT rid to give out for groups' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE X-ORIGIN 'user defined' )
 attributeTypes: ( 1.3.6.1.4.1.7165.2.1.39 NAME 'sambaNextRid' DESC 'Next NT rid to give out for anything' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE X-ORIGIN 'user defined' )
 attributeTypes: ( 1.3.6.1.4.1.7165.2.1.40 NAME 'sambaAlgorithmicRidBase' DESC 'Base at which the samba RID generation algorithm should operate' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE X-ORIGIN 'user defined' )
+attributeTypes: ( 1.3.6.1.4.1.7165.2.1.68 NAME 'sambaClearTextPassword' DESC 'Clear text password (used for trusted domain passwords)' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 X-ORIGIN 'user defined')
+attributeTypes: ( 1.3.6.1.4.1.7165.2.1.69 NAME 'sambaPreviousClearTextPassword' DESC 'Previous clear text password (used for trusted domain passwords)' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 X-ORIGIN 'user defined')
index 2dcdd4bde74aca7cc4c2fcec175a113f475b8ee6..2e6a707497b85003159d7a02a7fa278859e64df8 100644 (file)
@@ -407,7 +407,10 @@ void *tdb_get_logging_private(struct tdb_context *tdb)
 
 static int tdb_reopen_internal(struct tdb_context *tdb, bool active_lock)
 {
+#if !defined(LIBREPLACE_PREAD_NOT_REPLACED) || \
+       !defined(LIBREPLACE_PWRITE_NOT_REPLACED)
        struct stat st;
+#endif
 
        if (tdb->flags & TDB_INTERNAL) {
                return 0; /* Nothing to do. */
index 07b0c238587eb85fe3945b61b71dbd9dd0729d58..8e5a63a5ecbd0e11b56122e3b842df65a6b50afc 100644 (file)
 
 #include "tdb_private.h"
 
-/* Uses traverse lock: 0 = finish, -1 = error, other = record offset */
-static int tdb_next_lock(struct tdb_context *tdb, struct tdb_traverse_lock *tlock,
+#define TDB_NEXT_LOCK_ERR ((tdb_off_t)-1)
+
+/* Uses traverse lock: 0 = finish, TDB_NEXT_LOCK_ERR = error,
+   other = record offset */
+static tdb_off_t tdb_next_lock(struct tdb_context *tdb, struct tdb_traverse_lock *tlock,
                         struct list_struct *rec)
 {
        int want_next = (tlock->off != 0);
@@ -71,7 +74,7 @@ static int tdb_next_lock(struct tdb_context *tdb, struct tdb_traverse_lock *tloc
                }
 
                if (tdb_lock(tdb, tlock->hash, tlock->lock_rw) == -1)
-                       return -1;
+                       return TDB_NEXT_LOCK_ERR;
 
                /* No previous record?  Start at top of chain. */
                if (!tlock->off) {
@@ -99,6 +102,7 @@ static int tdb_next_lock(struct tdb_context *tdb, struct tdb_traverse_lock *tloc
 
                        /* Detect infinite loops. From "Shlomi Yaakobovich" <Shlomi@exanet.com>. */
                        if (tlock->off == rec->next) {
+                               tdb->ecode = TDB_ERR_CORRUPT;
                                TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_next_lock: loop detected.\n"));
                                goto fail;
                        }
@@ -127,7 +131,7 @@ static int tdb_next_lock(struct tdb_context *tdb, struct tdb_traverse_lock *tloc
        tlock->off = 0;
        if (tdb_unlock(tdb, tlock->hash, tlock->lock_rw) != 0)
                TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_next_lock: On error unlock failed!\n"));
-       return -1;
+       return TDB_NEXT_LOCK_ERR;
 }
 
 /* traverse the entire database - calling fn(tdb, key, data) on each element.
@@ -141,7 +145,8 @@ static int tdb_traverse_internal(struct tdb_context *tdb,
 {
        TDB_DATA key, dbuf;
        struct list_struct rec;
-       int ret, count = 0;
+       int ret = 0, count = 0;
+       tdb_off_t off;
 
        /* This was in the initializaton, above, but the IRIX compiler
         * did not like it.  crh
@@ -152,7 +157,11 @@ static int tdb_traverse_internal(struct tdb_context *tdb,
        tdb->travlocks.next = tl;
 
        /* tdb_next_lock places locks on the record returned, and its chain */
-       while ((ret = tdb_next_lock(tdb, tl, &rec)) > 0) {
+       while ((off = tdb_next_lock(tdb, tl, &rec)) != 0) {
+               if (off == TDB_NEXT_LOCK_ERR) {
+                       ret = -1;
+                       goto out;
+               }
                count++;
                /* now read the full record */
                key.dptr = tdb_alloc_read(tdb, tl->off + sizeof(rec), 
@@ -177,7 +186,6 @@ static int tdb_traverse_internal(struct tdb_context *tdb,
                }
                if (fn && fn(tdb, key, dbuf, private_data)) {
                        /* They want us to terminate traversal */
-                       ret = count;
                        if (tdb_unlock_record(tdb, tl->off) != 0) {
                                TDB_LOG((tdb, TDB_DEBUG_FATAL, "tdb_traverse: unlock_record failed!\n"));;
                                ret = -1;
@@ -256,6 +264,7 @@ TDB_DATA tdb_firstkey(struct tdb_context *tdb)
 {
        TDB_DATA key;
        struct list_struct rec;
+       tdb_off_t off;
 
        /* release any old lock */
        if (tdb_unlock_record(tdb, tdb->travlocks.off) != 0)
@@ -264,7 +273,8 @@ TDB_DATA tdb_firstkey(struct tdb_context *tdb)
        tdb->travlocks.lock_rw = F_RDLCK;
 
        /* Grab first record: locks chain and returned record. */
-       if (tdb_next_lock(tdb, &tdb->travlocks, &rec) <= 0)
+       off = tdb_next_lock(tdb, &tdb->travlocks, &rec);
+       if (off == 0 || off == TDB_NEXT_LOCK_ERR)
                return tdb_null;
        /* now read the key */
        key.dsize = rec.key_len;
@@ -283,6 +293,7 @@ TDB_DATA tdb_nextkey(struct tdb_context *tdb, TDB_DATA oldkey)
        TDB_DATA key = tdb_null;
        struct list_struct rec;
        unsigned char *k = NULL;
+       tdb_off_t off;
 
        /* Is locked key the old key?  If so, traverse will be reliable. */
        if (tdb->travlocks.off) {
@@ -322,7 +333,8 @@ TDB_DATA tdb_nextkey(struct tdb_context *tdb, TDB_DATA oldkey)
 
        /* Grab next record: locks chain and returned record,
           unlocks old record */
-       if (tdb_next_lock(tdb, &tdb->travlocks, &rec) > 0) {
+       off = tdb_next_lock(tdb, &tdb->travlocks, &rec);
+       if (off != TDB_NEXT_LOCK_ERR && off != 0) {
                key.dsize = rec.key_len;
                key.dptr = tdb_alloc_read(tdb, tdb->travlocks.off+sizeof(rec),
                                          key.dsize);
index ff80fbb4fd781e83bde9772b39850c96df6001c5..2030e1e54f042b3503870b91a5af8395d06f0e00 100644 (file)
@@ -26,7 +26,7 @@ enum epm_protocol
        EPM_PROTOCOL_UUID=0x0d,
        EPM_PROTOCOL_IPX=0x0e,
        EPM_PROTOCOL_SMB=0x0f,
-       EPM_PROTOCOL_PIPE=0x10,
+       EPM_PROTOCOL_NAMED_PIPE=0x10,
        EPM_PROTOCOL_NETBIOS=0x11,
        EPM_PROTOCOL_NETBEUI=0x12,
        EPM_PROTOCOL_SPX=0x13,
@@ -55,7 +55,7 @@ enum epm_protocol
 #define EPM_PROTOCOL_UUID ( 0x0d )
 #define EPM_PROTOCOL_IPX ( 0x0e )
 #define EPM_PROTOCOL_SMB ( 0x0f )
-#define EPM_PROTOCOL_PIPE ( 0x10 )
+#define EPM_PROTOCOL_NAMED_PIPE ( 0x10 )
 #define EPM_PROTOCOL_NETBIOS ( 0x11 )
 #define EPM_PROTOCOL_NETBEUI ( 0x12 )
 #define EPM_PROTOCOL_SPX ( 0x13 )
@@ -116,7 +116,7 @@ struct epm_rhs_smb {
        const char * unc;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
 };
 
-struct epm_rhs_pipe {
+struct epm_rhs_named_pipe {
        const char * path;/* [flag(LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM)] */
 };
 
@@ -189,7 +189,7 @@ union epm_rhs {
        struct epm_rhs_uuid uuid;/* [case(EPM_PROTOCOL_UUID)] */
        struct epm_rhs_ipx ipx;/* [case(EPM_PROTOCOL_IPX)] */
        struct epm_rhs_smb smb;/* [case(EPM_PROTOCOL_SMB)] */
-       struct epm_rhs_pipe pipe;/* [case(EPM_PROTOCOL_PIPE)] */
+       struct epm_rhs_named_pipe named_pipe;/* [case(EPM_PROTOCOL_NAMED_PIPE)] */
        struct epm_rhs_netbios netbios;/* [case(EPM_PROTOCOL_NETBIOS)] */
        struct epm_rhs_netbeui netbeui;/* [case(EPM_PROTOCOL_NETBEUI)] */
        struct epm_rhs_spx spx;/* [case(EPM_PROTOCOL_SPX)] */
index e39356fbc492100a04d56ed74aac94b1b0cef274..7bcd8ddc13a7a0d8484fa19d592671b9d14fd216 100644 (file)
@@ -35,7 +35,7 @@ _PUBLIC_ void ndr_print_epm_protocol(struct ndr_print *ndr, const char *name, en
                case EPM_PROTOCOL_UUID: val = "EPM_PROTOCOL_UUID"; break;
                case EPM_PROTOCOL_IPX: val = "EPM_PROTOCOL_IPX"; break;
                case EPM_PROTOCOL_SMB: val = "EPM_PROTOCOL_SMB"; break;
-               case EPM_PROTOCOL_PIPE: val = "EPM_PROTOCOL_PIPE"; break;
+               case EPM_PROTOCOL_NAMED_PIPE: val = "EPM_PROTOCOL_NAMED_PIPE"; break;
                case EPM_PROTOCOL_NETBIOS: val = "EPM_PROTOCOL_NETBIOS"; break;
                case EPM_PROTOCOL_NETBEUI: val = "EPM_PROTOCOL_NETBEUI"; break;
                case EPM_PROTOCOL_SPX: val = "EPM_PROTOCOL_SPX"; break;
@@ -391,7 +391,7 @@ _PUBLIC_ void ndr_print_epm_rhs_smb(struct ndr_print *ndr, const char *name, con
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_epm_rhs_pipe(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_pipe *r)
+static enum ndr_err_code ndr_push_epm_rhs_named_pipe(struct ndr_push *ndr, int ndr_flags, const struct epm_rhs_named_pipe *r)
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_push_align(ndr, 4));
@@ -407,7 +407,7 @@ static enum ndr_err_code ndr_push_epm_rhs_pipe(struct ndr_push *ndr, int ndr_fla
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_epm_rhs_pipe(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_pipe *r)
+static enum ndr_err_code ndr_pull_epm_rhs_named_pipe(struct ndr_pull *ndr, int ndr_flags, struct epm_rhs_named_pipe *r)
 {
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
@@ -423,9 +423,9 @@ static enum ndr_err_code ndr_pull_epm_rhs_pipe(struct ndr_pull *ndr, int ndr_fla
        return NDR_ERR_SUCCESS;
 }
 
-_PUBLIC_ void ndr_print_epm_rhs_pipe(struct ndr_print *ndr, const char *name, const struct epm_rhs_pipe *r)
+_PUBLIC_ void ndr_print_epm_rhs_named_pipe(struct ndr_print *ndr, const char *name, const struct epm_rhs_named_pipe *r)
 {
-       ndr_print_struct(ndr, name, "epm_rhs_pipe");
+       ndr_print_struct(ndr, name, "epm_rhs_named_pipe");
        ndr->depth++;
        ndr_print_string(ndr, "path", r->path);
        ndr->depth--;
@@ -916,8 +916,8 @@ static enum ndr_err_code ndr_push_epm_rhs(struct ndr_push *ndr, int ndr_flags, c
                                        NDR_CHECK(ndr_push_epm_rhs_smb(ndr, NDR_SCALARS, &r->smb));
                                break; }
 
-                               case EPM_PROTOCOL_PIPE: {
-                                       NDR_CHECK(ndr_push_epm_rhs_pipe(ndr, NDR_SCALARS, &r->pipe));
+                               case EPM_PROTOCOL_NAMED_PIPE: {
+                                       NDR_CHECK(ndr_push_epm_rhs_named_pipe(ndr, NDR_SCALARS, &r->named_pipe));
                                break; }
 
                                case EPM_PROTOCOL_NETBIOS: {
@@ -1022,7 +1022,7 @@ static enum ndr_err_code ndr_push_epm_rhs(struct ndr_push *ndr, int ndr_flags, c
                                case EPM_PROTOCOL_SMB:
                                break;
 
-                               case EPM_PROTOCOL_PIPE:
+                               case EPM_PROTOCOL_NAMED_PIPE:
                                break;
 
                                case EPM_PROTOCOL_NETBIOS:
@@ -1131,8 +1131,8 @@ static enum ndr_err_code ndr_pull_epm_rhs(struct ndr_pull *ndr, int ndr_flags, u
                                        NDR_CHECK(ndr_pull_epm_rhs_smb(ndr, NDR_SCALARS, &r->smb));
                                break; }
 
-                               case EPM_PROTOCOL_PIPE: {
-                                       NDR_CHECK(ndr_pull_epm_rhs_pipe(ndr, NDR_SCALARS, &r->pipe));
+                               case EPM_PROTOCOL_NAMED_PIPE: {
+                                       NDR_CHECK(ndr_pull_epm_rhs_named_pipe(ndr, NDR_SCALARS, &r->named_pipe));
                                break; }
 
                                case EPM_PROTOCOL_NETBIOS: {
@@ -1236,7 +1236,7 @@ static enum ndr_err_code ndr_pull_epm_rhs(struct ndr_pull *ndr, int ndr_flags, u
                                case EPM_PROTOCOL_SMB:
                                break;
 
-                               case EPM_PROTOCOL_PIPE:
+                               case EPM_PROTOCOL_NAMED_PIPE:
                                break;
 
                                case EPM_PROTOCOL_NETBIOS:
@@ -1345,8 +1345,8 @@ _PUBLIC_ void ndr_print_epm_rhs(struct ndr_print *ndr, const char *name, const u
                                ndr_print_epm_rhs_smb(ndr, "smb", &r->smb);
                        break;
 
-                       case EPM_PROTOCOL_PIPE:
-                               ndr_print_epm_rhs_pipe(ndr, "pipe", &r->pipe);
+                       case EPM_PROTOCOL_NAMED_PIPE:
+                               ndr_print_epm_rhs_named_pipe(ndr, "named_pipe", &r->named_pipe);
                        break;
 
                        case EPM_PROTOCOL_NETBIOS:
index 797c68d93e4332339db26172ac4ec4124c712b70..8053d078384d20bbce8f3e2f861fac7807ec0591 100644 (file)
@@ -40,7 +40,7 @@ void ndr_print_epm_rhs_ncacn(struct ndr_print *ndr, const char *name, const stru
 void ndr_print_epm_rhs_uuid(struct ndr_print *ndr, const char *name, const struct epm_rhs_uuid *r);
 void ndr_print_epm_rhs_ipx(struct ndr_print *ndr, const char *name, const struct epm_rhs_ipx *r);
 void ndr_print_epm_rhs_smb(struct ndr_print *ndr, const char *name, const struct epm_rhs_smb *r);
-void ndr_print_epm_rhs_pipe(struct ndr_print *ndr, const char *name, const struct epm_rhs_pipe *r);
+void ndr_print_epm_rhs_named_pipe(struct ndr_print *ndr, const char *name, const struct epm_rhs_named_pipe *r);
 void ndr_print_epm_rhs_netbios(struct ndr_print *ndr, const char *name, const struct epm_rhs_netbios *r);
 void ndr_print_epm_rhs_netbeui(struct ndr_print *ndr, const char *name, const struct epm_rhs_netbeui *r);
 void ndr_print_epm_rhs_spx(struct ndr_print *ndr, const char *name, const struct epm_rhs_spx *r);
index 0a110a178056c849561d57657e52a4856c7b9673..3d9113892bf17c8f14f10944c95d0dcfca9f8076 100644 (file)
@@ -52,7 +52,7 @@ interface epmapper
                EPM_PROTOCOL_UUID                       = 0x0d,
                EPM_PROTOCOL_IPX                        = 0x0e,
                EPM_PROTOCOL_SMB                = 0x0f,
-               EPM_PROTOCOL_PIPE               = 0x10,
+               EPM_PROTOCOL_NAMED_PIPE         = 0x10,
                EPM_PROTOCOL_NETBIOS            = 0x11,
                EPM_PROTOCOL_NETBEUI            = 0x12,
                EPM_PROTOCOL_SPX                = 0x13,
@@ -113,8 +113,8 @@ interface epmapper
        } epm_rhs_smb;
 
        typedef struct {
-               astring path;   
-       } epm_rhs_pipe;
+               astring path;
+       } epm_rhs_named_pipe;
 
        typedef struct {
                astring name;
@@ -178,7 +178,7 @@ interface epmapper
                [case(EPM_PROTOCOL_UUID)] epm_rhs_uuid uuid;
                [case(EPM_PROTOCOL_IPX)] epm_rhs_ipx ipx;
                [case(EPM_PROTOCOL_SMB)] epm_rhs_smb smb;
-               [case(EPM_PROTOCOL_PIPE)] epm_rhs_pipe pipe;
+               [case(EPM_PROTOCOL_NAMED_PIPE)] epm_rhs_named_pipe named_pipe;
                [case(EPM_PROTOCOL_NETBIOS)] epm_rhs_netbios netbios;
                [case(EPM_PROTOCOL_NETBEUI)] epm_rhs_netbeui netbeui;
                [case(EPM_PROTOCOL_SPX)] epm_rhs_spx spx;
index ba992399cdaf700509b37ce5d0d041077d9d2e58..652927b2c5a04c326173ffa5ebd3dbb4ceb94d33 100644 (file)
@@ -45,7 +45,7 @@ static const struct {
        { "ncadg_ip_udp", NCACN_IP_UDP, 3, 
                { EPM_PROTOCOL_NCADG, EPM_PROTOCOL_UDP, EPM_PROTOCOL_IP } },
        { "ncalrpc", NCALRPC, 2, 
-               { EPM_PROTOCOL_NCALRPC, EPM_PROTOCOL_PIPE } },
+               { EPM_PROTOCOL_NCALRPC, EPM_PROTOCOL_NAMED_PIPE } },
        { "ncacn_unix_stream", NCACN_UNIX_STREAM, 2, 
                { EPM_PROTOCOL_NCACN, EPM_PROTOCOL_UNIX_DS } },
        { "ncadg_unix_dgram", NCADG_UNIX_DGRAM, 2, 
@@ -130,8 +130,8 @@ const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct epm_floor *epm_floor)
                case EPM_PROTOCOL_IP:
                        return talloc_asprintf(mem_ctx, "IP:%s", epm_floor->rhs.ip.ipaddr);
 
-               case EPM_PROTOCOL_PIPE:
-                       return talloc_asprintf(mem_ctx, "PIPE:%s", epm_floor->rhs.pipe.path);
+               case EPM_PROTOCOL_NAMED_PIPE:
+                       return talloc_asprintf(mem_ctx, "NAMED-PIPE:%s", epm_floor->rhs.named_pipe.path);
 
                case EPM_PROTOCOL_SMB:
                        return talloc_asprintf(mem_ctx, "SMB:%s", epm_floor->rhs.smb.unc);
@@ -440,9 +440,9 @@ const char *dcerpc_floor_get_rhs_data(TALLOC_CTX *mem_ctx, struct epm_floor *epm
                if (strlen(epm_floor->rhs.smb.unc) == 0) return NULL;
                return talloc_strdup(mem_ctx, epm_floor->rhs.smb.unc);
 
-       case EPM_PROTOCOL_PIPE:
-               if (strlen(epm_floor->rhs.pipe.path) == 0) return NULL;
-               return talloc_strdup(mem_ctx, epm_floor->rhs.pipe.path);
+       case EPM_PROTOCOL_NAMED_PIPE:
+               if (strlen(epm_floor->rhs.named_pipe.path) == 0) return NULL;
+               return talloc_strdup(mem_ctx, epm_floor->rhs.named_pipe.path);
 
        case EPM_PROTOCOL_NETBIOS:
                if (strlen(epm_floor->rhs.netbios.name) == 0) return NULL;
@@ -510,9 +510,9 @@ static NTSTATUS dcerpc_floor_set_rhs_data(TALLOC_CTX *mem_ctx,
                NT_STATUS_HAVE_NO_MEMORY(epm_floor->rhs.smb.unc);
                return NT_STATUS_OK;
 
-       case EPM_PROTOCOL_PIPE:
-               epm_floor->rhs.pipe.path = talloc_strdup(mem_ctx, data);
-               NT_STATUS_HAVE_NO_MEMORY(epm_floor->rhs.pipe.path);
+       case EPM_PROTOCOL_NAMED_PIPE:
+               epm_floor->rhs.named_pipe.path = talloc_strdup(mem_ctx, data);
+               NT_STATUS_HAVE_NO_MEMORY(epm_floor->rhs.named_pipe.path);
                return NT_STATUS_OK;
 
        case EPM_PROTOCOL_NETBIOS:
index 1785c309066f9ea449dab7f1f9dce9a31b48a860..bd144101f2449a5c6c345c4928ff8ce41df77dff 100644 (file)
@@ -169,6 +169,8 @@ enum winbindd_cmd {
        WINBINDD_DUAL_USERINFO,
        WINBINDD_DUAL_GETSIDALIASES,
 
+       WINBINDD_DUAL_NDRCMD,
+
        /* Complete the challenge phase of the NTLM authentication
           protocol using cached password. */
        WINBINDD_CCACHE_NTLMAUTH,
@@ -247,6 +249,7 @@ struct winbindd_request {
                fstring groupname;   /* getgrnam */
                uid_t uid;           /* getpwuid, uid_to_sid */
                gid_t gid;           /* getgrgid, gid_to_sid */
+               uint32_t ndrcmd;
                struct {
                        /* We deliberatedly don't split into domain/user to
                            avoid having the client know what the separator
index a8074875ff90fad7c04c127e5c9227504b90be14..ef8eee36dbf46bb71a3ac2b613c393c24addef5d 100644 (file)
 # Copyright (C) 2006 Jelmer Vernooij <jelmer@samba.org>
 # Published under the GNU GPL
 # 
-%left   '->'
-%right  '!' '~' 
-%left   '*' '/' '%'
-%left   '+' '-'
+%left  '->'
+%right '!' '~'
+%left  '*' '/' '%'
+%left  '+' '-'
 %left  '<<' '>>'
-%left   '>' '<'
-%left   '==' '!=' 
-%left   '&'
-%left   '|'
-%left   '&&'
-%left   '||'
+%left  '>' '<'
+%left  '==' '!='
+%left  '&'
+%left  '|'
+%left  '&&'
+%left  '||'
 %left  '?' ':'
-%left   NEG DEREF ADDROF INV
-%left  '.'
+%left  NEG DEREF ADDROF INV
+%left  '.'
 
 %%
-exp:        NUM
-               |       TEXT                            { "\"$_[1]\"" }
-               |       func
-               |   var
-        |   '~' exp %prec INV   { "~$_[2]" }
-        |   exp '+' exp         { "$_[1] + $_[3]" }
-        |   exp '-' exp         { "$_[1] - $_[3]" }
-        |   exp '*' exp         { "$_[1] * $_[3]" }
-        |   exp '%' exp         { "$_[1] % $_[3]" }
-        |   exp '<' exp         { "$_[1] < $_[3]" }
-        |   exp '>' exp         { "$_[1] > $_[3]" }
-        |   exp '|' exp         { "$_[1] | $_[3]" }
-        |   exp '==' exp         { "$_[1] == $_[3]" }
-        |   exp '<=' exp         { "$_[1] <= $_[3]" }
-        |   exp '=>' exp         { "$_[1] => $_[3]" }
-        |   exp '<<' exp         { "$_[1] << $_[3]" }
-        |   exp '>>' exp         { "$_[1] >> $_[3]" }
-        |   exp '!=' exp         { "$_[1] != $_[3]" }
-        |   exp '||' exp        { "$_[1] || $_[3]" }
-        |   exp '&&' exp        { "$_[1] && $_[3]" }
-        |   exp '&' exp         { "$_[1] & $_[3]" }
-               |       exp '?' exp ':' exp { "$_[1]?$_[3]:$_[5]" }
-               |       '~' exp                         { "~$_[1]" }
-               |       '!' exp                         { "not $_[1]" }
-        |   exp '/' exp         { "$_[1] / $_[3]" }
-        |   '-' exp %prec NEG   { "-$_[2]" }
-        |   '&' exp %prec ADDROF { "&$_[2]" }
-        |   exp '^' exp         { "$_[1]^$_[3]" }
-        |   '(' exp ')'         { "($_[2])" }
+exp:
+       NUM
+       |
+       TEXT                { "\"$_[1]\"" }
+       |
+       func
+       |
+       var
+       |
+       '~' exp %prec INV   { "~$_[2]" }
+       |
+       exp '+' exp         { "$_[1] + $_[3]" }
+       |
+       exp '-' exp         { "$_[1] - $_[3]" }
+       |
+       exp '*' exp         { "$_[1] * $_[3]" }
+       |
+       exp '%' exp         { "$_[1] % $_[3]" }
+       |
+       exp '<' exp         { "$_[1] < $_[3]" }
+       |
+       exp '>' exp         { "$_[1] > $_[3]" }
+       |
+       exp '|' exp         { "$_[1] | $_[3]" }
+       |
+       exp '==' exp        { "$_[1] == $_[3]" }
+       |
+       exp '<=' exp        { "$_[1] <= $_[3]" }
+       |
+       exp '=>' exp        { "$_[1] => $_[3]" }
+       |
+       exp '<<' exp        { "$_[1] << $_[3]" }
+       |
+       exp '>>' exp        { "$_[1] >> $_[3]" }
+       |
+       exp '!=' exp        { "$_[1] != $_[3]" }
+       |
+       exp '||' exp        { "$_[1] || $_[3]" }
+       |
+       exp '&&' exp        { "$_[1] && $_[3]" }
+       |
+       exp '&' exp         { "$_[1] & $_[3]" }
+       |
+       exp '?' exp ':' exp { "$_[1]?$_[3]:$_[5]" }
+       |
+       '~' exp             { "~$_[1]" }
+       |
+       '!' exp             { "not $_[1]" }
+       |
+       exp '/' exp         { "$_[1] / $_[3]" }
+       |
+       '-' exp %prec NEG   { "-$_[2]" }
+       |
+       '&' exp %prec ADDROF { "&$_[2]" }
+       |
+       exp '^' exp         { "$_[1]^$_[3]" }
+       |
+       '(' exp ')'         { "($_[2])" }
 ;
 
-possible_pointer: 
-            VAR                 { $_[0]->_Lookup($_[1]) }
-        |   '*' possible_pointer %prec DEREF { $_[0]->_Dereference($_[2]); "*$_[2]" }
-               ;
+possible_pointer:
+       VAR                              { $_[0]->_Lookup($_[1]) }
+       |
+       '*' possible_pointer %prec DEREF { $_[0]->_Dereference($_[2]); "*$_[2]" }
+;
+
+var:
+       possible_pointer    { $_[0]->_Use($_[1]) }
+       |
+       var '.' VAR         { $_[0]->_Use("$_[1].$_[3]") }
+       |
+       '(' var ')'         { "($_[2])" }
+       |
+       var '->' VAR        { $_[0]->_Use("*$_[1]"); $_[1]."->".$_[3] }
+;
+
+
+func:
+       VAR '(' opt_args ')' { "$_[1]($_[3])" }
+;
 
-var:   possible_pointer        { $_[0]->_Use($_[1]) }
-               |       var '.' VAR                     { $_[0]->_Use("$_[1].$_[3]") }
-               |   '(' var ')'         { "($_[2])" }
-               |       var '->' VAR            { $_[0]->_Use("*$_[1]"); $_[1]."->".$_[3] }
+opt_args:
+       #empty
+       { "" }
+       |
+       args
 ;
 
+exp_or_possible_pointer:
+       exp
+       |
+       possible_pointer
+;
 
-func: VAR '(' opt_args ')' { "$_[1]($_[3])" };
-opt_args: { "" } | args;
-exp_or_possible_pointer: exp | possible_pointer;
-args: exp_or_possible_pointer 
-    | exp_or_possible_pointer ',' args { "$_[1], $_[3]" }
+args:
+       exp_or_possible_pointer
+       |
+       exp_or_possible_pointer ',' args { "$_[1], $_[3]" }
 ;
 
 %%
@@ -73,22 +123,22 @@ args: exp_or_possible_pointer
 package Parse::Pidl::Expr;
 
 sub _Lexer {
-    my($parser)=shift;
+       my($parser)=shift;
 
-    $parser->YYData->{INPUT}=~s/^[ \t]//;
+       $parser->YYData->{INPUT}=~s/^[ \t]//;
 
-    for ($parser->YYData->{INPUT}) {
-        if (s/^(0x[0-9A-Fa-f]+)//) {
+       for ($parser->YYData->{INPUT}) {
+               if (s/^(0x[0-9A-Fa-f]+)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return('NUM',$1);
+                       return('NUM',$1);
                }
-        if (s/^([0-9]+(?:\.[0-9]+)?)//) {
+               if (s/^([0-9]+(?:\.[0-9]+)?)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return('NUM',$1);
+                       return('NUM',$1);
                }
-        if (s/^([A-Za-z_][A-Za-z0-9_]*)//) {
+               if (s/^([A-Za-z_][A-Za-z0-9_]*)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-               return('VAR',$1);
+                       return('VAR',$1);
                }
                if (s/^\"(.*?)\"//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
@@ -96,13 +146,13 @@ sub _Lexer {
                }
                if (s/^(==|!=|<=|>=|->|\|\||<<|>>|&&)//s) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return($1,$1);
+                       return($1,$1);
                }
-        if (s/^(.)//s) {
+               if (s/^(.)//s) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return($1,$1);
+                       return($1,$1);
                }
-    }
+       }
 }
 
 sub _Use($$)
@@ -139,12 +189,14 @@ sub _Error($)
 }
 
 sub Run {
-    my($self, $data, $error, $lookup, $deref, $use) = @_;
-    $self->YYData->{FULL_INPUT} = $data;
-    $self->YYData->{INPUT} = $data;
-    $self->YYData->{LOOKUP} = $lookup;
-    $self->YYData->{DEREFERENCE} = $deref;
-    $self->YYData->{ERROR} = $error;
-    $self->YYData->{USE} = $use;
-    return $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error);
+       my($self, $data, $error, $lookup, $deref, $use) = @_;
+
+       $self->YYData->{FULL_INPUT} = $data;
+       $self->YYData->{INPUT} = $data;
+       $self->YYData->{LOOKUP} = $lookup;
+       $self->YYData->{DEREFERENCE} = $deref;
+       $self->YYData->{ERROR} = $error;
+       $self->YYData->{USE} = $use;
+
+       return $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error);
 }
index d557590494edcfff808d5b22c9920813fc281bf4..dc8e293f765046eca4b3bb89e22b7a1b8e9999b7 100644 (file)
 %%
 idl: 
        #empty  { {} }
-       | idl interface { push(@{$_[1]}, $_[2]); $_[1] }
-       | idl coclass { push(@{$_[1]}, $_[2]); $_[1] }
-       | idl import { push(@{$_[1]}, $_[2]); $_[1] }
-       | idl include { push(@{$_[1]}, $_[2]); $_[1] }
-       | idl importlib { push(@{$_[1]}, $_[2]); $_[1] }
-       | idl cpp_quote { push(@{$_[1]}, $_[2]); $_[1] }
-;
-
-import: 'import' commalist ';' {{
-                       "TYPE" => "IMPORT", 
-                       "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE}
-               }}
-;
-include: 'include' commalist ';' {{ 
-                       "TYPE" => "INCLUDE", 
-                       "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE}
-               }}
-;
-importlib: 'importlib' commalist ';' {{ 
-                       "TYPE" => "IMPORTLIB", 
-                       "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE}
-               }}
-;
-
-commalist: 
-      text { [ $_[1] ] }
-    | commalist ',' text { push(@{$_[1]}, $_[3]); $_[1] }
-;
-
-coclass: property_list 'coclass' identifier '{' interface_names '}' optional_semicolon
-          {{
-               "TYPE" => "COCLASS", 
-              "PROPERTIES" => $_[1],
-              "NAME" => $_[3],
-              "DATA" => $_[5],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE},
-          }}
+       |
+       idl interface { push(@{$_[1]}, $_[2]); $_[1] }
+       |
+       idl coclass   { push(@{$_[1]}, $_[2]); $_[1] }
+       |
+       idl import    { push(@{$_[1]}, $_[2]); $_[1] }
+       |
+       idl include   { push(@{$_[1]}, $_[2]); $_[1] }
+       |
+       idl importlib { push(@{$_[1]}, $_[2]); $_[1] }
+       |
+       idl cpp_quote { push(@{$_[1]}, $_[2]); $_[1] }
+;
+
+import:
+       'import' commalist ';'
+       {{
+               "TYPE" => "IMPORT",
+               "PATHS" => $_[2],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
+;
+
+include:
+       'include' commalist ';'
+       {{
+               "TYPE" => "INCLUDE",
+               "PATHS" => $_[2],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
+;
+
+importlib:
+       'importlib' commalist ';'
+       {{
+               "TYPE" => "IMPORTLIB",
+               "PATHS" => $_[2],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
+;
+
+commalist:
+       text { [ $_[1] ] }
+       |
+       commalist ',' text { push(@{$_[1]}, $_[3]); $_[1] }
+;
+
+coclass:
+       property_list 'coclass' identifier '{' interface_names '}' optional_semicolon
+       {{
+               "TYPE" => "COCLASS",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "DATA" => $_[5],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
 ;
 
 interface_names:
        #empty { {} }
-       | interface_names 'interface' identifier ';' { push(@{$_[1]}, $_[2]); $_[1] }
+       |
+       interface_names 'interface' identifier ';' { push(@{$_[1]}, $_[2]); $_[1] }
 ;
 
-interface: property_list 'interface' identifier base_interface '{' definitions '}' optional_semicolon
-          {{
-               "TYPE" => "INTERFACE", 
-              "PROPERTIES" => $_[1],
-              "NAME" => $_[3],
-                  "BASE" => $_[4],
-              "DATA" => $_[6],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE},
-          }}
+interface:
+       property_list 'interface' identifier base_interface '{' definitions '}' optional_semicolon
+       {{
+               "TYPE" => "INTERFACE",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "BASE" => $_[4],
+               "DATA" => $_[6],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
 ;
 
 base_interface:
-    #empty
-    | ':' identifier { $_[2] }
+       #empty
+       |
+       ':' identifier { $_[2] }
 ;
 
 
-cpp_quote: 'cpp_quote' '(' text ')'
+cpp_quote:
+       'cpp_quote' '(' text ')'
        {{
                 "TYPE" => "CPP_QUOTE",
+                "DATA" => $_[3],
                 "FILE" => $_[0]->YYData->{FILE},
                 "LINE" => $_[0]->YYData->{LINE},
-                "DATA" => $_[3]
        }}
 ;
 
-definitions: 
-      definition              { [ $_[1] ] }    
-    | definitions definition  { push(@{$_[1]}, $_[2]); $_[1] }
-;    
-
-
-definition: function | const | typedef | typedecl
+definitions:
+       definition              { [ $_[1] ] }
+       |
+       definitions definition  { push(@{$_[1]}, $_[2]); $_[1] }
 ;
 
-const: 'const' identifier pointers identifier '=' anytext ';' 
-        {{
-                     "TYPE"  => "CONST", 
-                    "DTYPE"  => $_[2],
-                        "POINTERS" => $_[3],
-                    "NAME"  => $_[4],
-                    "VALUE" => $_[6],
-                    "FILE" => $_[0]->YYData->{FILE},
-                    "LINE" => $_[0]->YYData->{LINE},
-        }}
-       | 'const' identifier pointers identifier array_len '=' anytext ';' 
-        {{
-                     "TYPE"  => "CONST", 
-                    "DTYPE"  => $_[2],
-                        "POINTERS" => $_[3],
-                    "NAME"  => $_[4],
-                    "ARRAY_LEN" => $_[5],
-                    "VALUE" => $_[7],
-                    "FILE" => $_[0]->YYData->{FILE},
-                    "LINE" => $_[0]->YYData->{LINE},
-        }}
+definition:
+       function
+       |
+       const
+       |
+       typedef
+       |
+       typedecl
 ;
 
+const:
+       'const' identifier pointers identifier '=' anytext ';'
+       {{
+               "TYPE"  => "CONST",
+               "DTYPE"  => $_[2],
+               "POINTERS" => $_[3],
+               "NAME"  => $_[4],
+               "VALUE" => $_[6],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
+       |
+       'const' identifier pointers identifier array_len '=' anytext ';'
+       {{
+               "TYPE"  => "CONST",
+               "DTYPE"  => $_[2],
+               "POINTERS" => $_[3],
+               "NAME"  => $_[4],
+               "ARRAY_LEN" => $_[5],
+               "VALUE" => $_[7],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
+;
 
-function: property_list type identifier '(' element_list2 ')' ';' 
-        {{
+function:
+       property_list type identifier '(' element_list2 ')' ';'
+       {{
                "TYPE" => "FUNCTION",
                "NAME" => $_[3],
                "RETURN_TYPE" => $_[2],
@@ -136,220 +165,351 @@ function: property_list type identifier '(' element_list2 ')' ';'
                "ELEMENTS" => $_[5],
                "FILE" => $_[0]->YYData->{FILE},
                "LINE" => $_[0]->YYData->{LINE},
-         }}
-;
-
-typedef: property_list 'typedef' type identifier array_len ';' 
-        {{
-                    "TYPE" => "TYPEDEF", 
-                     "PROPERTIES" => $_[1],
-                    "NAME" => $_[4],
-                    "DATA" => $_[3],
-                    "ARRAY_LEN" => $_[5],
-                    "FILE" => $_[0]->YYData->{FILE},
-                    "LINE" => $_[0]->YYData->{LINE},
+       }}
+;
+
+typedef:
+       property_list 'typedef' type identifier array_len ';'
+       {{
+               "TYPE" => "TYPEDEF",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[4],
+               "DATA" => $_[3],
+               "ARRAY_LEN" => $_[5],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
         }}
 ;
 
-usertype: struct | union | enum | bitmap;
+usertype:
+       struct
+       |
+       union
+       |
+       enum
+       |
+       bitmap
+       |
+       pipe
+;
 
-typedecl: usertype ';' { $_[1] };
+typedecl:
+       usertype ';' { $_[1] }
+;
 
-sign: 'signed' | 'unsigned';
+sign:
+       'signed'
+       |
+       'unsigned'
+;
 
-existingtype: 
+existingtype:
        sign identifier { ($_[1]?$_[1]:"signed") ." $_[2]" }
-       | identifier 
+       |
+       identifier
 ;
 
-type: usertype | existingtype | void { "void" } ;
+type:
+       usertype
+       |
+       existingtype
+       |
+       void { "void" }
+;
 
-enum_body: '{' enum_elements '}' { $_[2] };
-opt_enum_body: | enum_body;
-enum: property_list 'enum' optional_identifier opt_enum_body
-        {{
-             "TYPE" => "ENUM", 
-                        "PROPERTIES" => $_[1],
-                        "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+enum_body:
+       '{' enum_elements '}' { $_[2] }
+;
+
+opt_enum_body:
+       #empty
+       |
+       enum_body
+;
+
+enum:
+       property_list 'enum' optional_identifier opt_enum_body
+       {{
+               "TYPE" => "ENUM",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
 ;
 
-enum_elements: 
-      enum_element                    { [ $_[1] ] }            
-    | enum_elements ',' enum_element  { push(@{$_[1]}, $_[3]); $_[1] }
+enum_elements:
+       enum_element                    { [ $_[1] ] }
+       |
+       enum_elements ',' enum_element  { push(@{$_[1]}, $_[3]); $_[1] }
 ;
 
-enum_element: identifier 
-             | identifier '=' anytext { "$_[1]$_[2]$_[3]" }
+enum_element:
+       identifier
+       |
+       identifier '=' anytext { "$_[1]$_[2]$_[3]" }
 ;
 
-bitmap_body: '{' opt_bitmap_elements '}' { $_[2] };
-opt_bitmap_body: | bitmap_body;
-bitmap: property_list 'bitmap' optional_identifier opt_bitmap_body
-        {{
-             "TYPE" => "BITMAP", 
-                    "PROPERTIES" => $_[1],
-                        "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+bitmap_body:
+       '{' opt_bitmap_elements '}' { $_[2] }
+;
+
+opt_bitmap_body:
+       #empty
+       |
+       bitmap_body
 ;
 
-bitmap_elements: 
-      bitmap_element                    { [ $_[1] ] }            
-    | bitmap_elements ',' bitmap_element  { push(@{$_[1]}, $_[3]); $_[1] }
+bitmap:
+       property_list 'bitmap' optional_identifier opt_bitmap_body
+       {{
+               "TYPE" => "BITMAP",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
 ;
 
-opt_bitmap_elements: | bitmap_elements;
+bitmap_elements:
+       bitmap_element                      { [ $_[1] ] }
+       |
+       bitmap_elements ',' bitmap_element  { push(@{$_[1]}, $_[3]); $_[1] }
+;
 
-bitmap_element: identifier '=' anytext { "$_[1] ( $_[3] )" }
+opt_bitmap_elements:
+       #empty
+       |
+       bitmap_elements
 ;
 
-struct_body: '{' element_list1 '}' { $_[2] };
-opt_struct_body: | struct_body;
+bitmap_element:
+       identifier '=' anytext { "$_[1] ( $_[3] )" }
+;
 
-struct: property_list 'struct' optional_identifier opt_struct_body
-        {{
-             "TYPE" => "STRUCT", 
-                        "PROPERTIES" => $_[1],
-                        "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+struct_body:
+       '{' element_list1 '}' { $_[2] }
 ;
 
-empty_element: property_list ';'
+opt_struct_body:
+       #empty
+       |
+       struct_body
+;
+
+struct:
+       property_list 'struct' optional_identifier opt_struct_body
        {{
-                "NAME" => "",
-                "TYPE" => "EMPTY",
-                "PROPERTIES" => $_[1],
-                "POINTERS" => 0,
-                "ARRAY_LEN" => [],
-                "FILE" => $_[0]->YYData->{FILE},
-                "LINE" => $_[0]->YYData->{LINE},
-        }}
+               "TYPE" => "STRUCT",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
 ;
 
-base_or_empty: base_element ';' | empty_element;
+empty_element:
+       property_list ';'
+       {{
+               "NAME" => "",
+               "TYPE" => "EMPTY",
+               "PROPERTIES" => $_[1],
+               "POINTERS" => 0,
+               "ARRAY_LEN" => [],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
+;
+
+base_or_empty:
+       base_element ';'
+       |
+       empty_element;
 
 optional_base_element:
        property_list base_or_empty { $_[2]->{PROPERTIES} = FlattenHash([$_[1],$_[2]->{PROPERTIES}]); $_[2] }
 ;
 
-union_elements: 
-    #empty
-    | union_elements optional_base_element { push(@{$_[1]}, $_[2]); $_[1] }
+union_elements:
+       #empty
+       |
+       union_elements optional_base_element { push(@{$_[1]}, $_[2]); $_[1] }
+;
+
+union_body:
+       '{' union_elements '}' { $_[2] }
 ;
 
-union_body: '{' union_elements '}' { $_[2] };
-opt_union_body: | union_body;
+opt_union_body:
+       #empty
+       |
+       union_body
+;
 
-union: property_list 'union' optional_identifier opt_union_body
-        {{
-             "TYPE" => "UNION", 
-                        "PROPERTIES" => $_[1],
-                    "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+union:
+       property_list 'union' optional_identifier opt_union_body
+       {{
+               "TYPE" => "UNION",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
 ;
 
-base_element: property_list type pointers identifier array_len
-             {{
-                          "NAME" => $_[4],
-                          "TYPE" => $_[2],
-                          "PROPERTIES" => $_[1],
-                          "POINTERS" => $_[3],
-                          "ARRAY_LEN" => $_[5],
-                      "FILE" => $_[0]->YYData->{FILE},
-                      "LINE" => $_[0]->YYData->{LINE},
-              }}
+base_element:
+       property_list type pointers identifier array_len
+       {{
+               "NAME" => $_[4],
+               "TYPE" => $_[2],
+               "PROPERTIES" => $_[1],
+               "POINTERS" => $_[3],
+               "ARRAY_LEN" => $_[5],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
 ;
 
+pointers:
+       #empty
+       { 0 }
+       |
+       pointers '*'  { $_[1]+1 }
+;
 
-pointers: 
-  #empty            
-   { 0 }
-    | pointers '*'  { $_[1]+1 }
+pipe:
+       property_list 'pipe' type
+       {{
+               "TYPE" => "PIPE",
+               "PROPERTIES" => $_[1],
+               "DATA" => $_[3],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
 ;
 
-element_list1: 
+element_list1:
+       #empty
        { [] }
-    | element_list1 base_element ';' { push(@{$_[1]}, $_[2]); $_[1] }
+       |
+       element_list1 base_element ';' { push(@{$_[1]}, $_[2]); $_[1] }
 ;
 
-optional_const: 
+optional_const:
        #empty
-       | 'const'
+       |
+       'const'
 ;
 
-element_list2: 
-    #empty
-    | 'void' 
-    | optional_const base_element { [ $_[2] ] }
-    | element_list2 ',' optional_const base_element { push(@{$_[1]}, $_[4]); $_[1] }
+element_list2:
+       #empty
+       |
+       'void'
+       |
+       optional_const base_element { [ $_[2] ] }
+       |
+       element_list2 ',' optional_const base_element { push(@{$_[1]}, $_[4]); $_[1] }
 ;
 
-array_len: 
-    #empty                        { [] }
-    | '[' ']' array_len           { push(@{$_[3]}, "*"); $_[3] }
-    | '[' anytext ']' array_len   { push(@{$_[4]}, "$_[2]"); $_[4] }
+array_len:
+       #empty { [] }
+       |
+       '[' ']' array_len           { push(@{$_[3]}, "*"); $_[3] }
+       |
+       '[' anytext ']' array_len   { push(@{$_[4]}, "$_[2]"); $_[4] }
 ;
 
-
-property_list: 
-    #empty
-    | property_list '[' properties ']' { FlattenHash([$_[1],$_[3]]); }
+property_list:
+       #empty
+       |
+       property_list '[' properties ']' { FlattenHash([$_[1],$_[3]]); }
 ;
 
-properties: property          { $_[1] }
-    | properties ',' property { FlattenHash([$_[1], $_[3]]); }
+properties:
+       property                { $_[1] }
+       |
+       properties ',' property { FlattenHash([$_[1], $_[3]]); }
 ;
 
-property: identifier                   {{ "$_[1]" => "1"     }}
-          | identifier '(' commalisttext ')' {{ "$_[1]" => "$_[3]" }}
+property:
+       identifier                       {{ "$_[1]" => "1"     }}
+       |
+       identifier '(' commalisttext ')' {{ "$_[1]" => "$_[3]" }}
 ;
 
 commalisttext:
-    anytext 
-    | commalisttext ',' anytext { "$_[1],$_[3]" }
-;
-
-anytext:  #empty
-    { "" }
-    | identifier | constant | text
-    | anytext '-' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '.' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '*' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '>' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '<' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '|' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '&' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '/' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '?' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext ':' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '=' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '+' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '~' anytext  { "$_[1]$_[2]$_[3]" }
-    | anytext '(' commalisttext ')' anytext  { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
-    | anytext '{' commalisttext '}' anytext  { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
-;
-
-identifier: IDENTIFIER
-;
-
-optional_identifier: 
+       anytext
+       |
+       commalisttext ',' anytext { "$_[1],$_[3]" }
+;
+
+anytext:
+       #empty
+       { "" }
+       |
+       identifier
+       |
+       constant
+       |
+       text
+       |
+       anytext '-' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '.' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '*' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '>' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '<' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '|' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '&' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '/' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '?' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext ':' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '=' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '+' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '~' anytext  { "$_[1]$_[2]$_[3]" }
+       |
+       anytext '(' commalisttext ')' anytext  { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
+       |
+       anytext '{' commalisttext '}' anytext  { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
+;
+
+identifier:
+       IDENTIFIER
+;
+
+optional_identifier:
+       #empty { undef }
+       |
        IDENTIFIER
-   | #empty { undef }
 ;
 
-constant: CONSTANT
+constant:
+       CONSTANT
 ;
 
-text: TEXT { "\"$_[1]\"" }
+text:
+       TEXT { "\"$_[1]\"" }
 ;
 
-optional_semicolon: 
+optional_semicolon:
        #empty
-       | ';'
+       |
+       ';'
 ;
 
 
@@ -361,51 +521,56 @@ use Parse::Pidl qw(error);
 
 #####################################################################
 # flatten an array of hashes into a single hash
-sub FlattenHash($) 
-{ 
-    my $a = shift;
-    my %b;
-    for my $d (@{$a}) {
-       for my $k (keys %{$d}) {
-           $b{$k} = $d->{$k};
+sub FlattenHash($)
+{
+       my $a = shift;
+       my %b;
+       for my $d (@{$a}) {
+               for my $k (keys %{$d}) {
+               $b{$k} = $d->{$k};
+               }
        }
-    }
-    return \%b;
+       return \%b;
 }
 
-
-
 #####################################################################
 # traverse a perl data structure removing any empty arrays or
 # hashes and any hash elements that map to undef
 sub CleanData($)
 {
-    sub CleanData($);
-    my($v) = shift;
+       sub CleanData($);
+       my($v) = shift;
+
        return undef if (not defined($v));
-    if (ref($v) eq "ARRAY") {
-       foreach my $i (0 .. $#{$v}) {
-           CleanData($v->[$i]);
-       }
-       # this removes any undefined elements from the array
-       @{$v} = grep { defined $_ } @{$v};
-    } elsif (ref($v) eq "HASH") {
-       foreach my $x (keys %{$v}) {
-           CleanData($v->{$x});
-           if (!defined $v->{$x}) { delete($v->{$x}); next; }
+
+       if (ref($v) eq "ARRAY") {
+               foreach my $i (0 .. $#{$v}) {
+                       CleanData($v->[$i]);
+               }
+               # this removes any undefined elements from the array
+               @{$v} = grep { defined $_ } @{$v};
+       } elsif (ref($v) eq "HASH") {
+               foreach my $x (keys %{$v}) {
+                       CleanData($v->{$x});
+                       if (!defined $v->{$x}) {
+                               delete($v->{$x});
+                               next;
+                       }
+               }
        }
-    }
+
        return $v;
 }
 
 sub _Error {
-    if (exists $_[0]->YYData->{ERRMSG}) {
+       if (exists $_[0]->YYData->{ERRMSG}) {
                error($_[0]->YYData, $_[0]->YYData->{ERRMSG});
                delete $_[0]->YYData->{ERRMSG};
                return;
        }
+
        my $last_token = $_[0]->YYData->{LAST_TOKEN};
-       
+
        error($_[0]->YYData, "Syntax error near '$last_token'");
 }
 
@@ -413,7 +578,7 @@ sub _Lexer($)
 {
        my($parser)=shift;
 
-    $parser->YYData->{INPUT} or return('',undef);
+       $parser->YYData->{INPUT} or return('',undef);
 
 again:
        $parser->YYData->{INPUT} =~ s/^[ \t]*//;
@@ -440,18 +605,19 @@ again:
                }
                if (s/^\"(.*?)\"//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-                       return('TEXT',$1); 
+                       return('TEXT',$1);
                }
                if (s/^(\d+)(\W|$)/$2/) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-                       return('CONSTANT',$1); 
+                       return('CONSTANT',$1);
                }
                if (s/^([\w_]+)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-                       if ($1 =~ 
-                           /^(coclass|interface|const|typedef|union|cpp_quote
-                             |struct|enum|bitmap|void|unsigned|signed|import|include
-                                 |importlib)$/x) {
+                       if ($1 =~
+                           /^(coclass|interface|import|importlib
+                             |include|cpp_quote|typedef
+                             |union|struct|enum|bitmap|pipe
+                             |void|const|unsigned|signed)$/x) {
                                return $1;
                        }
                        return('IDENTIFIER',$1);
@@ -469,10 +635,10 @@ sub parse_string
 
        my $self = new Parse::Pidl::IDL;
 
-    $self->YYData->{FILE} = $filename;
-    $self->YYData->{INPUT} = $data;
-    $self->YYData->{LINE} = 0;
-    $self->YYData->{LAST_TOKEN} = "NONE";
+       $self->YYData->{FILE} = $filename;
+       $self->YYData->{INPUT} = $data;
+       $self->YYData->{LINE} = 0;
+       $self->YYData->{LAST_TOKEN} = "NONE";
 
        my $idl = $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
 
index 5524374faed863c67a64dfa1f2d5618fede6f051..1230a71a2b7fab34bfbb3585b648adf3df4dfa6b 100644 (file)
@@ -1127,7 +1127,7 @@ sub new {
        [#Rule 2
                 'exp', 1,
 sub
-#line 22 "./pidl/expr.yp"
+#line 24 "./../pidl/expr.yp"
 { "\"$_[1]\"" }
        ],
        [#Rule 3
@@ -1139,199 +1139,199 @@ sub
        [#Rule 5
                 'exp', 2,
 sub
-#line 25 "./pidl/expr.yp"
+#line 30 "./../pidl/expr.yp"
 { "~$_[2]" }
        ],
        [#Rule 6
                 'exp', 3,
 sub
-#line 26 "./pidl/expr.yp"
+#line 32 "./../pidl/expr.yp"
 { "$_[1] + $_[3]" }
        ],
        [#Rule 7
                 'exp', 3,
 sub
-#line 27 "./pidl/expr.yp"
+#line 34 "./../pidl/expr.yp"
 { "$_[1] - $_[3]" }
        ],
        [#Rule 8
                 'exp', 3,
 sub
-#line 28 "./pidl/expr.yp"
+#line 36 "./../pidl/expr.yp"
 { "$_[1] * $_[3]" }
        ],
        [#Rule 9
                 'exp', 3,
 sub
-#line 29 "./pidl/expr.yp"
+#line 38 "./../pidl/expr.yp"
 { "$_[1] % $_[3]" }
        ],
        [#Rule 10
                 'exp', 3,
 sub
-#line 30 "./pidl/expr.yp"
+#line 40 "./../pidl/expr.yp"
 { "$_[1] < $_[3]" }
        ],
        [#Rule 11
                 'exp', 3,
 sub
-#line 31 "./pidl/expr.yp"
+#line 42 "./../pidl/expr.yp"
 { "$_[1] > $_[3]" }
        ],
        [#Rule 12
                 'exp', 3,
 sub
-#line 32 "./pidl/expr.yp"
+#line 44 "./../pidl/expr.yp"
 { "$_[1] | $_[3]" }
        ],
        [#Rule 13
                 'exp', 3,
 sub
-#line 33 "./pidl/expr.yp"
+#line 46 "./../pidl/expr.yp"
 { "$_[1] == $_[3]" }
        ],
        [#Rule 14
                 'exp', 3,
 sub
-#line 34 "./pidl/expr.yp"
+#line 48 "./../pidl/expr.yp"
 { "$_[1] <= $_[3]" }
        ],
        [#Rule 15
                 'exp', 3,
 sub
-#line 35 "./pidl/expr.yp"
+#line 50 "./../pidl/expr.yp"
 { "$_[1] => $_[3]" }
        ],
        [#Rule 16
                 'exp', 3,
 sub
-#line 36 "./pidl/expr.yp"
+#line 52 "./../pidl/expr.yp"
 { "$_[1] << $_[3]" }
        ],
        [#Rule 17
                 'exp', 3,
 sub
-#line 37 "./pidl/expr.yp"
+#line 54 "./../pidl/expr.yp"
 { "$_[1] >> $_[3]" }
        ],
        [#Rule 18
                 'exp', 3,
 sub
-#line 38 "./pidl/expr.yp"
+#line 56 "./../pidl/expr.yp"
 { "$_[1] != $_[3]" }
        ],
        [#Rule 19
                 'exp', 3,
 sub
-#line 39 "./pidl/expr.yp"
+#line 58 "./../pidl/expr.yp"
 { "$_[1] || $_[3]" }
        ],
        [#Rule 20
                 'exp', 3,
 sub
-#line 40 "./pidl/expr.yp"
+#line 60 "./../pidl/expr.yp"
 { "$_[1] && $_[3]" }
        ],
        [#Rule 21
                 'exp', 3,
 sub
-#line 41 "./pidl/expr.yp"
+#line 62 "./../pidl/expr.yp"
 { "$_[1] & $_[3]" }
        ],
        [#Rule 22
                 'exp', 5,
 sub
-#line 42 "./pidl/expr.yp"
+#line 64 "./../pidl/expr.yp"
 { "$_[1]?$_[3]:$_[5]" }
        ],
        [#Rule 23
                 'exp', 2,
 sub
-#line 43 "./pidl/expr.yp"
+#line 66 "./../pidl/expr.yp"
 { "~$_[1]" }
        ],
        [#Rule 24
                 'exp', 2,
 sub
-#line 44 "./pidl/expr.yp"
+#line 68 "./../pidl/expr.yp"
 { "not $_[1]" }
        ],
        [#Rule 25
                 'exp', 3,
 sub
-#line 45 "./pidl/expr.yp"
+#line 70 "./../pidl/expr.yp"
 { "$_[1] / $_[3]" }
        ],
        [#Rule 26
                 'exp', 2,
 sub
-#line 46 "./pidl/expr.yp"
+#line 72 "./../pidl/expr.yp"
 { "-$_[2]" }
        ],
        [#Rule 27
                 'exp', 2,
 sub
-#line 47 "./pidl/expr.yp"
+#line 74 "./../pidl/expr.yp"
 { "&$_[2]" }
        ],
        [#Rule 28
                 'exp', 3,
 sub
-#line 48 "./pidl/expr.yp"
+#line 76 "./../pidl/expr.yp"
 { "$_[1]^$_[3]" }
        ],
        [#Rule 29
                 'exp', 3,
 sub
-#line 49 "./pidl/expr.yp"
+#line 78 "./../pidl/expr.yp"
 { "($_[2])" }
        ],
        [#Rule 30
                 'possible_pointer', 1,
 sub
-#line 53 "./pidl/expr.yp"
+#line 82 "./../pidl/expr.yp"
 { $_[0]->_Lookup($_[1]) }
        ],
        [#Rule 31
                 'possible_pointer', 2,
 sub
-#line 54 "./pidl/expr.yp"
+#line 84 "./../pidl/expr.yp"
 { $_[0]->_Dereference($_[2]); "*$_[2]" }
        ],
        [#Rule 32
                 'var', 1,
 sub
-#line 57 "./pidl/expr.yp"
+#line 88 "./../pidl/expr.yp"
 { $_[0]->_Use($_[1]) }
        ],
        [#Rule 33
                 'var', 3,
 sub
-#line 58 "./pidl/expr.yp"
+#line 90 "./../pidl/expr.yp"
 { $_[0]->_Use("$_[1].$_[3]") }
        ],
        [#Rule 34
                 'var', 3,
 sub
-#line 59 "./pidl/expr.yp"
+#line 92 "./../pidl/expr.yp"
 { "($_[2])" }
        ],
        [#Rule 35
                 'var', 3,
 sub
-#line 60 "./pidl/expr.yp"
+#line 94 "./../pidl/expr.yp"
 { $_[0]->_Use("*$_[1]"); $_[1]."->".$_[3] }
        ],
        [#Rule 36
                 'func', 4,
 sub
-#line 64 "./pidl/expr.yp"
+#line 99 "./../pidl/expr.yp"
 { "$_[1]($_[3])" }
        ],
        [#Rule 37
                 'opt_args', 0,
 sub
-#line 65 "./pidl/expr.yp"
+#line 104 "./../pidl/expr.yp"
 { "" }
        ],
        [#Rule 38
@@ -1349,7 +1349,7 @@ sub
        [#Rule 42
                 'args', 3,
 sub
-#line 68 "./pidl/expr.yp"
+#line 118 "./../pidl/expr.yp"
 { "$_[1], $_[3]" }
        ]
 ],
@@ -1357,28 +1357,28 @@ sub
     bless($self,$class);
 }
 
-#line 71 "./pidl/expr.yp"
+#line 121 "./../pidl/expr.yp"
 
 
 package Parse::Pidl::Expr;
 
 sub _Lexer {
-    my($parser)=shift;
+       my($parser)=shift;
 
-    $parser->YYData->{INPUT}=~s/^[ \t]//;
+       $parser->YYData->{INPUT}=~s/^[ \t]//;
 
-    for ($parser->YYData->{INPUT}) {
-        if (s/^(0x[0-9A-Fa-f]+)//) {
+       for ($parser->YYData->{INPUT}) {
+               if (s/^(0x[0-9A-Fa-f]+)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return('NUM',$1);
+                       return('NUM',$1);
                }
-        if (s/^([0-9]+(?:\.[0-9]+)?)//) {
+               if (s/^([0-9]+(?:\.[0-9]+)?)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return('NUM',$1);
+                       return('NUM',$1);
                }
-        if (s/^([A-Za-z_][A-Za-z0-9_]*)//) {
+               if (s/^([A-Za-z_][A-Za-z0-9_]*)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-               return('VAR',$1);
+                       return('VAR',$1);
                }
                if (s/^\"(.*?)\"//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
@@ -1386,13 +1386,13 @@ sub _Lexer {
                }
                if (s/^(==|!=|<=|>=|->|\|\||<<|>>|&&)//s) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return($1,$1);
+                       return($1,$1);
                }
-        if (s/^(.)//s) {
+               if (s/^(.)//s) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-            return($1,$1);
+                       return($1,$1);
                }
-    }
+       }
 }
 
 sub _Use($$)
@@ -1429,14 +1429,16 @@ sub _Error($)
 }
 
 sub Run {
-    my($self, $data, $error, $lookup, $deref, $use) = @_;
-    $self->YYData->{FULL_INPUT} = $data;
-    $self->YYData->{INPUT} = $data;
-    $self->YYData->{LOOKUP} = $lookup;
-    $self->YYData->{DEREFERENCE} = $deref;
-    $self->YYData->{ERROR} = $error;
-    $self->YYData->{USE} = $use;
-    return $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error);
+       my($self, $data, $error, $lookup, $deref, $use) = @_;
+
+       $self->YYData->{FULL_INPUT} = $data;
+       $self->YYData->{INPUT} = $data;
+       $self->YYData->{LOOKUP} = $lookup;
+       $self->YYData->{DEREFERENCE} = $deref;
+       $self->YYData->{ERROR} = $error;
+       $self->YYData->{USE} = $use;
+
+       return $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error);
 }
 
 1;
index 06d54fb4b5f524905f79523af4a359b619112025..1a3c59d35cf40b85e142399845e5db3e167fcab3 100644 (file)
@@ -38,7 +38,7 @@ sub new {
                        "import" => 7,
                        "include" => 13
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
                        'cpp_quote' => 11,
                        'importlib' => 10,
@@ -124,7 +124,7 @@ sub new {
                }
        },
        {#State 16
-               DEFAULT => -116
+               DEFAULT => -120
        },
        {#State 17
                DEFAULT => -11
@@ -184,7 +184,7 @@ sub new {
                }
        },
        {#State 26
-               DEFAULT => -112
+               DEFAULT => -116
        },
        {#State 27
                ACTIONS => {
@@ -210,10 +210,10 @@ sub new {
                ACTIONS => {
                        "(" => 41
                },
-               DEFAULT => -89
+               DEFAULT => -93
        },
        {#State 31
-               DEFAULT => -87
+               DEFAULT => -91
        },
        {#State 32
                DEFAULT => -8
@@ -256,7 +256,7 @@ sub new {
                }
        },
        {#State 40
-               DEFAULT => -86
+               DEFAULT => -90
        },
        {#State 41
                ACTIONS => {
@@ -264,7 +264,7 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
                        'text' => 51,
@@ -284,72 +284,73 @@ sub new {
        },
        {#State 44
                ACTIONS => {
-                       "const" => 63
+                       "const" => 64
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
                        'typedecl' => 54,
                        'function' => 55,
-                       'definitions' => 57,
-                       'bitmap' => 56,
-                       'definition' => 60,
-                       'property_list' => 59,
-                       'usertype' => 58,
-                       'const' => 62,
-                       'struct' => 61,
-                       'typedef' => 65,
-                       'enum' => 64,
-                       'union' => 66
+                       'pipe' => 56,
+                       'definitions' => 58,
+                       'bitmap' => 57,
+                       'definition' => 61,
+                       'property_list' => 60,
+                       'usertype' => 59,
+                       'const' => 63,
+                       'struct' => 62,
+                       'typedef' => 66,
+                       'enum' => 65,
+                       'union' => 67
                }
        },
        {#State 45
-               DEFAULT => -88
+               DEFAULT => -92
        },
        {#State 46
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -91
+               DEFAULT => -95
        },
        {#State 47
-               DEFAULT => -95
+               DEFAULT => -99
        },
        {#State 48
-               DEFAULT => -115
+               DEFAULT => -119
        },
        {#State 49
                ACTIONS => {
-                       "," => 82,
-                       ")" => 83
+                       "," => 83,
+                       ")" => 84
                }
        },
        {#State 50
-               DEFAULT => -94
+               DEFAULT => -98
        },
        {#State 51
-               DEFAULT => -96
+               DEFAULT => -100
        },
        {#State 52
                ACTIONS => {
-                       ";" => 85
+                       ";" => 86
                },
-               DEFAULT => -117,
+               DEFAULT => -121,
                GOTOS => {
-                       'optional_semicolon' => 84
+                       'optional_semicolon' => 85
                }
        },
        {#State 53
@@ -357,7 +358,7 @@ sub new {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 86
+                       'identifier' => 87
                }
        },
        {#State 54
@@ -367,98 +368,90 @@ sub new {
                DEFAULT => -22
        },
        {#State 56
-               DEFAULT => -33
+               DEFAULT => -34
        },
        {#State 57
+               DEFAULT => -33
+       },
+       {#State 58
                ACTIONS => {
-                       "}" => 87,
-                       "const" => 63
+                       "}" => 88,
+                       "const" => 64
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
                        'typedecl' => 54,
                        'function' => 55,
-                       'bitmap' => 56,
-                       'definition' => 88,
-                       'property_list' => 59,
-                       'usertype' => 58,
-                       'struct' => 61,
-                       'const' => 62,
-                       'typedef' => 65,
-                       'enum' => 64,
-                       'union' => 66
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'definition' => 89,
+                       'property_list' => 60,
+                       'usertype' => 59,
+                       'const' => 63,
+                       'struct' => 62,
+                       'typedef' => 66,
+                       'enum' => 65,
+                       'union' => 67
                }
        },
-       {#State 58
+       {#State 59
                ACTIONS => {
-                       ";" => 89
+                       ";" => 90
                }
        },
-       {#State 59
+       {#State 60
                ACTIONS => {
-                       "typedef" => 90,
+                       "typedef" => 91,
                        'IDENTIFIER' => 26,
-                       "signed" => 98,
-                       "union" => 91,
-                       "enum" => 100,
-                       "bitmap" => 101,
-                       'void' => 92,
-                       "unsigned" => 102,
+                       "signed" => 100,
+                       "union" => 92,
+                       "enum" => 101,
+                       "bitmap" => 102,
+                       'void' => 93,
+                       "pipe" => 103,
+                       "unsigned" => 104,
                        "[" => 20,
-                       "struct" => 97
+                       "struct" => 98
                },
                GOTOS => {
                        'existingtype' => 99,
-                       'bitmap' => 56,
-                       'usertype' => 94,
-                       'property_list' => 93,
-                       'identifier' => 95,
-                       'struct' => 61,
-                       'enum' => 64,
-                       'type' => 103,
-                       'union' => 66,
-                       'sign' => 96
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'usertype' => 95,
+                       'property_list' => 94,
+                       'identifier' => 96,
+                       'struct' => 62,
+                       'enum' => 65,
+                       'type' => 105,
+                       'union' => 67,
+                       'sign' => 97
                }
        },
-       {#State 60
+       {#State 61
                DEFAULT => -20
        },
-       {#State 61
+       {#State 62
                DEFAULT => -30
        },
-       {#State 62
+       {#State 63
                DEFAULT => -23
        },
-       {#State 63
+       {#State 64
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 104
+                       'identifier' => 106
                }
        },
-       {#State 64
-               DEFAULT => -32
-       },
        {#State 65
-               DEFAULT => -24
+               DEFAULT => -32
        },
        {#State 66
-               DEFAULT => -31
+               DEFAULT => -24
        },
        {#State 67
-               ACTIONS => {
-                       'CONSTANT' => 48,
-                       'TEXT' => 16,
-                       'IDENTIFIER' => 26
-               },
-               DEFAULT => -93,
-               GOTOS => {
-                       'identifier' => 50,
-                       'anytext' => 105,
-                       'text' => 51,
-                       'constant' => 47
-               }
+               DEFAULT => -31
        },
        {#State 68
                ACTIONS => {
@@ -466,10 +459,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 106,
+                       'anytext' => 107,
                        'text' => 51,
                        'constant' => 47
                }
@@ -480,10 +473,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 107,
+                       'anytext' => 108,
                        'text' => 51,
                        'constant' => 47
                }
@@ -494,10 +487,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 108,
+                       'anytext' => 109,
                        'text' => 51,
                        'constant' => 47
                }
@@ -508,10 +501,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 109,
+                       'anytext' => 110,
                        'text' => 51,
                        'constant' => 47
                }
@@ -522,10 +515,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 110,
+                       'anytext' => 111,
                        'text' => 51,
                        'constant' => 47
                }
@@ -536,13 +529,12 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 46,
+                       'anytext' => 112,
                        'text' => 51,
-                       'constant' => 47,
-                       'commalisttext' => 111
+                       'constant' => 47
                }
        },
        {#State 74
@@ -551,12 +543,13 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 112,
+                       'anytext' => 46,
                        'text' => 51,
-                       'constant' => 47
+                       'constant' => 47,
+                       'commalisttext' => 113
                }
        },
        {#State 75
@@ -565,10 +558,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 113,
+                       'anytext' => 114,
                        'text' => 51,
                        'constant' => 47
                }
@@ -579,10 +572,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 114,
+                       'anytext' => 115,
                        'text' => 51,
                        'constant' => 47
                }
@@ -593,13 +586,12 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 46,
+                       'anytext' => 116,
                        'text' => 51,
-                       'constant' => 47,
-                       'commalisttext' => 115
+                       'constant' => 47
                }
        },
        {#State 78
@@ -608,12 +600,13 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 116,
+                       'anytext' => 46,
                        'text' => 51,
-                       'constant' => 47
+                       'constant' => 47,
+                       'commalisttext' => 117
                }
        },
        {#State 79
@@ -622,10 +615,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 117,
+                       'anytext' => 118,
                        'text' => 51,
                        'constant' => 47
                }
@@ -636,10 +629,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 118,
+                       'anytext' => 119,
                        'text' => 51,
                        'constant' => 47
                }
@@ -650,10 +643,10 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 119,
+                       'anytext' => 120,
                        'text' => 51,
                        'constant' => 47
                }
@@ -664,1039 +657,1101 @@ sub new {
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 120,
+                       'anytext' => 121,
                        'text' => 51,
                        'constant' => 47
                }
        },
        {#State 83
-               DEFAULT => -90
+               ACTIONS => {
+                       'CONSTANT' => 48,
+                       'TEXT' => 16,
+                       'IDENTIFIER' => 26
+               },
+               DEFAULT => -97,
+               GOTOS => {
+                       'identifier' => 50,
+                       'anytext' => 122,
+                       'text' => 51,
+                       'constant' => 47
+               }
        },
        {#State 84
-               DEFAULT => -13
+               DEFAULT => -94
        },
        {#State 85
-               DEFAULT => -118
+               DEFAULT => -13
        },
        {#State 86
+               DEFAULT => -122
+       },
+       {#State 87
                ACTIONS => {
-                       ";" => 121
+                       ";" => 123
                }
        },
-       {#State 87
+       {#State 88
                ACTIONS => {
-                       ";" => 85
+                       ";" => 86
                },
-               DEFAULT => -117,
+               DEFAULT => -121,
                GOTOS => {
-                       'optional_semicolon' => 122
+                       'optional_semicolon' => 124
                }
        },
-       {#State 88
-               DEFAULT => -21
-       },
        {#State 89
-               DEFAULT => -34
+               DEFAULT => -21
        },
        {#State 90
+               DEFAULT => -35
+       },
+       {#State 91
                ACTIONS => {
                        'IDENTIFIER' => 26,
-                       "signed" => 98,
-                       'void' => 92,
-                       "unsigned" => 102
+                       "signed" => 100,
+                       'void' => 93,
+                       "unsigned" => 104
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
                        'existingtype' => 99,
-                       'bitmap' => 56,
-                       'usertype' => 94,
-                       'property_list' => 93,
-                       'identifier' => 95,
-                       'struct' => 61,
-                       'enum' => 64,
-                       'type' => 123,
-                       'union' => 66,
-                       'sign' => 96
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'usertype' => 95,
+                       'property_list' => 94,
+                       'identifier' => 96,
+                       'struct' => 62,
+                       'enum' => 65,
+                       'type' => 125,
+                       'union' => 67,
+                       'sign' => 97
                }
        },
-       {#State 91
+       {#State 92
                ACTIONS => {
-                       'IDENTIFIER' => 124
+                       'IDENTIFIER' => 126
                },
-               DEFAULT => -114,
+               DEFAULT => -117,
                GOTOS => {
-                       'optional_identifier' => 125
+                       'optional_identifier' => 127
                }
        },
-       {#State 92
-               DEFAULT => -41
-       },
        {#State 93
+               DEFAULT => -42
+       },
+       {#State 94
                ACTIONS => {
-                       "union" => 91,
-                       "enum" => 100,
-                       "bitmap" => 101,
+                       "pipe" => 103,
+                       "union" => 92,
+                       "enum" => 101,
+                       "bitmap" => 102,
                        "[" => 20,
-                       "struct" => 97
+                       "struct" => 98
                }
        },
-       {#State 94
-               DEFAULT => -39
-       },
        {#State 95
-               DEFAULT => -38
+               DEFAULT => -40
        },
        {#State 96
+               DEFAULT => -39
+       },
+       {#State 97
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 126
+                       'identifier' => 128
                }
        },
-       {#State 97
+       {#State 98
                ACTIONS => {
-                       'IDENTIFIER' => 124
+                       'IDENTIFIER' => 126
                },
-               DEFAULT => -114,
+               DEFAULT => -117,
                GOTOS => {
-                       'optional_identifier' => 127
+                       'optional_identifier' => 129
                }
        },
-       {#State 98
-               DEFAULT => -35
-       },
        {#State 99
-               DEFAULT => -40
+               DEFAULT => -41
        },
        {#State 100
+               DEFAULT => -36
+       },
+       {#State 101
                ACTIONS => {
-                       'IDENTIFIER' => 124
+                       'IDENTIFIER' => 126
                },
-               DEFAULT => -114,
+               DEFAULT => -117,
                GOTOS => {
-                       'optional_identifier' => 128
+                       'optional_identifier' => 130
                }
        },
-       {#State 101
+       {#State 102
                ACTIONS => {
-                       'IDENTIFIER' => 124
+                       'IDENTIFIER' => 126
                },
-               DEFAULT => -114,
+               DEFAULT => -117,
                GOTOS => {
-                       'optional_identifier' => 129
+                       'optional_identifier' => 131
                }
        },
-       {#State 102
-               DEFAULT => -36
-       },
        {#State 103
                ACTIONS => {
-                       'IDENTIFIER' => 26
+                       'IDENTIFIER' => 26,
+                       "signed" => 100,
+                       'void' => 93,
+                       "unsigned" => 104
                },
+               DEFAULT => -89,
                GOTOS => {
-                       'identifier' => 130
+                       'existingtype' => 99,
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'usertype' => 95,
+                       'property_list' => 94,
+                       'identifier' => 96,
+                       'struct' => 62,
+                       'enum' => 65,
+                       'type' => 132,
+                       'union' => 67,
+                       'sign' => 97
                }
        },
        {#State 104
-               DEFAULT => -74,
-               GOTOS => {
-                       'pointers' => 131
-               }
+               DEFAULT => -37
        },
        {#State 105
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -106
+               GOTOS => {
+                       'identifier' => 133
+               }
        },
        {#State 106
-               ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
-               },
-               DEFAULT => -97
+               DEFAULT => -75,
+               GOTOS => {
+                       'pointers' => 134
+               }
        },
        {#State 107
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -105
+               DEFAULT => -110
        },
        {#State 108
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
                DEFAULT => -101
        },
        {#State 109
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
                DEFAULT => -109
        },
        {#State 110
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -108
+               DEFAULT => -105
        },
        {#State 111
                ACTIONS => {
-                       "}" => 132,
-                       "," => 82
-               }
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
+               },
+               DEFAULT => -113
        },
        {#State 112
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
-               DEFAULT => -103
+               DEFAULT => -112
        },
        {#State 113
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
-               },
-               DEFAULT => -104
+                       "}" => 135,
+                       "," => 83
+               }
        },
        {#State 114
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
                DEFAULT => -107
        },
        {#State 115
                ACTIONS => {
-                       "," => 82,
-                       ")" => 133
-               }
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
+               },
+               DEFAULT => -108
        },
        {#State 116
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -102
+               DEFAULT => -111
        },
        {#State 117
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
-               },
-               DEFAULT => -99
+                       "," => 83,
+                       ")" => 136
+               }
        },
        {#State 118
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
-               DEFAULT => -98
+               DEFAULT => -106
        },
        {#State 119
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
-               DEFAULT => -100
+               DEFAULT => -103
        },
        {#State 120
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
-               DEFAULT => -92
+               DEFAULT => -102
        },
        {#State 121
-               DEFAULT => -15
+               ACTIONS => {
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
+               },
+               DEFAULT => -104
        },
        {#State 122
-               DEFAULT => -16
-       },
-       {#State 123
                ACTIONS => {
-                       'IDENTIFIER' => 26
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               GOTOS => {
-                       'identifier' => 134
-               }
+               DEFAULT => -96
+       },
+       {#State 123
+               DEFAULT => -15
        },
        {#State 124
-               DEFAULT => -113
+               DEFAULT => -16
        },
        {#State 125
                ACTIONS => {
-                       "{" => 136
+                       'IDENTIFIER' => 26
                },
-               DEFAULT => -70,
                GOTOS => {
-                       'union_body' => 137,
-                       'opt_union_body' => 135
+                       'identifier' => 137
                }
        },
        {#State 126
-               DEFAULT => -37
+               DEFAULT => -118
        },
        {#State 127
                ACTIONS => {
                        "{" => 139
                },
-               DEFAULT => -60,
+               DEFAULT => -71,
                GOTOS => {
-                       'struct_body' => 138,
-                       'opt_struct_body' => 140
+                       'union_body' => 140,
+                       'opt_union_body' => 138
                }
        },
        {#State 128
+               DEFAULT => -38
+       },
+       {#State 129
                ACTIONS => {
-                       "{" => 141
+                       "{" => 142
                },
-               DEFAULT => -43,
+               DEFAULT => -61,
                GOTOS => {
-                       'opt_enum_body' => 143,
-                       'enum_body' => 142
+                       'struct_body' => 141,
+                       'opt_struct_body' => 143
                }
        },
-       {#State 129
+       {#State 130
                ACTIONS => {
-                       "{" => 145
+                       "{" => 144
                },
-               DEFAULT => -51,
+               DEFAULT => -44,
                GOTOS => {
-                       'bitmap_body' => 146,
-                       'opt_bitmap_body' => 144
+                       'opt_enum_body' => 146,
+                       'enum_body' => 145
                }
        },
-       {#State 130
+       {#State 131
                ACTIONS => {
-                       "(" => 147
+                       "{" => 148
+               },
+               DEFAULT => -52,
+               GOTOS => {
+                       'bitmap_body' => 149,
+                       'opt_bitmap_body' => 147
                }
        },
-       {#State 131
+       {#State 132
+               DEFAULT => -77
+       },
+       {#State 133
+               ACTIONS => {
+                       "(" => 150
+               }
+       },
+       {#State 134
                ACTIONS => {
                        'IDENTIFIER' => 26,
-                       "*" => 149
+                       "*" => 152
                },
                GOTOS => {
-                       'identifier' => 148
+                       'identifier' => 151
                }
        },
-       {#State 132
+       {#State 135
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 150,
+                       'anytext' => 153,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 133
+       {#State 136
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 151,
+                       'anytext' => 154,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 134
+       {#State 137
                ACTIONS => {
-                       "[" => 152
+                       "[" => 155
                },
-               DEFAULT => -82,
+               DEFAULT => -86,
                GOTOS => {
-                       'array_len' => 153
+                       'array_len' => 156
                }
        },
-       {#State 135
-               DEFAULT => -72
+       {#State 138
+               DEFAULT => -73
        },
-       {#State 136
-               DEFAULT => -67,
+       {#State 139
+               DEFAULT => -68,
                GOTOS => {
-                       'union_elements' => 154
+                       'union_elements' => 157
                }
        },
-       {#State 137
-               DEFAULT => -71
+       {#State 140
+               DEFAULT => -72
        },
-       {#State 138
-               DEFAULT => -61
+       {#State 141
+               DEFAULT => -62
        },
-       {#State 139
-               DEFAULT => -76,
+       {#State 142
+               DEFAULT => -78,
                GOTOS => {
-                       'element_list1' => 155
+                       'element_list1' => 158
                }
        },
-       {#State 140
-               DEFAULT => -62
+       {#State 143
+               DEFAULT => -63
        },
-       {#State 141
+       {#State 144
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 156,
-                       'enum_element' => 157,
-                       'enum_elements' => 158
+                       'identifier' => 159,
+                       'enum_element' => 160,
+                       'enum_elements' => 161
                }
        },
-       {#State 142
-               DEFAULT => -44
-       },
-       {#State 143
+       {#State 145
                DEFAULT => -45
        },
-       {#State 144
-               DEFAULT => -53
+       {#State 146
+               DEFAULT => -46
        },
-       {#State 145
+       {#State 147
+               DEFAULT => -54
+       },
+       {#State 148
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -56,
+               DEFAULT => -57,
                GOTOS => {
-                       'identifier' => 161,
-                       'bitmap_element' => 160,
-                       'bitmap_elements' => 159,
-                       'opt_bitmap_elements' => 162
+                       'identifier' => 164,
+                       'bitmap_element' => 163,
+                       'bitmap_elements' => 162,
+                       'opt_bitmap_elements' => 165
                }
        },
-       {#State 146
-               DEFAULT => -52
+       {#State 149
+               DEFAULT => -53
        },
-       {#State 147
+       {#State 150
                ACTIONS => {
-                       "," => -78,
-                       "void" => 166,
-                       ")" => -78
+                       "," => -82,
+                       "void" => 169,
+                       "const" => 167,
+                       ")" => -82
                },
-               DEFAULT => -85,
+               DEFAULT => -80,
                GOTOS => {
-                       'base_element' => 163,
-                       'element_list2' => 165,
-                       'property_list' => 164
+                       'optional_const' => 166,
+                       'element_list2' => 168
                }
        },
-       {#State 148
+       {#State 151
                ACTIONS => {
-                       "[" => 152,
-                       "=" => 168
+                       "[" => 155,
+                       "=" => 171
                },
                GOTOS => {
-                       'array_len' => 167
+                       'array_len' => 170
                }
        },
-       {#State 149
-               DEFAULT => -75
+       {#State 152
+               DEFAULT => -76
        },
-       {#State 150
+       {#State 153
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -111
+               DEFAULT => -115
        },
-       {#State 151
+       {#State 154
                ACTIONS => {
-                       ":" => 67,
-                       "<" => 70,
-                       "~" => 71,
-                       "?" => 69,
-                       "{" => 73,
-                       "=" => 76
+                       ":" => 68,
+                       "<" => 71,
+                       "~" => 72,
+                       "?" => 70,
+                       "{" => 74,
+                       "=" => 77
                },
-               DEFAULT => -110
+               DEFAULT => -114
        },
-       {#State 152
+       {#State 155
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
-                       "]" => 169,
+                       "]" => 172,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 170,
+                       'anytext' => 173,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 153
-               ACTIONS => {
-                       ";" => 171
-               }
-       },
-       {#State 154
+       {#State 156
                ACTIONS => {
-                       "}" => 172
-               },
-               DEFAULT => -85,
-               GOTOS => {
-                       'optional_base_element' => 174,
-                       'property_list' => 173
+                       ";" => 174
                }
        },
-       {#State 155
+       {#State 157
                ACTIONS => {
                        "}" => 175
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
-                       'base_element' => 176,
-                       'property_list' => 164
+                       'optional_base_element' => 177,
+                       'property_list' => 176
                }
        },
-       {#State 156
-               ACTIONS => {
-                       "=" => 177
-               },
-               DEFAULT => -48
-       },
-       {#State 157
-               DEFAULT => -46
-       },
        {#State 158
                ACTIONS => {
-                       "}" => 178,
-                       "," => 179
+                       "}" => 178
+               },
+               DEFAULT => -89,
+               GOTOS => {
+                       'base_element' => 179,
+                       'property_list' => 180
                }
        },
        {#State 159
                ACTIONS => {
-                       "," => 180
+                       "=" => 181
                },
-               DEFAULT => -57
+               DEFAULT => -49
        },
        {#State 160
-               DEFAULT => -54
+               DEFAULT => -47
        },
        {#State 161
                ACTIONS => {
-                       "=" => 181
+                       "}" => 182,
+                       "," => 183
                }
        },
        {#State 162
                ACTIONS => {
-                       "}" => 182
-               }
+                       "," => 184
+               },
+               DEFAULT => -58
        },
        {#State 163
-               DEFAULT => -80
+               DEFAULT => -55
        },
        {#State 164
                ACTIONS => {
-                       'IDENTIFIER' => 26,
-                       "signed" => 98,
-                       'void' => 92,
-                       "unsigned" => 102,
-                       "[" => 20
-               },
-               DEFAULT => -85,
-               GOTOS => {
-                       'existingtype' => 99,
-                       'bitmap' => 56,
-                       'usertype' => 94,
-                       'property_list' => 93,
-                       'identifier' => 95,
-                       'struct' => 61,
-                       'enum' => 64,
-                       'type' => 183,
-                       'union' => 66,
-                       'sign' => 96
+                       "=" => 185
                }
        },
        {#State 165
                ACTIONS => {
-                       "," => 184,
-                       ")" => 185
+                       "}" => 186
                }
        },
        {#State 166
-               DEFAULT => -79
+               DEFAULT => -89,
+               GOTOS => {
+                       'base_element' => 187,
+                       'property_list' => 180
+               }
        },
        {#State 167
+               DEFAULT => -81
+       },
+       {#State 168
                ACTIONS => {
-                       "=" => 186
+                       "," => 188,
+                       ")" => 189
                }
        },
-       {#State 168
+       {#State 169
+               DEFAULT => -83
+       },
+       {#State 170
+               ACTIONS => {
+                       "=" => 190
+               }
+       },
+       {#State 171
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 187,
+                       'anytext' => 191,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 169
+       {#State 172
                ACTIONS => {
-                       "[" => 152
+                       "[" => 155
                },
-               DEFAULT => -82,
+               DEFAULT => -86,
                GOTOS => {
-                       'array_len' => 188
+                       'array_len' => 192
                }
        },
-       {#State 170
+       {#State 173
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "?" => 69,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "&" => 74,
-                       "{" => 73,
-                       "/" => 75,
-                       "=" => 76,
-                       "|" => 78,
-                       "(" => 77,
-                       "*" => 79,
-                       "." => 80,
-                       "]" => 189,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "?" => 70,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "&" => 75,
+                       "{" => 74,
+                       "/" => 76,
+                       "=" => 77,
+                       "|" => 79,
+                       "(" => 78,
+                       "*" => 80,
+                       "." => 81,
+                       "]" => 193,
+                       ">" => 82
                }
        },
-       {#State 171
+       {#State 174
                DEFAULT => -29
        },
-       {#State 172
-               DEFAULT => -69
+       {#State 175
+               DEFAULT => -70
        },
-       {#State 173
+       {#State 176
                ACTIONS => {
                        "[" => 20
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
-                       'base_or_empty' => 190,
-                       'base_element' => 191,
-                       'empty_element' => 192,
-                       'property_list' => 193
+                       'base_or_empty' => 194,
+                       'base_element' => 195,
+                       'empty_element' => 196,
+                       'property_list' => 197
                }
        },
-       {#State 174
-               DEFAULT => -68
+       {#State 177
+               DEFAULT => -69
        },
-       {#State 175
-               DEFAULT => -59
+       {#State 178
+               DEFAULT => -60
        },
-       {#State 176
+       {#State 179
                ACTIONS => {
-                       ";" => 194
+                       ";" => 198
                }
        },
-       {#State 177
+       {#State 180
+               ACTIONS => {
+                       'IDENTIFIER' => 26,
+                       "signed" => 100,
+                       'void' => 93,
+                       "unsigned" => 104,
+                       "[" => 20
+               },
+               DEFAULT => -89,
+               GOTOS => {
+                       'existingtype' => 99,
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'usertype' => 95,
+                       'property_list' => 94,
+                       'identifier' => 96,
+                       'struct' => 62,
+                       'enum' => 65,
+                       'type' => 199,
+                       'union' => 67,
+                       'sign' => 97
+               }
+       },
+       {#State 181
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 195,
+                       'anytext' => 200,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 178
-               DEFAULT => -42
+       {#State 182
+               DEFAULT => -43
        },
-       {#State 179
+       {#State 183
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 156,
-                       'enum_element' => 196
+                       'identifier' => 159,
+                       'enum_element' => 201
                }
        },
-       {#State 180
+       {#State 184
                ACTIONS => {
                        'IDENTIFIER' => 26
                },
                GOTOS => {
-                       'identifier' => 161,
-                       'bitmap_element' => 197
+                       'identifier' => 164,
+                       'bitmap_element' => 202
                }
        },
-       {#State 181
+       {#State 185
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 198,
+                       'anytext' => 203,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 182
-               DEFAULT => -50
+       {#State 186
+               DEFAULT => -51
        },
-       {#State 183
-               DEFAULT => -74,
-               GOTOS => {
-                       'pointers' => 199
-               }
+       {#State 187
+               DEFAULT => -84
        },
-       {#State 184
-               DEFAULT => -85,
+       {#State 188
+               ACTIONS => {
+                       "const" => 167
+               },
+               DEFAULT => -80,
                GOTOS => {
-                       'base_element' => 200,
-                       'property_list' => 164
+                       'optional_const' => 204
                }
        },
-       {#State 185
+       {#State 189
                ACTIONS => {
-                       ";" => 201
+                       ";" => 205
                }
        },
-       {#State 186
+       {#State 190
                ACTIONS => {
                        'CONSTANT' => 48,
                        'TEXT' => 16,
                        'IDENTIFIER' => 26
                },
-               DEFAULT => -93,
+               DEFAULT => -97,
                GOTOS => {
                        'identifier' => 50,
-                       'anytext' => 202,
+                       'anytext' => 206,
                        'text' => 51,
                        'constant' => 47
                }
        },
-       {#State 187
+       {#State 191
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "?" => 69,
-                       "<" => 70,
-                       ";" => 203,
-                       "+" => 72,
-                       "~" => 71,
-                       "&" => 74,
-                       "{" => 73,
-                       "/" => 75,
-                       "=" => 76,
-                       "|" => 78,
-                       "(" => 77,
-                       "*" => 79,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "?" => 70,
+                       "<" => 71,
+                       ";" => 207,
+                       "+" => 73,
+                       "~" => 72,
+                       "&" => 75,
+                       "{" => 74,
+                       "/" => 76,
+                       "=" => 77,
+                       "|" => 79,
+                       "(" => 78,
+                       "*" => 80,
+                       "." => 81,
+                       ">" => 82
                }
        },
-       {#State 188
-               DEFAULT => -83
+       {#State 192
+               DEFAULT => -87
        },
-       {#State 189
+       {#State 193
                ACTIONS => {
-                       "[" => 152
+                       "[" => 155
                },
-               DEFAULT => -82,
+               DEFAULT => -86,
                GOTOS => {
-                       'array_len' => 204
+                       'array_len' => 208
                }
        },
-       {#State 190
-               DEFAULT => -66
+       {#State 194
+               DEFAULT => -67
        },
-       {#State 191
+       {#State 195
                ACTIONS => {
-                       ";" => 205
+                       ";" => 209
                }
        },
-       {#State 192
-               DEFAULT => -65
+       {#State 196
+               DEFAULT => -66
        },
-       {#State 193
+       {#State 197
                ACTIONS => {
                        'IDENTIFIER' => 26,
-                       "signed" => 98,
-                       ";" => 206,
-                       'void' => 92,
-                       "unsigned" => 102,
+                       "signed" => 100,
+                       ";" => 210,
+                       'void' => 93,
+                       "unsigned" => 104,
                        "[" => 20
                },
-               DEFAULT => -85,
+               DEFAULT => -89,
                GOTOS => {
                        'existingtype' => 99,
-                       'bitmap' => 56,
-                       'usertype' => 94,
-                       'property_list' => 93,
-                       'identifier' => 95,
-                       'struct' => 61,
-                       'enum' => 64,
-                       'type' => 183,
-                       'union' => 66,
-                       'sign' => 96
+                       'pipe' => 56,
+                       'bitmap' => 57,
+                       'usertype' => 95,
+                       'property_list' => 94,
+                       'identifier' => 96,
+                       'struct' => 62,
+                       'enum' => 65,
+                       'type' => 199,
+                       'union' => 67,
+                       'sign' => 97
                }
        },
-       {#State 194
-               DEFAULT => -77
+       {#State 198
+               DEFAULT => -79
        },
-       {#State 195
+       {#State 199
+               DEFAULT => -75,
+               GOTOS => {
+                       'pointers' => 211
+               }
+       },
+       {#State 200
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -49
+               DEFAULT => -50
        },
-       {#State 196
-               DEFAULT => -47
+       {#State 201
+               DEFAULT => -48
        },
-       {#State 197
-               DEFAULT => -55
+       {#State 202
+               DEFAULT => -56
        },
-       {#State 198
+       {#State 203
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "<" => 70,
-                       "+" => 72,
-                       "~" => 71,
-                       "*" => 79,
-                       "?" => 69,
-                       "{" => 73,
-                       "&" => 74,
-                       "/" => 75,
-                       "=" => 76,
-                       "(" => 77,
-                       "|" => 78,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "<" => 71,
+                       "+" => 73,
+                       "~" => 72,
+                       "*" => 80,
+                       "?" => 70,
+                       "{" => 74,
+                       "&" => 75,
+                       "/" => 76,
+                       "=" => 77,
+                       "(" => 78,
+                       "|" => 79,
+                       "." => 81,
+                       ">" => 82
                },
-               DEFAULT => -58
+               DEFAULT => -59
        },
-       {#State 199
-               ACTIONS => {
-                       'IDENTIFIER' => 26,
-                       "*" => 149
-               },
+       {#State 204
+               DEFAULT => -89,
                GOTOS => {
-                       'identifier' => 207
+                       'base_element' => 212,
+                       'property_list' => 180
                }
        },
-       {#State 200
-               DEFAULT => -81
-       },
-       {#State 201
+       {#State 205
                DEFAULT => -28
        },
-       {#State 202
+       {#State 206
                ACTIONS => {
-                       "-" => 68,
-                       ":" => 67,
-                       "?" => 69,
-                       "<" => 70,
-                       ";" => 208,
-                       "+" => 72,
-                       "~" => 71,
-                       "&" => 74,
-                       "{" => 73,
-                       "/" => 75,
-                       "=" => 76,
-                       "|" => 78,
-                       "(" => 77,
-                       "*" => 79,
-                       "." => 80,
-                       ">" => 81
+                       "-" => 69,
+                       ":" => 68,
+                       "?" => 70,
+                       "<" => 71,
+                       ";" => 213,
+                       "+" => 73,
+                       "~" => 72,
+                       "&" => 75,
+                       "{" => 74,
+                       "/" => 76,
+                       "=" => 77,
+                       "|" => 79,
+                       "(" => 78,
+                       "*" => 80,
+                       "." => 81,
+                       ">" => 82
                }
        },
-       {#State 203
+       {#State 207
                DEFAULT => -26
        },
-       {#State 204
-               DEFAULT => -84
+       {#State 208
+               DEFAULT => -88
        },
-       {#State 205
-               DEFAULT => -64
+       {#State 209
+               DEFAULT => -65
        },
-       {#State 206
-               DEFAULT => -63
+       {#State 210
+               DEFAULT => -64
        },
-       {#State 207
+       {#State 211
                ACTIONS => {
-                       "[" => 152
+                       'IDENTIFIER' => 26,
+                       "*" => 152
                },
-               DEFAULT => -82,
                GOTOS => {
-                       'array_len' => 209
+                       'identifier' => 214
                }
        },
-       {#State 208
+       {#State 212
+               DEFAULT => -85
+       },
+       {#State 213
                DEFAULT => -27
        },
-       {#State 209
-               DEFAULT => -73
+       {#State 214
+               ACTIONS => {
+                       "[" => 155
+               },
+               DEFAULT => -86,
+               GOTOS => {
+                       'array_len' => 215
+               }
+       },
+       {#State 215
+               DEFAULT => -74
        }
 ],
                                   yyrules  =>
@@ -1710,96 +1765,96 @@ sub new {
        [#Rule 2
                 'idl', 2,
 sub
-#line 19 "pidl/idl.yp"
+#line 20 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 3
                 'idl', 2,
 sub
-#line 20 "pidl/idl.yp"
+#line 22 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 4
                 'idl', 2,
 sub
-#line 21 "pidl/idl.yp"
+#line 24 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 5
                 'idl', 2,
 sub
-#line 22 "pidl/idl.yp"
+#line 26 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 6
                 'idl', 2,
 sub
-#line 23 "pidl/idl.yp"
+#line 28 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 7
                 'idl', 2,
 sub
-#line 24 "pidl/idl.yp"
+#line 30 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 8
                 'import', 3,
 sub
-#line 27 "pidl/idl.yp"
+#line 35 "./../pidl/idl.yp"
 {{
-                       "TYPE" => "IMPORT", 
-                       "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE}
-               }}
+               "TYPE" => "IMPORT",
+               "PATHS" => $_[2],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 9
                 'include', 3,
 sub
-#line 34 "pidl/idl.yp"
-{{ 
-                       "TYPE" => "INCLUDE", 
-                       "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE}
-               }}
+#line 45 "./../pidl/idl.yp"
+{{
+               "TYPE" => "INCLUDE",
+               "PATHS" => $_[2],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 10
                 'importlib', 3,
 sub
-#line 41 "pidl/idl.yp"
-{{ 
-                       "TYPE" => "IMPORTLIB", 
-                       "PATHS" => $_[2],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE}
-               }}
+#line 55 "./../pidl/idl.yp"
+{{
+               "TYPE" => "IMPORTLIB",
+               "PATHS" => $_[2],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 11
                 'commalist', 1,
 sub
-#line 50 "pidl/idl.yp"
+#line 64 "./../pidl/idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 12
                 'commalist', 3,
 sub
-#line 51 "pidl/idl.yp"
+#line 66 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
        [#Rule 13
                 'coclass', 7,
 sub
-#line 55 "pidl/idl.yp"
+#line 71 "./../pidl/idl.yp"
 {{
-               "TYPE" => "COCLASS", 
-              "PROPERTIES" => $_[1],
-              "NAME" => $_[3],
-              "DATA" => $_[5],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE},
-          }}
+               "TYPE" => "COCLASS",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "DATA" => $_[5],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 14
                 'interface_names', 0, undef
@@ -1807,22 +1862,22 @@ sub
        [#Rule 15
                 'interface_names', 4,
 sub
-#line 67 "pidl/idl.yp"
+#line 84 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 16
                 'interface', 8,
 sub
-#line 71 "pidl/idl.yp"
+#line 89 "./../pidl/idl.yp"
 {{
-               "TYPE" => "INTERFACE", 
-              "PROPERTIES" => $_[1],
-              "NAME" => $_[3],
-                  "BASE" => $_[4],
-              "DATA" => $_[6],
-                  "FILE" => $_[0]->YYData->{FILE},
-                  "LINE" => $_[0]->YYData->{LINE},
-          }}
+               "TYPE" => "INTERFACE",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "BASE" => $_[4],
+               "DATA" => $_[6],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 17
                 'base_interface', 0, undef
@@ -1830,30 +1885,30 @@ sub
        [#Rule 18
                 'base_interface', 2,
 sub
-#line 84 "pidl/idl.yp"
+#line 103 "./../pidl/idl.yp"
 { $_[2] }
        ],
        [#Rule 19
                 'cpp_quote', 4,
 sub
-#line 89 "pidl/idl.yp"
+#line 109 "./../pidl/idl.yp"
 {{
                 "TYPE" => "CPP_QUOTE",
+                "DATA" => $_[3],
                 "FILE" => $_[0]->YYData->{FILE},
                 "LINE" => $_[0]->YYData->{LINE},
-                "DATA" => $_[3]
        }}
        ],
        [#Rule 20
                 'definitions', 1,
 sub
-#line 98 "pidl/idl.yp"
+#line 118 "./../pidl/idl.yp"
 { [ $_[1] ] }
        ],
        [#Rule 21
                 'definitions', 2,
 sub
-#line 99 "pidl/idl.yp"
+#line 120 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
        [#Rule 22
@@ -1871,36 +1926,36 @@ sub
        [#Rule 26
                 'const', 7,
 sub
-#line 107 "pidl/idl.yp"
+#line 135 "./../pidl/idl.yp"
 {{
-                     "TYPE"  => "CONST", 
-                    "DTYPE"  => $_[2],
-                        "POINTERS" => $_[3],
-                    "NAME"  => $_[4],
-                    "VALUE" => $_[6],
-                    "FILE" => $_[0]->YYData->{FILE},
-                    "LINE" => $_[0]->YYData->{LINE},
-        }}
+               "TYPE"  => "CONST",
+               "DTYPE"  => $_[2],
+               "POINTERS" => $_[3],
+               "NAME"  => $_[4],
+               "VALUE" => $_[6],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 27
                 'const', 8,
 sub
-#line 117 "pidl/idl.yp"
+#line 146 "./../pidl/idl.yp"
 {{
-                     "TYPE"  => "CONST", 
-                    "DTYPE"  => $_[2],
-                        "POINTERS" => $_[3],
-                    "NAME"  => $_[4],
-                    "ARRAY_LEN" => $_[5],
-                    "VALUE" => $_[7],
-                    "FILE" => $_[0]->YYData->{FILE},
-                    "LINE" => $_[0]->YYData->{LINE},
-        }}
+               "TYPE"  => "CONST",
+               "DTYPE"  => $_[2],
+               "POINTERS" => $_[3],
+               "NAME"  => $_[4],
+               "ARRAY_LEN" => $_[5],
+               "VALUE" => $_[7],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
        [#Rule 28
                 'function', 7,
 sub
-#line 131 "pidl/idl.yp"
+#line 160 "./../pidl/idl.yp"
 {{
                "TYPE" => "FUNCTION",
                "NAME" => $_[3],
@@ -1909,20 +1964,20 @@ sub
                "ELEMENTS" => $_[5],
                "FILE" => $_[0]->YYData->{FILE},
                "LINE" => $_[0]->YYData->{LINE},
-         }}
+       }}
        ],
        [#Rule 29
                 'typedef', 6,
 sub
-#line 143 "pidl/idl.yp"
+#line 173 "./../pidl/idl.yp"
 {{
-                    "TYPE" => "TYPEDEF", 
-                     "PROPERTIES" => $_[1],
-                    "NAME" => $_[4],
-                    "DATA" => $_[3],
-                    "ARRAY_LEN" => $_[5],
-                    "FILE" => $_[0]->YYData->{FILE},
-                    "LINE" => $_[0]->YYData->{LINE},
+               "TYPE" => "TYPEDEF",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[4],
+               "DATA" => $_[3],
+               "ARRAY_LEN" => $_[5],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
         }}
        ],
        [#Rule 30
@@ -1938,450 +1993,480 @@ sub
                 'usertype', 1, undef
        ],
        [#Rule 34
+                'usertype', 1, undef
+       ],
+       [#Rule 35
                 'typedecl', 2,
 sub
-#line 156 "pidl/idl.yp"
+#line 197 "./../pidl/idl.yp"
 { $_[1] }
        ],
-       [#Rule 35
-                'sign', 1, undef
-       ],
        [#Rule 36
                 'sign', 1, undef
        ],
        [#Rule 37
+                'sign', 1, undef
+       ],
+       [#Rule 38
                 'existingtype', 2,
 sub
-#line 161 "pidl/idl.yp"
+#line 207 "./../pidl/idl.yp"
 { ($_[1]?$_[1]:"signed") ." $_[2]" }
        ],
-       [#Rule 38
-                'existingtype', 1, undef
-       ],
        [#Rule 39
-                'type', 1, undef
+                'existingtype', 1, undef
        ],
        [#Rule 40
                 'type', 1, undef
        ],
        [#Rule 41
+                'type', 1, undef
+       ],
+       [#Rule 42
                 'type', 1,
 sub
-#line 165 "pidl/idl.yp"
+#line 217 "./../pidl/idl.yp"
 { "void" }
        ],
-       [#Rule 42
+       [#Rule 43
                 'enum_body', 3,
 sub
-#line 167 "pidl/idl.yp"
+#line 221 "./../pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 43
+       [#Rule 44
                 'opt_enum_body', 0, undef
        ],
-       [#Rule 44
+       [#Rule 45
                 'opt_enum_body', 1, undef
        ],
-       [#Rule 45
+       [#Rule 46
                 'enum', 4,
 sub
-#line 170 "pidl/idl.yp"
+#line 232 "./../pidl/idl.yp"
 {{
-             "TYPE" => "ENUM", 
-                        "PROPERTIES" => $_[1],
-                        "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+               "TYPE" => "ENUM",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 46
+       [#Rule 47
                 'enum_elements', 1,
 sub
-#line 179 "pidl/idl.yp"
+#line 243 "./../pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 47
+       [#Rule 48
                 'enum_elements', 3,
 sub
-#line 180 "pidl/idl.yp"
+#line 245 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
-       [#Rule 48
+       [#Rule 49
                 'enum_element', 1, undef
        ],
-       [#Rule 49
+       [#Rule 50
                 'enum_element', 3,
 sub
-#line 184 "pidl/idl.yp"
+#line 251 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 50
+       [#Rule 51
                 'bitmap_body', 3,
 sub
-#line 187 "pidl/idl.yp"
+#line 255 "./../pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 51
+       [#Rule 52
                 'opt_bitmap_body', 0, undef
        ],
-       [#Rule 52
+       [#Rule 53
                 'opt_bitmap_body', 1, undef
        ],
-       [#Rule 53
+       [#Rule 54
                 'bitmap', 4,
 sub
-#line 190 "pidl/idl.yp"
+#line 266 "./../pidl/idl.yp"
 {{
-             "TYPE" => "BITMAP", 
-                    "PROPERTIES" => $_[1],
-                        "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+               "TYPE" => "BITMAP",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 54
+       [#Rule 55
                 'bitmap_elements', 1,
 sub
-#line 199 "pidl/idl.yp"
+#line 277 "./../pidl/idl.yp"
 { [ $_[1] ] }
        ],
-       [#Rule 55
+       [#Rule 56
                 'bitmap_elements', 3,
 sub
-#line 200 "pidl/idl.yp"
+#line 279 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[3]); $_[1] }
        ],
-       [#Rule 56
+       [#Rule 57
                 'opt_bitmap_elements', 0, undef
        ],
-       [#Rule 57
+       [#Rule 58
                 'opt_bitmap_elements', 1, undef
        ],
-       [#Rule 58
+       [#Rule 59
                 'bitmap_element', 3,
 sub
-#line 205 "pidl/idl.yp"
+#line 289 "./../pidl/idl.yp"
 { "$_[1] ( $_[3] )" }
        ],
-       [#Rule 59
+       [#Rule 60
                 'struct_body', 3,
 sub
-#line 208 "pidl/idl.yp"
+#line 293 "./../pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 60
+       [#Rule 61
                 'opt_struct_body', 0, undef
        ],
-       [#Rule 61
+       [#Rule 62
                 'opt_struct_body', 1, undef
        ],
-       [#Rule 62
+       [#Rule 63
                 'struct', 4,
 sub
-#line 212 "pidl/idl.yp"
+#line 304 "./../pidl/idl.yp"
 {{
-             "TYPE" => "STRUCT", 
-                        "PROPERTIES" => $_[1],
-                        "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+               "TYPE" => "STRUCT",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 63
+       [#Rule 64
                 'empty_element', 2,
 sub
-#line 221 "pidl/idl.yp"
+#line 316 "./../pidl/idl.yp"
 {{
-                "NAME" => "",
-                "TYPE" => "EMPTY",
-                "PROPERTIES" => $_[1],
-                "POINTERS" => 0,
-                "ARRAY_LEN" => [],
-                "FILE" => $_[0]->YYData->{FILE},
-                "LINE" => $_[0]->YYData->{LINE},
-        }}
+               "NAME" => "",
+               "TYPE" => "EMPTY",
+               "PROPERTIES" => $_[1],
+               "POINTERS" => 0,
+               "ARRAY_LEN" => [],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 64
+       [#Rule 65
                 'base_or_empty', 2, undef
        ],
-       [#Rule 65
+       [#Rule 66
                 'base_or_empty', 1, undef
        ],
-       [#Rule 66
+       [#Rule 67
                 'optional_base_element', 2,
 sub
-#line 235 "pidl/idl.yp"
+#line 333 "./../pidl/idl.yp"
 { $_[2]->{PROPERTIES} = FlattenHash([$_[1],$_[2]->{PROPERTIES}]); $_[2] }
        ],
-       [#Rule 67
+       [#Rule 68
                 'union_elements', 0, undef
        ],
-       [#Rule 68
+       [#Rule 69
                 'union_elements', 2,
 sub
-#line 240 "pidl/idl.yp"
+#line 339 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
-       [#Rule 69
+       [#Rule 70
                 'union_body', 3,
 sub
-#line 243 "pidl/idl.yp"
+#line 343 "./../pidl/idl.yp"
 { $_[2] }
        ],
-       [#Rule 70
+       [#Rule 71
                 'opt_union_body', 0, undef
        ],
-       [#Rule 71
+       [#Rule 72
                 'opt_union_body', 1, undef
        ],
-       [#Rule 72
+       [#Rule 73
                 'union', 4,
 sub
-#line 247 "pidl/idl.yp"
+#line 354 "./../pidl/idl.yp"
 {{
-             "TYPE" => "UNION", 
-                        "PROPERTIES" => $_[1],
-                    "NAME" => $_[3],
-                    "ELEMENTS" => $_[4]
-        }}
+               "TYPE" => "UNION",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[3],
+               "ELEMENTS" => $_[4],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 73
+       [#Rule 74
                 'base_element', 5,
 sub
-#line 256 "pidl/idl.yp"
+#line 366 "./../pidl/idl.yp"
 {{
-                          "NAME" => $_[4],
-                          "TYPE" => $_[2],
-                          "PROPERTIES" => $_[1],
-                          "POINTERS" => $_[3],
-                          "ARRAY_LEN" => $_[5],
-                      "FILE" => $_[0]->YYData->{FILE},
-                      "LINE" => $_[0]->YYData->{LINE},
-              }}
+               "NAME" => $_[4],
+               "TYPE" => $_[2],
+               "PROPERTIES" => $_[1],
+               "POINTERS" => $_[3],
+               "ARRAY_LEN" => $_[5],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
        ],
-       [#Rule 74
+       [#Rule 75
                 'pointers', 0,
 sub
-#line 270 "pidl/idl.yp"
+#line 379 "./../pidl/idl.yp"
 { 0 }
        ],
-       [#Rule 75
+       [#Rule 76
                 'pointers', 2,
 sub
-#line 271 "pidl/idl.yp"
+#line 381 "./../pidl/idl.yp"
 { $_[1]+1 }
        ],
-       [#Rule 76
+       [#Rule 77
+                'pipe', 3,
+sub
+#line 386 "./../pidl/idl.yp"
+{{
+               "TYPE" => "PIPE",
+               "PROPERTIES" => $_[1],
+               "NAME" => $_[4],
+               "DATA" => $_[3],
+               "FILE" => $_[0]->YYData->{FILE},
+               "LINE" => $_[0]->YYData->{LINE},
+       }}
+       ],
+       [#Rule 78
                 'element_list1', 0,
 sub
-#line 275 "pidl/idl.yp"
+#line 398 "./../pidl/idl.yp"
 { [] }
        ],
-       [#Rule 77
+       [#Rule 79
                 'element_list1', 3,
 sub
-#line 276 "pidl/idl.yp"
+#line 400 "./../pidl/idl.yp"
 { push(@{$_[1]}, $_[2]); $_[1] }
        ],
-       [#Rule 78
+       [#Rule 80
+                'optional_const', 0, undef
+       ],
+       [#Rule 81
+                'optional_const', 1, undef
+       ],
+       [#Rule 82
                 'element_list2', 0, undef
        ],
-       [#Rule 79
+       [#Rule 83
                 'element_list2', 1, undef
        ],
-       [#Rule 80
-                'element_list2', 1,
+       [#Rule 84
+                'element_list2', 2,
 sub
-#line 282 "pidl/idl.yp"
-{ [ $_[1] ] }
+#line 414 "./../pidl/idl.yp"
+{ [ $_[2] ] }
        ],
-       [#Rule 81
-                'element_list2', 3,
+       [#Rule 85
+                'element_list2', 4,
 sub
-#line 283 "pidl/idl.yp"
-{ push(@{$_[1]}, $_[3]); $_[1] }
+#line 416 "./../pidl/idl.yp"
+{ push(@{$_[1]}, $_[4]); $_[1] }
        ],
-       [#Rule 82
+       [#Rule 86
                 'array_len', 0, undef
        ],
-       [#Rule 83
+       [#Rule 87
                 'array_len', 3,
 sub
-#line 288 "pidl/idl.yp"
+#line 422 "./../pidl/idl.yp"
 { push(@{$_[3]}, "*"); $_[3] }
        ],
-       [#Rule 84
+       [#Rule 88
                 'array_len', 4,
 sub
-#line 289 "pidl/idl.yp"
+#line 424 "./../pidl/idl.yp"
 { push(@{$_[4]}, "$_[2]"); $_[4] }
        ],
-       [#Rule 85
+       [#Rule 89
                 'property_list', 0, undef
        ],
-       [#Rule 86
+       [#Rule 90
                 'property_list', 4,
 sub
-#line 295 "pidl/idl.yp"
+#line 430 "./../pidl/idl.yp"
 { FlattenHash([$_[1],$_[3]]); }
        ],
-       [#Rule 87
+       [#Rule 91
                 'properties', 1,
 sub
-#line 298 "pidl/idl.yp"
+#line 434 "./../pidl/idl.yp"
 { $_[1] }
        ],
-       [#Rule 88
+       [#Rule 92
                 'properties', 3,
 sub
-#line 299 "pidl/idl.yp"
+#line 436 "./../pidl/idl.yp"
 { FlattenHash([$_[1], $_[3]]); }
        ],
-       [#Rule 89
+       [#Rule 93
                 'property', 1,
 sub
-#line 302 "pidl/idl.yp"
+#line 440 "./../pidl/idl.yp"
 {{ "$_[1]" => "1"     }}
        ],
-       [#Rule 90
+       [#Rule 94
                 'property', 4,
 sub
-#line 303 "pidl/idl.yp"
+#line 442 "./../pidl/idl.yp"
 {{ "$_[1]" => "$_[3]" }}
        ],
-       [#Rule 91
+       [#Rule 95
                 'commalisttext', 1, undef
        ],
-       [#Rule 92
+       [#Rule 96
                 'commalisttext', 3,
 sub
-#line 308 "pidl/idl.yp"
+#line 448 "./../pidl/idl.yp"
 { "$_[1],$_[3]" }
        ],
-       [#Rule 93
+       [#Rule 97
                 'anytext', 0,
 sub
-#line 312 "pidl/idl.yp"
+#line 453 "./../pidl/idl.yp"
 { "" }
        ],
-       [#Rule 94
+       [#Rule 98
                 'anytext', 1, undef
        ],
-       [#Rule 95
+       [#Rule 99
                 'anytext', 1, undef
        ],
-       [#Rule 96
+       [#Rule 100
                 'anytext', 1, undef
        ],
-       [#Rule 97
+       [#Rule 101
                 'anytext', 3,
 sub
-#line 314 "pidl/idl.yp"
+#line 461 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 98
+       [#Rule 102
                 'anytext', 3,
 sub
-#line 315 "pidl/idl.yp"
+#line 463 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 99
+       [#Rule 103
                 'anytext', 3,
 sub
-#line 316 "pidl/idl.yp"
+#line 465 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 100
+       [#Rule 104
                 'anytext', 3,
 sub
-#line 317 "pidl/idl.yp"
+#line 467 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 101
+       [#Rule 105
                 'anytext', 3,
 sub
-#line 318 "pidl/idl.yp"
+#line 469 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 102
+       [#Rule 106
                 'anytext', 3,
 sub
-#line 319 "pidl/idl.yp"
+#line 471 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 103
+       [#Rule 107
                 'anytext', 3,
 sub
-#line 320 "pidl/idl.yp"
+#line 473 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 104
+       [#Rule 108
                 'anytext', 3,
 sub
-#line 321 "pidl/idl.yp"
+#line 475 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 105
+       [#Rule 109
                 'anytext', 3,
 sub
-#line 322 "pidl/idl.yp"
+#line 477 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 106
+       [#Rule 110
                 'anytext', 3,
 sub
-#line 323 "pidl/idl.yp"
+#line 479 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 107
+       [#Rule 111
                 'anytext', 3,
 sub
-#line 324 "pidl/idl.yp"
+#line 481 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 108
+       [#Rule 112
                 'anytext', 3,
 sub
-#line 325 "pidl/idl.yp"
+#line 483 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 109
+       [#Rule 113
                 'anytext', 3,
 sub
-#line 326 "pidl/idl.yp"
+#line 485 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]" }
        ],
-       [#Rule 110
+       [#Rule 114
                 'anytext', 5,
 sub
-#line 327 "pidl/idl.yp"
+#line 487 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
        ],
-       [#Rule 111
+       [#Rule 115
                 'anytext', 5,
 sub
-#line 328 "pidl/idl.yp"
+#line 489 "./../pidl/idl.yp"
 { "$_[1]$_[2]$_[3]$_[4]$_[5]" }
        ],
-       [#Rule 112
+       [#Rule 116
                 'identifier', 1, undef
        ],
-       [#Rule 113
-                'optional_identifier', 1, undef
-       ],
-       [#Rule 114
+       [#Rule 117
                 'optional_identifier', 0, undef
        ],
-       [#Rule 115
+       [#Rule 118
+                'optional_identifier', 1, undef
+       ],
+       [#Rule 119
                 'constant', 1, undef
        ],
-       [#Rule 116
+       [#Rule 120
                 'text', 1,
 sub
-#line 342 "pidl/idl.yp"
+#line 507 "./../pidl/idl.yp"
 { "\"$_[1]\"" }
        ],
-       [#Rule 117
+       [#Rule 121
                 'optional_semicolon', 0, undef
        ],
-       [#Rule 118
+       [#Rule 122
                 'optional_semicolon', 1, undef
        ]
 ],
@@ -2389,58 +2474,63 @@ sub
     bless($self,$class);
 }
 
-#line 353 "pidl/idl.yp"
+#line 519 "./../pidl/idl.yp"
 
 
 use Parse::Pidl qw(error);
 
 #####################################################################
 # flatten an array of hashes into a single hash
-sub FlattenHash($) 
-{ 
-    my $a = shift;
-    my %b;
-    for my $d (@{$a}) {
-       for my $k (keys %{$d}) {
-           $b{$k} = $d->{$k};
+sub FlattenHash($)
+{
+       my $a = shift;
+       my %b;
+       for my $d (@{$a}) {
+               for my $k (keys %{$d}) {
+               $b{$k} = $d->{$k};
+               }
        }
-    }
-    return \%b;
+       return \%b;
 }
 
-
-
 #####################################################################
 # traverse a perl data structure removing any empty arrays or
 # hashes and any hash elements that map to undef
 sub CleanData($)
 {
-    sub CleanData($);
-    my($v) = shift;
+       sub CleanData($);
+       my($v) = shift;
+
        return undef if (not defined($v));
-    if (ref($v) eq "ARRAY") {
-       foreach my $i (0 .. $#{$v}) {
-           CleanData($v->[$i]);
-       }
-       # this removes any undefined elements from the array
-       @{$v} = grep { defined $_ } @{$v};
-    } elsif (ref($v) eq "HASH") {
-       foreach my $x (keys %{$v}) {
-           CleanData($v->{$x});
-           if (!defined $v->{$x}) { delete($v->{$x}); next; }
+
+       if (ref($v) eq "ARRAY") {
+               foreach my $i (0 .. $#{$v}) {
+                       CleanData($v->[$i]);
+               }
+               # this removes any undefined elements from the array
+               @{$v} = grep { defined $_ } @{$v};
+       } elsif (ref($v) eq "HASH") {
+               foreach my $x (keys %{$v}) {
+                       CleanData($v->{$x});
+                       if (!defined $v->{$x}) {
+                               delete($v->{$x});
+                               next;
+                       }
+               }
        }
-    }
+
        return $v;
 }
 
 sub _Error {
-    if (exists $_[0]->YYData->{ERRMSG}) {
+       if (exists $_[0]->YYData->{ERRMSG}) {
                error($_[0]->YYData, $_[0]->YYData->{ERRMSG});
                delete $_[0]->YYData->{ERRMSG};
                return;
        }
+
        my $last_token = $_[0]->YYData->{LAST_TOKEN};
-       
+
        error($_[0]->YYData, "Syntax error near '$last_token'");
 }
 
@@ -2448,7 +2538,7 @@ sub _Lexer($)
 {
        my($parser)=shift;
 
-    $parser->YYData->{INPUT} or return('',undef);
+       $parser->YYData->{INPUT} or return('',undef);
 
 again:
        $parser->YYData->{INPUT} =~ s/^[ \t]*//;
@@ -2475,18 +2565,19 @@ again:
                }
                if (s/^\"(.*?)\"//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-                       return('TEXT',$1); 
+                       return('TEXT',$1);
                }
                if (s/^(\d+)(\W|$)/$2/) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-                       return('CONSTANT',$1); 
+                       return('CONSTANT',$1);
                }
                if (s/^([\w_]+)//) {
                        $parser->YYData->{LAST_TOKEN} = $1;
-                       if ($1 =~ 
-                           /^(coclass|interface|const|typedef|union|cpp_quote
-                             |struct|enum|bitmap|void|unsigned|signed|import|include
-                                 |importlib)$/x) {
+                       if ($1 =~
+                           /^(coclass|interface|import|importlib
+                             |include|cpp_quote|typedef
+                             |union|struct|enum|bitmap|pipe
+                             |void|const|unsigned|signed)$/x) {
                                return $1;
                        }
                        return('IDENTIFIER',$1);
@@ -2504,10 +2595,10 @@ sub parse_string
 
        my $self = new Parse::Pidl::IDL;
 
-    $self->YYData->{FILE} = $filename;
-    $self->YYData->{INPUT} = $data;
-    $self->YYData->{LINE} = 0;
-    $self->YYData->{LAST_TOKEN} = "NONE";
+       $self->YYData->{FILE} = $filename;
+       $self->YYData->{INPUT} = $data;
+       $self->YYData->{LINE} = 0;
+       $self->YYData->{LAST_TOKEN} = "NONE";
 
        my $idl = $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
 
index 8440f0183d9d7e4e003ef01c6c5e6cef208e0223..a36f6380924977dd1285e0099e7ae16e988fc0c0 100644 (file)
@@ -928,7 +928,7 @@ my %property_list = (
        "bitmap64bit"           => ["BITMAP"],
 
        # array
-       "range"                 => ["ELEMENT"],
+       "range"                 => ["ELEMENT", "PIPE"],
        "size_is"               => ["ELEMENT"],
        "string"                => ["ELEMENT"],
        "noheader"              => ["ELEMENT"],
@@ -1119,6 +1119,18 @@ sub ValidUnion($)
        }
 }
 
+#####################################################################
+# validate a pipe
+sub ValidPipe($)
+{
+       my ($pipe) = @_;
+       my $data = $pipe->{DATA};
+
+       ValidProperties($pipe, "PIPE");
+
+       fatal($pipe, $pipe->{NAME} . ": 'pipe' is not yet supported by pidl");
+}
+
 #####################################################################
 # parse a typedef
 sub ValidTypedef($)
@@ -1164,7 +1176,8 @@ sub ValidType($)
                STRUCT => \&ValidStruct,
                UNION => \&ValidUnion,
                ENUM => \&ValidEnum,
-               BITMAP => \&ValidBitmap
+               BITMAP => \&ValidBitmap,
+               PIPE => \&ValidPipe
        }->{$t->{TYPE}}->($t);
 }
 
@@ -1206,7 +1219,8 @@ sub ValidInterface($)
                 $d->{TYPE} eq "STRUCT" or
                 $d->{TYPE} eq "UNION" or 
                 $d->{TYPE} eq "ENUM" or
-                $d->{TYPE} eq "BITMAP") && ValidType($d);
+                $d->{TYPE} eq "BITMAP" or
+                $d->{TYPE} eq "PIPE") && ValidType($d);
        }
 
 }
index ecfbcd0b9c3fb818bde88cc4db2553930d46bc45..650e2081c75c342a5a0357cfd06100ee126bfca9 100644 (file)
@@ -1138,6 +1138,11 @@ WINBINDD_OBJ1 = \
                winbindd/winbindd_ads.o   \
                winbindd/winbindd_passdb.o \
                winbindd/winbindd_dual.o  \
+               winbindd/winbindd_dual_ndr.o  \
+               winbindd/winbindd_dual_srv.o  \
+               librpc/gen_ndr/cli_wbint.o \
+               librpc/gen_ndr/srv_wbint.o \
+               librpc/gen_ndr/ndr_wbint.o \
                winbindd/winbindd_async.o \
                winbindd/winbindd_creds.o \
                winbindd/winbindd_cred_cache.o \
@@ -1147,6 +1152,29 @@ WINBINDD_OBJ1 = \
                winbindd/winbindd_locator.o \
                winbindd/winbindd_ndr.o \
                winbindd/wb_ping.o \
+               winbindd/wb_lookupsid.o \
+               winbindd/wb_lookupname.o \
+               winbindd/wb_sid2uid.o \
+               winbindd/wb_sid2gid.o \
+               winbindd/wb_uid2sid.o \
+               winbindd/wb_gid2sid.o \
+               winbindd/wb_queryuser.o \
+               winbindd/wb_lookupuseraliases.o \
+               winbindd/wb_lookupusergroups.o \
+               winbindd/wb_getpwsid.o \
+               winbindd/wb_gettoken.o \
+               winbindd/winbindd_lookupsid.o \
+               winbindd/winbindd_lookupname.o \
+               winbindd/winbindd_sid_to_uid.o \
+               winbindd/winbindd_sid_to_gid.o \
+               winbindd/winbindd_uid_to_sid.o \
+               winbindd/winbindd_gid_to_sid.o \
+               winbindd/winbindd_getpwsid.o \
+               winbindd/winbindd_getpwnam.o \
+               winbindd/winbindd_getpwuid.o \
+               winbindd/winbindd_getsidaliases.o \
+               winbindd/winbindd_getuserdomgroups.o \
+               winbindd/winbindd_getgroups.o \
                auth/token_util.o \
                ../nsswitch/libwbclient/wb_reqtrans.o \
                smbd/connection.o
@@ -1322,7 +1350,8 @@ samba3-idl::
         srcdir="$(srcdir)" ../librpc/build_idl.sh ../librpc/idl/*.idl
        @PIDL_OUTPUTDIR="librpc/gen_ndr" PIDL_ARGS="$(PIDL_ARGS)" CPP="$(CPP)" PIDL="../pidl/pidl" \
         srcdir="$(srcdir)" $(srcdir)/script/build_idl.sh \
-               librpc/idl/messaging.idl librpc/idl/libnetapi.idl librpc/idl/notify.idl
+               librpc/idl/messaging.idl librpc/idl/libnetapi.idl librpc/idl/notify.idl \
+               librpc/idl/wbint.idl
 
 #####################################################################
 
index 8fb240f26c6b89398a723976f17e3413c2c02ddf..2d82e6e57e274705c7f5e874d9eeb1887a90fb39 100644 (file)
@@ -207,7 +207,11 @@ typedef int ber_int_t;
 #endif
 
 #ifndef ENOATTR
+#if defined(ENODATA)
 #define ENOATTR ENODATA
+#else
+#define ENOATTR ENOENT
+#endif
 #endif
 
 /* mutually exclusive (SuSE 8.2) */
@@ -1112,4 +1116,7 @@ void in6_addr_to_sockaddr_storage(struct sockaddr_storage *ss,
                                  struct in6_addr ip);
 #endif
 
+/* samba3 doesn't use uwrap yet */
+#define uwrap_enabled() 0
+
 #endif /* _INCLUDES_H */
index 00cfd6129e6cb70c33c006a943454408513d9a50..e8bfe8efae6075360641ecbc7a1913e5c695ccff 100644 (file)
@@ -6144,9 +6144,7 @@ connection_struct *conn_new(struct smbd_server_connection *sconn);
 bool conn_close_all(struct smbd_server_connection *sconn);
 bool conn_idle_all(struct smbd_server_connection *sconn, time_t t);
 void conn_clear_vuid_caches(struct smbd_server_connection *sconn, uint16 vuid);
-void conn_free_internal(connection_struct *conn);
-void conn_free(struct smbd_server_connection *sconn,
-              connection_struct *conn);
+void conn_free(connection_struct *conn);
 void msg_force_tdis(struct messaging_context *msg,
                    void *private_data,
                    uint32_t msg_type,
@@ -6183,14 +6181,15 @@ bool make_dir_struct(TALLOC_CTX *ctx,
                        uint32 mode,
                        time_t date,
                        bool uc);
-void init_dptrs(void);
-char *dptr_path(int key);
-char *dptr_wcard(int key);
-uint16 dptr_attr(int key);
-void dptr_close(int *key);
+bool init_dptrs(struct smbd_server_connection *sconn);
+char *dptr_path(struct smbd_server_connection *sconn, int key);
+char *dptr_wcard(struct smbd_server_connection *sconn, int key);
+uint16 dptr_attr(struct smbd_server_connection *sconn, int key);
+void dptr_close(struct smbd_server_connection *sconn, int *key);
 void dptr_closecnum(connection_struct *conn);
 void dptr_idlecnum(connection_struct *conn);
-void dptr_closepath(char *path,uint16 spid);
+void dptr_closepath(struct smbd_server_connection *sconn,
+                   char *path,uint16 spid);
 NTSTATUS dptr_create(connection_struct *conn, const char *path, bool old_handle, bool expect_close,uint16 spid,
                const char *wcard, bool wcard_has_wild, uint32 attr, struct dptr_struct **dptr_ret);
 int dptr_CloseDir(struct dptr_struct *dptr);
@@ -6205,12 +6204,15 @@ char *dptr_ReadDirName(TALLOC_CTX *ctx,
 bool dptr_SearchDir(struct dptr_struct *dptr, const char *name, long *poffset, SMB_STRUCT_STAT *pst);
 void dptr_DirCacheAdd(struct dptr_struct *dptr, const char *name, long offset);
 void dptr_init_search_op(struct dptr_struct *dptr);
-bool dptr_fill(char *buf1,unsigned int key);
-struct dptr_struct *dptr_fetch(char *buf,int *num);
-struct dptr_struct *dptr_fetch_lanman2(int dptr_num);
+bool dptr_fill(struct smbd_server_connection *sconn,
+              char *buf1,unsigned int key);
+struct dptr_struct *dptr_fetch(struct smbd_server_connection *sconn,
+                              char *buf,int *num);
+struct dptr_struct *dptr_fetch_lanman2(struct smbd_server_connection *sconn,
+                                      int dptr_num);
 bool dir_check_ftype(connection_struct *conn, uint32 mode, uint32 dirtype);
 bool get_dir_entry(TALLOC_CTX *ctx,
-               connection_struct *conn,
+               struct dptr_struct *dirptr,
                const char *mask,
                uint32 dirtype,
                char **pp_fname_out,
@@ -6745,7 +6747,8 @@ int chmod_acl(connection_struct *conn, const char *name, mode_t mode);
 int inherit_access_posix_acl(connection_struct *conn, const char *inherit_from_dir,
                       const char *name, mode_t mode);
 int fchmod_acl(files_struct *fsp, mode_t mode);
-bool set_unix_posix_default_acl(connection_struct *conn, const char *fname, SMB_STRUCT_STAT *psbuf,
+bool set_unix_posix_default_acl(connection_struct *conn, const char *fname,
+                               const SMB_STRUCT_STAT *psbuf,
                                uint16 num_def_acls, const char *pdata);
 bool set_unix_posix_acl(connection_struct *conn, files_struct *fsp, const char *fname, uint16 num_acls, const char *pdata);
 SEC_DESC *get_nt_acl_no_snum( TALLOC_CTX *ctx, const char *fname);
@@ -6983,8 +6986,7 @@ connection_struct *make_connection(struct smbd_server_connection *sconn,
                                   const char *service_in, DATA_BLOB password,
                                   const char *pdev, uint16 vuid,
                                   NTSTATUS *status);
-void close_cnum(struct smbd_server_connection *sconn,
-               connection_struct *conn, uint16 vuid);
+void close_cnum(connection_struct *conn, uint16 vuid);
 
 /* The following definitions come from smbd/session.c  */
 
index e2d670fa04a96c35325f1fa6e3c643e43c98332d..b53735d36d0767505699b771ff85420fae46d11a 100644 (file)
@@ -546,16 +546,15 @@ struct share_iterator {
 
 typedef struct connection_struct {
        struct connection_struct *next, *prev;
+       struct smbd_server_connection *sconn; /* can be NULL */
        unsigned cnum; /* an index passed over the wire */
        struct share_params *params;
        bool force_user;
        struct vuid_cache vuid_cache;
-       struct dptr_struct *dirptr;
        bool printer;
        bool ipc;
        bool read_only; /* Attributes for the current user of the share. */
        bool admin_user; /* Attributes for the current user of the share. */
-       char *dirpath;
        char *connectpath;
        char *origpath;
 
index 5e623f474abcd8e36fd8335385243be3f267ae2c..f753ffd5348a66eada1ac4d061b7d7110b1be6ab 100644 (file)
@@ -32,7 +32,7 @@ struct bitmap *bitmap_allocate(int n)
        bm = SMB_MALLOC_P(struct bitmap);
 
        if (!bm) return NULL;
-       
+
        bm->n = n;
        bm->b = SMB_MALLOC_ARRAY(uint32, (n+31)/32);
        if (!bm->b) {
@@ -70,7 +70,7 @@ struct bitmap *bitmap_talloc(TALLOC_CTX *mem_ctx, int n)
        bm = TALLOC_P(mem_ctx, struct bitmap);
 
        if (!bm) return NULL;
-       
+
        bm->n = n;
        bm->b = TALLOC_ARRAY(mem_ctx, uint32, (n+31)/32);
        if (!bm->b) {
index 22d85c873d3399c1791c5af15df9a216ea97eb16..fc35361cac7c22adfcecc1b9289646541b38061a 100644 (file)
@@ -2,17 +2,17 @@
    Unix SMB/CIFS implementation.
    Low-level connections.tdb access functions
    Copyright (C) Volker Lendecke 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/>.
 */
index 449e049ffa26093cf254e0c5af639aa712967b99..0af420412b5ec566ceb57bbf5310c1a753e1f5a5 100644 (file)
@@ -3,17 +3,17 @@
    Samba internal messaging functions
    Copyright (C) 2007 by Volker Lendecke
    Copyright (C) 2007 by Andrew Tridgell
-   
+
    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/>.
 */
@@ -36,7 +36,7 @@ struct ctdbd_connection {
        uint64 rand_srvid;
        struct packet_context *pkt;
        struct fd_event *fde;
-       
+
        void (*release_ip_handler)(const char *ip_addr, void *private_data);
        void *release_ip_priv;
 };
@@ -339,7 +339,7 @@ static NTSTATUS ctdb_read_req(struct ctdbd_connection *conn, uint32 reqid,
                                  (long long unsigned)msg->srvid));
                        goto next_pkt;
                }
-               
+
                if ((conn->release_ip_handler != NULL)
                    && (msg->srvid == CTDB_SRVID_RELEASE_IP)) {
                        /* must be dispatched immediately */
@@ -375,7 +375,7 @@ static NTSTATUS ctdb_read_req(struct ctdbd_connection *conn, uint32 reqid,
                TALLOC_FREE(hdr);
 
                msg_state->msg_ctx = conn->msg_ctx;
-               
+
                /*
                 * We're waiting for a call reply, but an async message has
                 * crossed. Defer dispatching to the toplevel event loop.
@@ -391,7 +391,7 @@ static NTSTATUS ctdb_read_req(struct ctdbd_connection *conn, uint32 reqid,
                        TALLOC_FREE(hdr);
                        goto next_pkt;
                }
-               
+
                goto next_pkt;
        }
 
@@ -541,7 +541,6 @@ static NTSTATUS ctdb_handle_message(uint8_t *buf, size_t length,
                TALLOC_FREE(buf);
 
                return NT_STATUS_OK;
-               
        }
 
        /* only messages to our pid or the broadcast are valid here */
@@ -895,7 +894,7 @@ NTSTATUS ctdbd_migrate(struct ctdbd_connection *conn, uint32 db_id,
        NTSTATUS status;
 
        ZERO_STRUCT(req);
-       
+
        req.hdr.length = offsetof(struct ctdb_req_call, data) + key.dsize;
        req.hdr.ctdb_magic   = CTDB_MAGIC;
        req.hdr.ctdb_version = CTDB_VERSION;
@@ -957,7 +956,7 @@ NTSTATUS ctdbd_fetch(struct ctdbd_connection *conn, uint32 db_id,
        NTSTATUS status;
 
        ZERO_STRUCT(req);
-       
+
        req.hdr.length = offsetof(struct ctdb_req_call, data) + key.dsize;
        req.hdr.ctdb_magic   = CTDB_MAGIC;
        req.hdr.ctdb_version = CTDB_VERSION;
index 4833b96c5f643ed21ed8f09221f094b48a19a38d..c96801a72b2961f6e3e3800f53e9b8d4b9391021 100644 (file)
@@ -1449,7 +1449,7 @@ int smbldap_search_paged(struct smbldap_state *ldap_state,
                goto done;
        }
 
-       DEBUG(3,("smbldap_search_paged: search was successfull\n"));
+       DEBUG(3,("smbldap_search_paged: search was successful\n"));
 
        rc = ldap_parse_result(ldap_state->ldap_struct, *res, NULL, NULL, 
                               NULL, NULL, &rcontrols,  0);
index 5b3d94dabe3b640af76f5fa19ac89c04fa5b8f5b..1d210a1e579921b0e0cc51cfdfa6b70f1efdf2e5 100644 (file)
@@ -4,17 +4,17 @@
    Copyright (C) Andrew Tridgell   1992-1998
    Copyright (C) Rafal Szczesniak  2002
    Copyright (C) Michael Adam      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/>.
 */
@@ -91,7 +91,7 @@ int tdb_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval,
                                   int timeout)
 {
        TDB_DATA key = string_term_tdb_data(keyval);
-       
+
        return tdb_chainlock_with_timeout(tdb, key, timeout);
 }
 
@@ -102,7 +102,7 @@ int tdb_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval,
 int tdb_read_lock_bystring_with_timeout(TDB_CONTEXT *tdb, const char *keyval, unsigned int timeout)
 {
        TDB_DATA key = string_term_tdb_data(keyval);
-       
+
        return tdb_chainlock_with_timeout_internal(tdb, key, timeout, F_RDLCK);
 }
 
@@ -113,7 +113,7 @@ int tdb_trans_store_bystring(TDB_CONTEXT *tdb, const char *keystr,
                             TDB_DATA data, int flags)
 {
        TDB_DATA key = string_term_tdb_data(keystr);
-       
+
        return tdb_trans_store(tdb, key, data, flags);
 }
 
@@ -202,7 +202,7 @@ static size_t tdb_pack_va(uint8 *buf, int bufsize, const char *fmt, va_list ap)
 
        DEBUG(18,("tdb_pack_va(%s, %d) -> %d\n", 
                 fmt0, bufsize0, (int)PTR_DIFF(buf, buf0)));
-       
+
        return PTR_DIFF(buf, buf0);
 }
 
index df095b9e91c1b84c81953f95255c446110f29f38..0c904ac569e4c00aca6b23fe88a1c27b9930e891 100644 (file)
@@ -3,17 +3,17 @@
    Winbind Utility functions
 
    Copyright (C) Gerald (Jerry) Carter   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/>.
 */
@@ -113,7 +113,7 @@ bool winbind_lookup_sid(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
 
        wbcFreeMemory(domain_name);
        wbcFreeMemory(account_name);
-       
+
        if ((domain && !*domain) || (name && !*name)) {         
                DEBUG(0,("winbind_lookup_sid: talloc() failed!\n"));
                return false;
@@ -200,7 +200,7 @@ wbcErr wb_is_trusted_domain(const char *domain)
 {
        wbcErr result;
        struct wbcDomainInfo *info = NULL;
-       
+
        result = wbcDomainInfo(domain, &info);
 
        if (WBC_ERROR_IS_OK(result)) {
@@ -224,15 +224,15 @@ bool winbind_lookup_rids(TALLOC_CTX *mem_ctx,
        struct wbcDomainSid dom_sid;
        wbcErr ret;
        int i;  
-       
+
        memcpy(&dom_sid, domain_sid, sizeof(struct wbcDomainSid));
-       
+
        ret = wbcLookupRids(&dom_sid, num_rids, rids,
                            &dom_name, &namelist, &name_types);
        if (ret != WBC_ERR_SUCCESS) {           
                return false;
        }       
-       
+
        *domain_name = talloc_strdup(mem_ctx, dom_name);
        *names       = TALLOC_ARRAY(mem_ctx, const char*, num_rids);
        *types       = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_rids);
@@ -245,7 +245,7 @@ bool winbind_lookup_rids(TALLOC_CTX *mem_ctx,
        wbcFreeMemory(CONST_DISCARD(char*, dom_name));
        wbcFreeMemory(namelist);
        wbcFreeMemory(name_types);
-       
+
        return true;    
 }
 
@@ -254,9 +254,9 @@ bool winbind_lookup_rids(TALLOC_CTX *mem_ctx,
 bool winbind_allocate_uid(uid_t *uid)
 {
        wbcErr ret;
-       
+
        ret = wbcAllocateUid(uid);
-       
+
        return (ret == WBC_ERR_SUCCESS);
 }
 
@@ -265,9 +265,9 @@ bool winbind_allocate_uid(uid_t *uid)
 bool winbind_allocate_gid(gid_t *gid)
 {
        wbcErr ret;
-       
+
        ret = wbcAllocateGid(gid);
-       
+
        return (ret == WBC_ERR_SUCCESS);
 }
 
index b2c0bf8b870613f3ca4876b976beb67bde31b831..6676f02e947929d43a8f277c3c141240124a8027 100644 (file)
@@ -227,7 +227,7 @@ char **wins_srv_tags(void)
        /* yes, this is O(n^2) but n is very small */
        for (i=0;list[i];i++) {
                struct tagged_ip t_ip;
-               
+
                parse_ip(&t_ip, list[i]);
 
                /* see if we already have it */
@@ -313,7 +313,7 @@ struct in_addr wins_srv_ip_tag(const char *tag, struct in_addr src_ip)
                        return t_ip.ip;
                }
        }
-       
+
        /* they're all dead - try the first one until they revive */
        for (i=0; list[i]; i++) {
                parse_ip(&t_ip, list[i]);
diff --git a/source3/librpc/gen_ndr/cli_wbint.c b/source3/librpc/gen_ndr/cli_wbint.c
new file mode 100644 (file)
index 0000000..de6b345
--- /dev/null
@@ -0,0 +1,1647 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * client auto-generated by pidl. DO NOT MODIFY!
+ */
+
+#include "includes.h"
+#include "librpc/gen_ndr/cli_wbint.h"
+
+struct rpccli_wbint_Ping_state {
+       struct wbint_Ping orig;
+       struct wbint_Ping tmp;
+       TALLOC_CTX *out_mem_ctx;
+       NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
+};
+
+static void rpccli_wbint_Ping_done(struct tevent_req *subreq);
+
+struct tevent_req *rpccli_wbint_Ping_send(TALLOC_CTX *mem_ctx,
+                                         struct tevent_context *ev,
+                                         struct rpc_pipe_client *cli,
+                                         uint32_t _in_data /* [in]  */,
+                                         uint32_t *_out_data /* [out] [ref] */)
+{
+       struct tevent_req *req;
+       struct rpccli_wbint_Ping_state *state;
+       struct tevent_req *subreq;
+
+       req = tevent_req_create(mem_ctx, &state,
+                               struct rpccli_wbint_Ping_state);
+       if (req == NULL) {
+               return NULL;
+       }
+       state->out_mem_ctx = NULL;
+       state->dispatch_recv = cli->dispatch_recv;
+
+       /* In parameters */
+       state->orig.in.in_data = _in_data;
+
+       /* Out parameters */
+       state->orig.out.out_data = _out_data;
+
+       if (DEBUGLEVEL >= 10) {
+               NDR_PRINT_IN_DEBUG(wbint_Ping, &state->orig);
+       }
+
+       state->out_mem_ctx = talloc_named_const(state, 0,
+                            "rpccli_wbint_Ping_out_memory");
+       if (tevent_req_nomem(state->out_mem_ctx, req)) {
+               return tevent_req_post(req, ev);
+       }
+
+       /* make a temporary copy, that we pass to the dispatch function */
+       state->tmp = state->orig;
+
+       subreq = cli->dispatch_send(state, ev, cli,
+                                   &ndr_table_wbint,
+                                   NDR_WBINT_PING,
+                                   &state->tmp);
+       if (tevent_req_nomem(subreq, req)) {
+               return tevent_req_post(req, ev);
+       }
+       tevent_req_set_callback(subreq, rpccli_wbint_Ping_done, req);
+       return req;
+}
+
+static void rpccli_wbint_Ping_done(struct tevent_req *subreq)
+{
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct rpccli_wbint_Ping_state *state = tevent_req_data(
+               req, struct rpccli_wbint_Ping_state);
+       NTSTATUS status;
+       TALLOC_CTX *mem_ctx;
+
+       if (state->out_mem_ctx) {
+               mem_ctx = state->out_mem_ctx;
+       } else {
+               mem_ctx = state;
+       }
+
+       status = state->dispatch_recv(subreq, mem_ctx);
+       TALLOC_FREE(subreq);
+       if (!NT_STATUS_IS_OK(status)) {
+               tevent_req_nterror(req, status);
+               return;
+       }
+
+       /* Copy out parameters */
+       *state->orig.out.out_data = *state->tmp.out.out_data;
+
+       /* Reset temporary structure */
+       ZERO_STRUCT(state->tmp);
+
+       if (DEBUGLEVEL >= 10) {
+               NDR_PRINT_OUT_DEBUG(wbint_Ping, &state->orig);
+       }
+
+       tevent_req_done(req);
+}
+
+NTSTATUS rpccli_wbint_Ping_recv(struct tevent_req *req,
+                               TALLOC_CTX *mem_ctx)
+{
+       struct rpccli_wbint_Ping_state *state = tevent_req_data(
+               req, struct rpccli_wbint_Ping_state);
+       NTSTATUS status;
+
+       if (tevent_req_is_nterror(req, &status)) {
+               tevent_req_received(req);
+               return status;
+       }
+
+       /* Steal possbile out parameters to the callers context */
+       talloc_steal(mem_ctx, state->out_mem_ctx);
+
+       tevent_req_received(req);
+       return NT_STATUS_OK;
+}
+
+NTSTATUS rpccli_wbint_Ping(struct rpc_pipe_client *cli,
+                          TALLOC_CTX *mem_ctx,
+                          uint32_t in_data /* [in]  */,
+                          uint32_t *out_data /* [out] [ref] */)
+{
+       struct wbint_Ping r;
+       NTSTATUS status;
+
+       /* In parameters */
+       r.in.in_data = in_data;
+
+       if (DEBUGLEVEL >= 10) {
+               NDR_PRINT_IN_DEBUG(wbint_Ping, &r);
+       }
+
+       status = cli->dispatch(cli,
+                               mem_ctx,
+                               &ndr_table_wbint,
+                               NDR_WBINT_PING,
+                               &r);
+
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       if (DEBUGLEVEL >= 10) {
+               NDR_PRINT_OUT_DEBUG(wbint_Ping, &r);
+       }
+
+       if (NT_STATUS_IS_ERR(status)) {
+               return status;
+       }
+
+       /* Return variables */
+       *out_data = *r.out.out_data;
+
+       /* Return result */
+       return NT_STATUS_OK;
+}
+
+struct rpccli_wbint_LookupSid_state {
+       struct wbint_LookupSid orig;
+       struct wbint_LookupSid tmp;
+       TALLOC_CTX *out_mem_ctx;
+       NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
+};
+
+static void rpccli_wbint_LookupSid_done(struct tevent_req *subreq);
+
+struct tevent_req *rpccli_wbint_LookupSid_send(TALLOC_CTX *mem_ctx,
+                                              struct tevent_context *ev,
+                                              struct rpc_pipe_client *cli,
+                                              struct dom_sid *_sid /* [in] [ref] */,
+                                              enum lsa_SidType *_type /* [out] [ref] */,
+                                              const char **_domain /* [out] [ref,charset(UTF8)] */,
+                                              const char **_name /* [out] [ref,charset(UTF8)] */)
+{
+       struct tevent_req *req;
+       struct rpccli_wbint_LookupSid_state *state;
+       struct tevent_req *subreq;
+
+       req = tevent_req_create(mem_ctx, &state,
+                               struct rpccli_wbint_LookupSid_state);
+       if (req == NULL) {
+               return NULL;
+       }
+       state->out_mem_ctx = NULL;
+       state->dispatch_recv = cli->dispatch_recv;
+
+       /* In parameters */
+       state->orig.in.sid = _sid;
+
+       /* Out parameters */
+       state->orig.out.type = _type;
+       state->orig.out.domain = _domain;
+       state->orig.out.name = _name;
+
+       /* Result */
+       ZERO_STRUCT(state->orig.out.result);
+
+       if (DEBUGLEVEL >= 10) {
+               NDR_PRINT_IN_DEBUG(wbint_LookupSid, &state->orig);
+       }
+
+       state->out_mem_ctx = talloc_named_const(state, 0,
+                            "rpccli_wbint_LookupSid_out_memory");
+       if (tevent_req_nomem(state->out_mem_ctx, req)) {
+               return tevent_req_post(req, ev);
+       }
+
+       /* make a temporary copy, that we pass to the dispatch function */
+       state->tmp = state->orig;
+
+       subreq = cli->dispatch_send(state, ev, cli,
+                                   &ndr_table_wbint,
+                                   NDR_WBINT_LOOKUPSID,
+                                   &state->tmp);
+       if (tevent_req_nomem(subreq, req)) {
+               return tevent_req_post(req, ev);
+       }
+       tevent_req_set_callback(subreq, rpccli_wbint_LookupSid_done, req);
+       return req;
+}
+
+static void rpccli_wbint_LookupSid_done(struct tevent_req *subreq)
+{
+       struct tevent_req *req = tevent_req_callback_data(
+               subreq, struct tevent_req);
+       struct rpccli_wbint_LookupSid_state *state = tevent_req_data(
+               req, struct rpccli_wbint_LookupSid_state);
+       NTSTATUS status;
+       TALLOC_CTX *mem_ctx;
+
+       if (state->out_mem_ctx) {
+               mem_ctx = state->out_mem_ctx;
+       } else {
+               mem_ctx = state;
+       }
+
+       status = state->dispatch_recv(subreq, mem_ctx);
+       TALLOC_FREE(subreq);
+       if (!NT_STATUS_IS_OK(status)) {
+               tevent_req_nterror(req, status);
+               return;
+       }
+
+       /* Copy out parameters */
+       *state->orig.out.type = *state->tmp.out.type;
+       *state->orig.out.domain = *state->tmp.out.domain;
+       *state->orig.out.name = *state->tmp.out.name;
+
+       /* Copy result */
+       state->orig.out.result = state->tmp.out.result;
+
+       /* Reset temporary structure */
+       ZERO_STRUCT(state->tmp);
+
+       if (DEBUGLEVEL >= 10) {
+               NDR_PRINT_OUT_DEBUG(wbint_LookupSid, &state->orig);
+       }
+
+       tevent_req_done(req);
+}
+
+NTSTATUS rpccli_wbint_LookupSid_recv(struct tevent_req *req,
+                                    TALLOC_CTX *mem_ctx,
+                                    NTSTATUS *result)
+{
+       struct rpccli_wbint_LookupSid_state *state = tevent_req_data(
+               req, struct rpccli_wbint_LookupSid_state);
+       NTSTATUS status;
+
+       if (tevent_req_is_nterror(req, &status)) {
+               tevent_req_received(req);
+               return status;
+       }
+
+       /* Steal possbile out parameters to the callers context */
+       talloc_steal(mem_ctx, state->out_mem_ctx);
+
+       /* Return result */
+       *result = state->orig.out.result;
+
+       tevent_req_received(req);
+       return NT_STATUS_OK;
+}
+
+NTSTATUS rpccli_wbint_LookupSid(struct rpc_pipe_client *cli,
+                               TALLOC_CTX *mem_ctx,
+                               struct dom_sid *sid /* [in] [ref] */,
+                               enum lsa_SidType *type /* [out] [ref] */,
+                               const char **domain /* [out] [ref,charset(UTF8)] */,
+                               const char **name /* [out] [ref,charset(UTF8)] */)
+{
+       struct wbint_LookupSid r;
+       NTSTATUS status;
+
+       /* In parameters */
+       r.in.sid = sid;
+
+       if (DEBUGLEVEL >= 10) {
+               NDR_PRINT_IN_DEBUG(wbint_LookupSid, &r);
+       }
+
+       status = cli->dispatch(cli,
+                               mem_ctx,
+                               &ndr_table_wbint,
+                               NDR_WBINT_LOOKUPSID,
+                               &r);
+
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       if (DEBUGLEVEL >= 10) {
+               NDR_PRINT_OUT_DEBUG(wbint_LookupSid, &r);
+       }
+
+       if (NT_STATUS_IS_ERR(status)) {
+               return status;
+       }
+
+       /* Return variables */
+       *type = *r.out.type;
+       *domain = *r.out.domain;
+       *name = *r.out.name;
+
+       /* Return result */
+       return r.out.result;
+}
+
+struct rpccli_wbint_LookupName_state {
+       struct wbint_LookupName orig;
+       struct wbint_LookupName tmp;
+       TALLOC_CTX *out_mem_ctx;
+       NTSTATUS (*dispatch_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx);
+};
+
+static void rpccli_wbint_LookupName_done(struct tevent_req *subreq);
+
+struct tevent_req *rpccli_wbint_LookupName_send(TALLOC_CTX *mem_ctx,
+                                               struct tevent_context *ev,
+                                               struct rpc_pipe_client *cli,
+                                               const char *_domain /* [in] [ref,charset(UTF8)] */,
+                                               const char *_name /* [in] [ref,charset(UTF8)] */,
+                                               uint32_t _flags /* [in]  */,
+                                               enum lsa_SidType *_type /* [out] [ref] */,
+                                               struct dom_sid *_sid /* [out] [ref] */)
+{
+       struct tevent_req *req;
+       struct rpccli_wbint_LookupName_state *state;
+       struct tevent_req *subreq;
+
+       req = tevent_req_create(mem_ctx, &state,
+                               struct rpccli_wbint_LookupName_state);
+       if (req == NULL) {
+               return NULL;
+       }
+       state->out_mem_ctx = NULL;
+       state->dispatch_recv = cli->dispatch_recv;
+
+       /* In parameters */
+       state->orig.in.domain = _domain;
+       state->orig.in.name&n