Minor CUPS ppd tweaks
authorJamie Cameron <jcameron@webmin.com>
Sat, 12 Feb 2011 06:06:35 +0000 (22:06 -0800)
committerJamie Cameron <jcameron@webmin.com>
Sat, 12 Feb 2011 06:06:35 +0000 (22:06 -0800)
lpadmin/cups-driver.pl
lpadmin/lpadmin-lib.pl

index 0825cdd..fb29443 100755 (executable)
@@ -90,20 +90,21 @@ sub create_driver
 local $drv = "$cups_ppd_dir/$_[0]->{'name'}.ppd";
 undef($cups_driver_options);
 if ($_[1]->{'mode'} == 0) {
-       &system_logged("rm -f \"$drv\"");
+       &unlink_file($drv);
        return undef;
        }
 elsif ($_[1]->{'mode'} == 2) {
-       &system_logged("rm -f \"$drv\"");
+       &unlink_file($drv);
        return $_[1]->{'file'};
        }
 else {
        # Copy the driver into place
        if ($_[1]->{'ppd'} =~ /\.gz$/) {
-               &system_logged("gunzip -c '$_[1]->{'ppd'}' >$drv");
+               &system_logged("gunzip -c ".quotemeta($_[1]->{'ppd'}).
+                              " >".quotemeta($drv));
                }
        else {
-               &system_logged("cp $_[1]->{'ppd'} $drv");
+               &copy_source_dest($_[1]->{'ppd'}, $drv);
                }
        chmod(0777, $drv);
        $cups_driver_options = $_[1]->{'opts'}; # for modify_printer
@@ -114,7 +115,7 @@ else {
 # delete_driver(name)
 sub delete_driver
 {
-&system_logged("rm -f \"$cups_ppd_dir/$_[0].ppd\"");
+&unlink_file("$cups_ppd_dir/$_[0].ppd");
 }
 
 # driver_input(&printer, &driver)
@@ -140,6 +141,7 @@ foreach my $mp (split(/\s+/, $config{'model_path'})) {
                                    " -type f -print", 1, 1);
        while(<FIND>) {
                chop;
+               next if (/\.xml$/);     # Ignore XML PPD sources
                /([^\/]+)$/;
                next if ($donefile{$1}++);
                push(@files, $_);
index 7c347db..108d6ee 100755 (executable)
@@ -529,38 +529,21 @@ sub parse_cups_ppd
 {
 local ($file) = @_;
 local %ppd;
-if ($file =~ /\/([^\/+])\.xml$/) {
-       # XML format PPD
-       $ppd{'NickName'} = $1;
-       open(PPD, $file);
-       while(<PPD>) {
-               if (/<make>(\S+)<\/make>/) {
-                       $ppd{'Manufacturer'} = $1;
-                       }
-               if (/<model>(\S+)<\/model>/) {
-                       $ppd{'ModelName'} = $1;
-                       }
-               }
-       close(PPD);
+if ($file =~ /\.gz$/) {
+       open(PPD, "gunzip -c ".quotemeta($file)." |");
        }
 else {
-       # Old text format PPD
-       if ($file =~ /\.gz$/) {
-               open(PPD, "gunzip -c ".quotemeta($file)." |");
-               }
-       else {
-               open(PPD, $file);
+       open(PPD, $file);
+       }
+while(<PPD>) {
+       if (/^\s*\*(\S+):\s*"(.*)"/ || /^\s*\*(\S+):\s*(\S+)/) {
+               $ppd{$1} = $2;
                }
-       while(<PPD>) {
-               if (/^\s*\*(\S+):\s*"(.*)"/ || /^\s*\*(\S+):\s*(\S+)/) {
-                       $ppd{$1} = $2;
-                       }
-               elsif (/^\s*\*(\S+)\s+(\S+)\/([^:]+):/) {
-                       $ppd{$1}->{$2} = $3 if (!defined($ppd{$1}->{$2}));
-                       }
+       elsif (/^\s*\*(\S+)\s+(\S+)\/([^:]+):/) {
+               $ppd{$1}->{$2} = $3 if (!defined($ppd{$1}->{$2}));
                }
-       close(PPD);
        }
+close(PPD);
 return \%ppd;
 }