s3-selftest: fix return code for modprinter.pl -a.
[ira/wip.git] / source3 / script / tests / printing / modprinter.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4
5 use Getopt::Long;
6 use Cwd qw(abs_path);
7
8 my $opt_help = 0;
9 my $opt_smb_conf = undef;
10 my $opt_add = 0;
11 my $opt_delete = 0;
12
13 my $result = GetOptions(
14         'help|h|?'      => \$opt_help,
15         'smb_conf|s=s'  => \$opt_smb_conf,
16         'add|a'         => \$opt_add,
17         'delete|d'      => \$opt_delete
18 );
19
20 sub usage($;$)
21 {
22         my ($ret, $msg) = @_;
23
24         print $msg."\n\n" if defined($msg);
25
26         print "usage:
27
28         --help|-h|-?            Show this help.
29
30         --smb_conf|-s <path>    Path of the 'smb.conf' file.
31
32         --add|-a                'add' a printer.
33         --delete|-d             'delete' a printer.
34
35         printer_name share_name port_name driver_name location XX remote_machine
36 ";
37         exit($ret);
38 }
39
40 usage(1) if (not $result);
41
42 usage(0) if ($opt_help);
43
44 if (!$opt_add && !$opt_delete) {
45         usage(1, "invalid: neither --add|-a nor --delete|-d set");
46 }
47
48 if (!$opt_smb_conf) {
49         usage(1, "invalid: no smb.conf file set");
50 }
51
52 my @argv = @ARGV;
53
54 my $printer_name = shift(@argv);
55 my $share_name = shift(@argv);
56 my $port_name = shift(@argv);
57 my $driver_name = shift(@argv);
58 my $location = shift(@argv);
59 my $win9x_driver_location = shift(@argv);
60 my $remote_machine = shift(@argv);
61
62 if (!defined($share_name) || length($share_name) == 0) {
63         $share_name = $printer_name;
64 }
65
66 if (!defined($share_name)) {
67         die "share name not defined";
68 }
69
70 my $tmp = $opt_smb_conf.$$;
71
72 my $section = undef;
73 my $within_section = 0;
74 my $found_section = 0;
75
76 open(CONFIGFILE_NEW, "+>$tmp") || die "Unable top open conf file $tmp";
77
78 open (CONFIGFILE, "+<$opt_smb_conf") || die "Unable to open config file $opt_smb_conf";
79 while (<CONFIGFILE>) {
80         my $line = $_;
81         chomp($_);
82         $_ =~ s/^\s*//;
83         $_ =~ s/\s*$//;
84         if (($_ =~ /^#/) || ($_ =~ /^;/)) {
85                 print CONFIGFILE_NEW $line;
86                 next;
87         }
88         if ($_ =~ /^\[.*\]$/) {
89                 $_ = substr($_, 1, length($_)-2);
90                 if (length($_)) {
91                         $section = $_;
92                 } else {
93                         die "invalid section found";
94                 }
95                 if ($section eq $share_name) {
96                         $found_section = 1;
97                         if ($opt_add) {
98                                 exit 0;
99 #                               die("share $share_name already exists\n");
100                         }
101                         if ($opt_delete) {
102                                 $within_section = 1;
103                                 next;
104                         }
105                 } else {
106                         print CONFIGFILE_NEW $line;
107                         $within_section = 0;
108                 }
109                 next;
110         } else {
111                 if ($within_section == 1) {
112                         next;
113                 }
114                 print CONFIGFILE_NEW $line;
115         }
116 }
117 if ($opt_add) {
118         print CONFIGFILE_NEW "[$share_name]\n\tprintable = yes\n\tpath = /tmp\n";
119 }
120 close (CONFIGFILE);
121 close (CONFIGFILE_NEW);
122
123 if ($opt_delete && ($found_section == 0)) {
124         die "share $share_name not found";
125 }
126 system("cp", "$tmp", "$opt_smb_conf");
127 unlink $tmp;
128
129 exit 0;