diff --git a/pkgs/misc/drivers/hplip/default.nix b/pkgs/misc/drivers/hplip/default.nix index 554a8d4066ca..db7f92b21927 100644 --- a/pkgs/misc/drivers/hplip/default.nix +++ b/pkgs/misc/drivers/hplip/default.nix @@ -1,5 +1,5 @@ { lib, stdenv, fetchurl, substituteAll -, pkg-config +, pkg-config, autoreconfHook , cups, zlib, libjpeg, libusb1, python3Packages, sane-backends , dbus, file, ghostscript, usbutils , net-snmp, openssl, perl, nettools, avahi @@ -14,16 +14,16 @@ let pname = "hplip"; - version = "3.21.12"; + version = "3.22.6"; src = fetchurl { url = "mirror://sourceforge/hplip/${pname}-${version}.tar.gz"; - sha256 = "sha256-fvRSPvgbztcVFeHIhA72xoxgJjjBWebdmpJpHO7GT5w="; + sha256 = "sha256-J+0NSS/rsLR8ZWI0gg085XOyT/W2Ljv0ssR/goaNa7Q="; }; plugin = fetchurl { url = "https://developers.hp.com/sites/default/files/${pname}-${version}-plugin.run"; - sha256 = "sha256-eyYNhuff8mM4IpRfn/fLBjQJ23JrTdsHBQ/EH7Ug0gw="; + sha256 = "sha256-MSQCPnSXVLrXS1nPIIvlUx0xshbyU0OlpfLOghZMgvs="; }; hplipState = substituteAll { @@ -71,6 +71,7 @@ python3Packages.buildPythonApplication { nativeBuildInputs = [ pkg-config removeReferencesTo + autoreconfHook ] ++ lib.optional withQt5 qt5.wrapQtAppsHook; pythonPath = with python3Packages; [ @@ -96,6 +97,15 @@ python3Packages.buildPythonApplication { # don't on NixOS). Add the equivalent NixOS path, /var/lib/cups/path/share. # See: https://github.com/NixOS/nixpkgs/issues/21796 ./hplip-3.20.11-nixos-cups-ppd-search-path.patch + + # Remove all ImageProcessor functionality since that is closed source + (fetchurl { + url = "https://sources.debian.org/data/main/h/hplip/3.22.4%2Bdfsg0-1/debian/patches/0028-Remove-ImageProcessor-binary-installs.patch"; + sha256 = "sha256:18njrq5wrf3fi4lnpd1jqmaqr7ph5d7jxm7f15b1wwrbxir1rmml"; + }) + + # Revert changes that break compilation under -Werror=format-security + ./revert-snprintf-change.patch ]; postPatch = '' @@ -118,6 +128,8 @@ python3Packages.buildPythonApplication { -e s,/usr/share/cups/fonts,${ghostscript}/share/ghostscript/fonts,g \ -e "s,ExecStart=/usr/bin/python /usr/bin/hp-config_usb_printer,ExecStart=$out/bin/hp-config_usb_printer,g" \ {} + + + echo 'AUTOMAKE_OPTIONS = foreign' >> Makefile.am ''; configureFlags = let out = placeholder "out"; in diff --git a/pkgs/misc/drivers/hplip/revert-snprintf-change.patch b/pkgs/misc/drivers/hplip/revert-snprintf-change.patch new file mode 100644 index 000000000000..2caa98dc2cff --- /dev/null +++ b/pkgs/misc/drivers/hplip/revert-snprintf-change.patch @@ -0,0 +1,61 @@ +commit f103a260215016fc035bc1399c8accabf83b0264 +Author: Claudio Bley +Date: Fri Jul 1 22:29:05 2022 +0200 + + Revert change to hp_ipp.c from 3.22.{4 -> 6} + + This fails compilation: + ``` + protocol/hp_ipp.c: In function ‘addCupsPrinter’: + protocol/hp_ipp.c:113:9: error: format not a string literal and no format arguments [-Werror=format-security] + 113 | snprintf( info,sizeof(info), name ); + | ^~~~~~~~ + ``` + +diff --git a/protocol/hp_ipp.c b/protocol/hp_ipp.c +index 97d827d..af7013b 100644 +--- a/protocol/hp_ipp.c ++++ b/protocol/hp_ipp.c +@@ -110,7 +110,7 @@ int addCupsPrinter(char *name, char *device_uri, char *location, char *ppd_file, + } + + if ( info == NULL ) +- snprintf( info,sizeof(info), name ); ++ strcpy( info, name ); + + sprintf( printer_uri, "ipp://localhost/printers/%s", name ); + +@@ -511,27 +511,27 @@ int __parsePrinterAttributes(ipp_t *response, printer_t **printer_list) + + if ( strcmp(attr_name, "printer-name") == 0 && + val_tag == IPP_TAG_NAME ) { +- snprintf(t_printer->name, sizeof(t_printer->name),ippGetString(attr, 0, NULL) ); ++ strcpy(t_printer->name, ippGetString(attr, 0, NULL) ); + } + else if ( strcmp(attr_name, "device-uri") == 0 && + val_tag == IPP_TAG_URI ) { +- snprintf(t_printer->device_uri,sizeof(t_printer->device_uri), ippGetString(attr, 0, NULL) ); ++ strcpy(t_printer->device_uri, ippGetString(attr, 0, NULL) ); + } + else if ( strcmp(attr_name, "printer-uri-supported") == 0 && + val_tag == IPP_TAG_URI ) { +- snprintf(t_printer->printer_uri,sizeof(t_printer->printer_uri), ippGetString(attr, 0, NULL) ); ++ strcpy(t_printer->printer_uri, ippGetString(attr, 0, NULL) ); + } + else if ( strcmp(attr_name, "printer-info") == 0 && + val_tag == IPP_TAG_TEXT ) { +- snprintf(t_printer->info,sizeof(t_printer->info), ippGetString(attr, 0, NULL) ); ++ strcpy(t_printer->info, ippGetString(attr, 0, NULL) ); + } + else if ( strcmp(attr_name, "printer-location") == 0 && + val_tag == IPP_TAG_TEXT ) { +- snprintf(t_printer->location,sizeof(t_printer->location),ippGetString(attr, 0, NULL) ); ++ strcpy(t_printer->location, ippGetString(attr, 0, NULL) ); + } + else if ( strcmp(attr_name, "printer-make-and-model") == 0 && + val_tag == IPP_TAG_TEXT ) { +- snprintf(t_printer->make_model,sizeof(t_printer->make_model),ippGetString(attr, 0, NULL) ); ++ strcpy(t_printer->make_model, ippGetString(attr, 0, NULL) ); + } + else if ( strcmp(attr_name, "printer-state") == 0 && + val_tag == IPP_TAG_ENUM ) {