pidl: add --template3 option to generate s3 server stubs.
authorGünther Deschner <gd@samba.org>
Mon, 21 Jan 2013 17:42:45 +0000 (18:42 +0100)
committerGünther Deschner <gd@samba.org>
Fri, 13 Mar 2015 22:58:09 +0000 (23:58 +0100)
Guenther

Signed-off-by: Günther Deschner <gd@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
pidl/lib/Parse/Pidl/Samba3/Template.pm [new file with mode: 0644]
pidl/pidl

diff --git a/pidl/lib/Parse/Pidl/Samba3/Template.pm b/pidl/lib/Parse/Pidl/Samba3/Template.pm
new file mode 100644 (file)
index 0000000..3496927
--- /dev/null
@@ -0,0 +1,103 @@
+###################################################
+# server template function generator
+# Copyright tridge@samba.org 2003
+# released under the GNU GPL
+
+package Parse::Pidl::Samba3::Template;
+
+use vars qw($VERSION);
+$VERSION = '0.01';
+
+use strict;
+
+my($res);
+
+sub genpad($)
+{
+       my ($s) = @_;
+       my $nt = int((length($s)+1)/8);
+       my $lt = ($nt*8)-1;
+       my $ns = (length($s)-$lt);
+       return "\t"x($nt)." "x($ns);
+}
+
+#####################################################################
+# produce boilerplate code for a interface
+sub Template($)
+{
+       my($interface) = shift;
+       my($data) = $interface->{DATA};
+       my $name = $interface->{NAME};
+
+       $res .=
+"/*
+   Unix SMB/CIFS implementation.
+
+   endpoint server for the $name pipe
+
+   Copyright (C) YOUR NAME HERE YEAR
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include \"includes.h\"
+#include \"ntdomain.h\"
+#include \"../librpc/gen_ndr/srv_$name.h\"
+
+";
+
+       foreach my $d (@{$data}) {
+               if ($d->{TYPE} eq "FUNCTION") {
+                       my $fname = $d->{NAME};
+                       my $pad = genpad("$d->{RETURN_TYPE} _$fname");
+                       $res .=
+"
+/****************************************************************
+ _$fname
+****************************************************************/
+
+$d->{RETURN_TYPE} _$fname(struct pipes_struct *p,
+$pad"."struct $fname *r)
+{
+";
+
+       $res .= "\tp->fault_state = DCERPC_FAULT_OP_RNG_ERROR;\n";
+       if ($d->{RETURN_TYPE} eq "NTSTATUS") {
+               $res .= "\treturn NT_STATUS_NOT_IMPLEMENTED;\n";
+       } elsif ($d->{RETURN_TYPE} eq "WERROR") {
+               $res .= "\treturn WERR_NOT_SUPPORTED;\n";
+       }
+
+       $res .= "}
+
+";
+               }
+       }
+}
+
+
+#####################################################################
+# parse a parsed IDL structure back into an IDL file
+sub Parse($)
+{
+       my($idl) = shift;
+       $res = "";
+       foreach my $x (@{$idl}) {
+               ($x->{TYPE} eq "INTERFACE") &&
+                   Template($x);
+       }
+       return $res;
+}
+
+1;
index 28a15310e21fb1949e215863a5a1fe5078aa999a..75fa5158d8141f14d2997b92c81cfe3203e8d274 100755 (executable)
--- a/pidl/pidl
+++ b/pidl/pidl
@@ -469,6 +469,7 @@ my($opt_samba3_parser);
 my($opt_samba3_server);
 my($opt_samba3_ndr_client);
 my($opt_samba3_ndr_server);
+my($opt_samba3_template) = 0;
 my($opt_template) = 0;
 my($opt_client);
 my($opt_typelib);
@@ -529,6 +530,7 @@ Samba 3 output:
                             using Samba4's NDR code [cli_BASENAME.c]
  --samba3-ndr-server[=OUTF] create server call wrapper for Samba3
                             using Samba4's NDR code [srv_BASENAME.c]
+ --samba3-template          print a template for a pipe
 
 Wireshark parsers:
  --ws-parser[=OUTFILE]  create Wireshark parser and header
@@ -554,6 +556,7 @@ my $result = GetOptions (
                'dump-ndr-tree:s' => \$opt_dump_ndr_tree,
                'samba3-ndr-client:s' => \$opt_samba3_ndr_client,
                'samba3-ndr-server:s' => \$opt_samba3_ndr_server,
+           'samba3-template' => \$opt_samba3_template,
                'header:s' => \$opt_header,
            'server:s' => \$opt_server,
                'typelib:s' => \$opt_typelib,
@@ -767,6 +770,11 @@ sub process_file($)
                print Parse::Pidl::Samba4::Template::Parse($pidl);
        }
 
+       if ($opt_samba3_template) {
+               require Parse::Pidl::Samba3::Template;
+               print Parse::Pidl::Samba3::Template::Parse($pidl);
+       }
+
        if (defined($opt_samba3_ndr_client)) {
                my $client = ($opt_samba3_ndr_client or "$outputdir/cli_$basename.c");
                my $header = $client; $header =~ s/\.c$/\.h/;