Security aspects Closed Source HPLIP

Simply because there is no other choice if you want to use certain hardware. This can also be an issue with WiFi and Video cards.

I haven't used a printer in many years but when I needed one I was told to use an Epson one because it would work with linux. So I bought an Epson printer and indeed it worked for me without issues or external drivers.

I still have that printer but haven't used it in many years.

Reply to
Al
Loading thread data ...

Dear all,

during the last days I tried to install a Printer / Fax from HP (M127fn) on several different platforms.

On every OS it seems the same: You can only get these printers to work when installing a mandatory proprietary "plugin". This plugin originally comes from HP and you will never see the sources. It's just a binary "run" file which you may trust and invoke, or not.

As if this was not bad enough, the run file seems to have moved to a different location some days ago, and, hence, on e.g. Mageia 6 installation failed completely, and on Raspbian Stretch I had to do an "apt-get update" prior to being able to proceed.

But even after that I got complaints about not fitting pgp checks and had to continue even though the plugin potentially was manipulated.

So, at least, this has nothing to do with OpenSource philosophy.

I am wondering why so many people running Linux for higher security, are nevertheless agreeing on having non-OpenSource components like this on their machines.

- Has anyone found out, what this "plugin" exactly does? And, to which locations the installer ("run file") writes or modifies files?

- Are there alternatives as true Open Source drivers? I know that high end laser printers can be accessed via PCL or PS protocol, but not so with HP Fax Lasers.

Any ideas highly appreciated!

Best regards,

Markus

--
Please reply to group only. 
For private email please use http://www.dipl-ing-kessler.de/email.htm
Reply to
Markus Robert Kessler

There are no alternatives for HP printers AFAIK - just have to suck it up and install the relevant CUPS drop in package from HPLIP. I did that when my old LJ5 died and got replaced by an LJ-M402dne. It installed easily and 'just worked'.

I don't think HP are particularly malicious: after all they sell hardware and software, not advertising services or private data they've 'acquired' by being an antisocial network.

It *is*, however, worth knowing that all HP printers use dialects of the same PCL printer control 'language' so, for instance all HP laserjets accept the control sequences that earlier models, such as the LJ2, used. IOW I could have just stuck with the old LJ5's CUPS setup if I'd not wanted to use any of the M402's additional features, but as it supports duplex printing (both sides of the page) and that was something I wanted, I downloaded its specific support package from HPLIP.

The same standardisation applies to Epson printers as well, if they accept Epson's Esc/P control language, which I think most do. My first printer was an Epson MX-80 (80 character 9-pin dot matrix) that eventually was replaced with a Stylus 850 colour inkjet. As it happened, I had some very old programs that were set up for the MX-80 and these produced identical results when connected to the Stylus. Somewhat later I needed to print 1-up labels on a continuous backing, so I got an Epson LQ-30 24-pin dot matrix printer, which also worked perfectly with programs that thought it was an MX-80.

Just do it - get the HP driver from HPLIP. HP package them for easy installation on mainstream Linuxes.

--
Martin    | martin at 
Gregorie  | gregorie dot org
Reply to
Martin Gregorie

HP changed the drivers for my color printer so that I had to buy both the color cartridge and the black ink cartridge even though I only printed black and white. Cartridges would always dry out every year.

My solution, bought a Brother scanner/laser printer which paid for its self in three years. Still running on the original laser cartridge.

Reply to
Bit Twister

They are a compressed archives and inside is associated PPDs and some shared object libraries. The plugin adds support for "Windows" printers and other functions like fax and scanner on MFP. If you buy some spankin' new model from the store the in repo version of hplip may not support that model, but grabbing the latest from

will get you up and running.

--
Take care, 

Jonathan 
 Click to see the full signature
Reply to
Jonathan N. Little

That's a best reason for not buying inkjets. That and the number of printers with a fixed amount of heading cleaning strip that can't be replaced (Epson. I'm looking at you.)

Laser printers may cost a bit more to buy, but they are ideal for those of us who have low print volumes because their toner cartridges can't dry out. I average around 2 pages a week at the outside.

--
Martin    | martin at 
Gregorie  | gregorie dot org
Reply to
Martin Gregorie
[snip]

That's why I use one. It's not very good for photos, but I seldom need to print those.

--
Mark Lloyd 
http://notstupid.us/ 
 Click to see the full signature
Reply to
Mark Lloyd

thinking logically about the security issue honest if the printer is a network attached device then the printer firmware itself is a much better place for the manufacturer to install any nefarious software & hide this data in its phone home status reports.

in which case a binary only driver is the least of you worries

Reply to
Alister

Forget the printer, how about your CPU, (IME)?

--
Take care, 

Jonathan 
 Click to see the full signature
Reply to
Jonathan N. Little

Am Wed, 08 May 2019 17:27:45 -0400 schrieb Jonathan N. Little:

Hi,

I try to figure out how to trace what such a "run file" is doing exactly.

At least this one has to be run as root (and terminates if not). So, spying on it is not so easy. Especially if such closed-source binaries are using "stealth" techniques or try to manipulate the tracing process itself.

Well, one could use a fresh install, as slim as possible, do an md5sum for every file on disk, before and after installaion. And then compare the md5 lists. Alas, that would mean that you also find tons of files that are changed or newly created by the OS anyway.

Same, when using a (VirtualBox) VM.

Any better way?

Thanks, best regards,

Markus

--
Please reply to group only. 
For private email please use http://www.dipl-ing-kessler.de/email.htm
Reply to
Markus Robert Kessler

When you run the runfile for example:

sh ./hplip-3.19.3.run

it unpacks source files to directory

./hplip-3.19.3

Then it installs any missing packages, python, buildtools, and other dependencies, and installs the driver and toolbox utility on your system. The installer does not remove this build directory. You are welcome to peruse through it and discover there is nothing nefarious going on. If HP wanted to be evil they would erase the evidence, no?

--
Take care, 

Jonathan 
 Click to see the full signature
Reply to
Jonathan N. Little

Try the following.

1) Download a .run or .sh file intended for install. It consists of text at the start of the file and binary soon after.

2) Open the file in a hex editor. Scroll down until the text ends and seemingly binary appears. The binary is part of a "here is" structure and is being passed to a command very near to the end of the text section.

3) Where the text ends, the last line ends in 0x0A.

Remove all the text including the 0x0A, save the file to a temporary file name, such as .bin

The start of the resulting .bin file is 0x1F 0x8B 0x08 0x00

4) Use the "file" command which should be present in your distro.

file thing.bin

In the case of the HPLIP run file it says

"gzip compressed data"

This is the first level of containment.

5) Open thing.bin in "Archive Manager". It will display the folder in the gzip file that is thing.bin. This will allow easy viewing of the content.

5a) Or, you can do it the old fashioned way.

file thing.bin

(GZIP compressed)

mv thing.bin thing.gz # purely for entertainment value, to make the following # easier to understand

gzip -lv thing.gz # list the contents, a single file "hplip-3.19.3"

gzip -d thing.gz # convert and erase thing.gz, leaving "hplip-3.19.3"

file hplip-3.19.3 # tells you it's a "tar" file

mv hplip-3.19.3 hplip-3.19.3.tar # purely for entertainment value

mkdir tar_out

mv hplip-3.19.3.tar tar_out/

cd tar_out # work in a clean place so folders don't spill all over. # Never trust a tar file to be neat and tidy!

tar tf hplip-3.19.3.tar # list the files

tar xf hplip-3.19.3.tar # extract the folders and files to tar_out/

Now, examine the files, see how many binary blobs, how many text files, and so on.

You can see how Archive Manager has saved you from much hand-crafted commands.

If you are on a headless server, you might not have a lot of fancy tools, and have to do it as in (5a).

Paul

Reply to
Paul

Am Thu, 09 May 2019 16:50:16 -0400 schrieb Paul:

Hi Paul,

thanks a lot for your detailed info!

Knowing how to handle such a "run file" makes it easy to get the content.

First I used hexedit as recommended, and then I found out, that even vi itself can extract the binary non-destructively by just erasing all text above it and saving it. After that I viewed what was left through xxd -- better safe than sorry...

I renamed the remaining bin file to bin.tgz and opened it via archiver (ark in my case). So I had access to the whole content.

Surprisingly there was no closed-source-voodoo, but instead all needed stuff was given as plain scource, e.g. c, header files, tons of python scripts, ppds, docu and so on.

Fascinating to read through the content -- very instructive lesson :-)

Many thanks again!

Best regards,

Markus

--
Please reply to group only. 
For private email please use http://www.dipl-ing-kessler.de/email.htm
Reply to
Markus Robert Kessler

You probably know about the Linux Printer Driver Web site. It is so long since I looked at it, that I can't quote the URL.

My wife has an HP laptop, and I used to have one. It takes ages to start up. It is too big to be portable, but I can't imagine customers being happy with the delay. I initially chose Brother printers, because they support Linux.

I own a Raspberry Pi, but haven't used it as a normal computer.

Reply to
Doug Laidlaw

It used to be linuxprinting.org, but that got absorbed by the Linux Foundation, and is now

formatting link

Linux "Printer Drivers" (that is, "Postscript Printer Definition" (PPD) files) can be found at

formatting link

--
Lew Pitcher 
"In Skills, We Trust"
Reply to
Lew Pitcher

But PPD files are about as far from closed source as you can find. So I have no idea what the OP is talking about with hplip being closed source. It isn't.

Reply to
William Unruh

I think the OP hasn't yet shed his Windows mental manacles: if something is downloaded from the manufacturer's site, then it *must* be closed source and proprietary.

--
Martin    | martin at 
Gregorie  | gregorie dot org
Reply to
Martin Gregorie

Am Sat, 11 May 2019 20:29:27 +0000 schrieb Martin Gregorie:

The "OP" has nothing against Windows, as long as others have to use it :-)

And, if you have a closer look to what is being installed, then you find out that not only PPD files are installed to your machine -- which are plaintext indeed -- but also several executable shared objects (Windows- slang: "DLLs"). They live in

/usr/share/hplip/{fax,prnt,scan}/plugins/*.so

These files are downloaded when invoking "hp-setup" ==> download, and they ARE closed source.

B.t.w. I also own a Brother Laser printer and this one is accessed via PCL protocol. PS can also be used. But this is a professional machine for office use. What we are talking about here is lowcost segment "Multifunction Fax Printers". Obviously the manufacturers behave differently in differents price sectors.

Best regards,

Markus

--
Please reply to group only. 
For private email please use http://www.dipl-ing-kessler.de/email.htm
Reply to
Markus Robert Kessler

"closed source" when you include the *source* code?

~$ find Downloads/hplip-3.19.3/ -iname *.c* | egrep '(c|cpp)$' Downloads/hplip-3.19.3/protocol/hp_ipp.c Downloads/hplip-3.19.3/protocol/discovery/mdns.c Downloads/hplip-3.19.3/pcard/pcardext/pcardext.c Downloads/hplip-3.19.3/pcard/fat.c Downloads/hplip-3.19.3/pcard/ptest.c Downloads/hplip-3.19.3/ip/xgrayout.c Downloads/hplip-3.19.3/ip/xgamma.c Downloads/hplip-3.19.3/ip/xconvolve.c Downloads/hplip-3.19.3/ip/xscale.c Downloads/hplip-3.19.3/ip/xjpg_dec.c Downloads/hplip-3.19.3/ip/xsaturation.c Downloads/hplip-3.19.3/ip/xmatrix.c Downloads/hplip-3.19.3/ip/xpad.c Downloads/hplip-3.19.3/ip/xpnm.c Downloads/hplip-3.19.3/ip/xthumb.c Downloads/hplip-3.19.3/ip/xinvert.c Downloads/hplip-3.19.3/ip/xjpg_fix.c Downloads/hplip-3.19.3/ip/xchgbpp.c Downloads/hplip-3.19.3/ip/xbi2gray.c Downloads/hplip-3.19.3/ip/xtonemap.c Downloads/hplip-3.19.3/ip/xjpg_huf.c Downloads/hplip-3.19.3/ip/xskel.c Downloads/hplip-3.19.3/ip/xfakemono.c Downloads/hplip-3.19.3/ip/xtiff.c Downloads/hplip-3.19.3/ip/ipmain.c Downloads/hplip-3.19.3/ip/xcrop.c Downloads/hplip-3.19.3/ip/xjpg_dct.c Downloads/hplip-3.19.3/ip/xyxtract.c Downloads/hplip-3.19.3/ip/xgray2bi.c Downloads/hplip-3.19.3/ip/xfax.c Downloads/hplip-3.19.3/ip/xrotate.c Downloads/hplip-3.19.3/ip/xtable.c Downloads/hplip-3.19.3/ip/xjpg_enc.c Downloads/hplip-3.19.3/ip/xcolrspc.c Downloads/hplip-3.19.3/ip/xpcx.c Downloads/hplip-3.19.3/prnt/backend/hp.c Downloads/hplip-3.19.3/prnt/hpcups/Hbpl1_Wrapper.cpp Downloads/hplip-3.19.3/prnt/hpcups/genJPEGStrips.cpp Downloads/hplip-3.19.3/prnt/hpcups/SystemServices.cpp Downloads/hplip-3.19.3/prnt/hpcups/ModeDeltaPlus.cpp Downloads/hplip-3.19.3/prnt/hpcups/dj4100ColorMaps.cpp Downloads/hplip-3.19.3/prnt/hpcups/LJColor.cpp Downloads/hplip-3.19.3/prnt/hpcups/ColorMatcher.cpp Downloads/hplip-3.19.3/prnt/hpcups/genPCLm.cpp Downloads/hplip-3.19.3/prnt/hpcups/Pcl3Gui2.cpp Downloads/hplip-3.19.3/prnt/hpcups/LidilCompress.cpp Downloads/hplip-3.19.3/prnt/hpcups/Mode2.cpp Downloads/hplip-3.19.3/prnt/hpcups/LJJetReady.cpp Downloads/hplip-3.19.3/prnt/hpcups/jdatadbf.c Downloads/hplip-3.19.3/prnt/hpcups/Pcl3Gui.cpp Downloads/hplip-3.19.3/prnt/hpcups/BreakTables.cpp Downloads/hplip-3.19.3/prnt/hpcups/HPCupsFilter.cpp Downloads/hplip-3.19.3/prnt/hpcups/Hbpl1.cpp Downloads/hplip-3.19.3/prnt/hpcups/Lidil.cpp Downloads/hplip-3.19.3/prnt/hpcups/Pcl3.cpp Downloads/hplip-3.19.3/prnt/hpcups/dbuscomm.cpp Downloads/hplip-3.19.3/prnt/hpcups/EncapsulatorFactory.cpp Downloads/hplip-3.19.3/prnt/hpcups/Compressor.cpp Downloads/hplip-3.19.3/prnt/hpcups/LJZjStream.cpp Downloads/hplip-3.19.3/prnt/hpcups/Scaler.cpp Downloads/hplip-3.19.3/prnt/hpcups/QuickConnect.cpp Downloads/hplip-3.19.3/prnt/hpcups/Utils.cpp Downloads/hplip-3.19.3/prnt/hpcups/RunLenEncoding.cpp Downloads/hplip-3.19.3/prnt/hpcups/ModeJbig.cpp Downloads/hplip-3.19.3/prnt/hpcups/jccolor.c Downloads/hplip-3.19.3/prnt/hpcups/Mode9.cpp Downloads/hplip-3.19.3/prnt/hpcups/LJFastRaster.cpp Downloads/hplip-3.19.3/prnt/hpcups/dj8xxColorMaps.cpp Downloads/hplip-3.19.3/prnt/hpcups/dj600ColorMaps.cpp Downloads/hplip-3.19.3/prnt/hpcups/RasterSender.cpp Downloads/hplip-3.19.3/prnt/hpcups/dj3600ColorMaps.cpp Downloads/hplip-3.19.3/prnt/hpcups/dj3320ColorMaps.cpp Downloads/hplip-3.19.3/prnt/hpcups/Mode3.cpp Downloads/hplip-3.19.3/prnt/hpcups/Processor.cpp Downloads/hplip-3.19.3/prnt/hpcups/Encapsulator.cpp Downloads/hplip-3.19.3/prnt/hpcups/ErnieFilter.cpp Downloads/hplip-3.19.3/prnt/hpcups/Halftoner.cpp Downloads/hplip-3.19.3/prnt/hpcups/LJMono.cpp Downloads/hplip-3.19.3/prnt/hpcups/dj400ColorMaps.cpp Downloads/hplip-3.19.3/prnt/hpcups/Mode10.cpp Downloads/hplip-3.19.3/prnt/hpcups/ModeJpeg.cpp Downloads/hplip-3.19.3/prnt/hpcups/dj970ColorMaps.cpp Downloads/hplip-3.19.3/prnt/hpcups/LJZxStream.cpp Downloads/hplip-3.19.3/prnt/hpcups/Job.cpp Downloads/hplip-3.19.3/prnt/hpcups/Pipeline.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj970_maps.cpp Downloads/hplip-3.19.3/prnt/hpijs/ljjetready.cpp Downloads/hplip-3.19.3/prnt/hpijs/systemservices.cpp Downloads/hplip-3.19.3/prnt/hpijs/registry.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj690.cpp Downloads/hplip-3.19.3/prnt/hpijs/breaks_open.cpp Downloads/hplip-3.19.3/prnt/hpijs/djgenericvip.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj850.cpp Downloads/hplip-3.19.3/prnt/hpijs/printerproxy.cpp Downloads/hplip-3.19.3/prnt/hpijs/scaler.cpp Downloads/hplip-3.19.3/prnt/hpijs/printer.cpp Downloads/hplip-3.19.3/prnt/hpijs/halftoner_open.cpp Downloads/hplip-3.19.3/prnt/hpijs/apollo2xxx.cpp Downloads/hplip-3.19.3/prnt/hpijs/create_so.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj660_maps.cpp Downloads/hplip-3.19.3/prnt/hpijs/capture.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj6xx.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj970_maps3.cpp Downloads/hplip-3.19.3/prnt/hpijs/jdatadbf.c Downloads/hplip-3.19.3/prnt/hpijs/dj8xx.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj630.cpp Downloads/hplip-3.19.3/prnt/hpijs/ljzjscolor.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj3600_cmap.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj540.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj3600.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj9xxvip.cpp Downloads/hplip-3.19.3/prnt/hpijs/context2.cpp Downloads/hplip-3.19.3/prnt/hpijs/ijs.c Downloads/hplip-3.19.3/prnt/hpijs/dj3320_cmap.cpp Downloads/hplip-3.19.3/prnt/hpijs/ljzjsmono.cpp Downloads/hplip-3.19.3/prnt/hpijs/version.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj850_maps.cpp Downloads/hplip-3.19.3/prnt/hpijs/psp100.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj3320.cpp Downloads/hplip-3.19.3/prnt/hpijs/hpiom.c Downloads/hplip-3.19.3/prnt/hpijs/quickconnect.cpp Downloads/hplip-3.19.3/prnt/hpijs/hpijsfax.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj660.cpp Downloads/hplip-3.19.3/prnt/hpijs/script.cpp Downloads/hplip-3.19.3/prnt/hpijs/phobos_cmaps.cpp Downloads/hplip-3.19.3/prnt/hpijs/pmselect.cpp Downloads/hplip-3.19.3/prnt/hpijs/halftoner.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj9xx.cpp Downloads/hplip-3.19.3/prnt/hpijs/printerfactory.cpp Downloads/hplip-3.19.3/prnt/hpijs/services.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj890.cpp Downloads/hplip-3.19.3/prnt/hpijs/scaler_open.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj690_maps.cpp Downloads/hplip-3.19.3/prnt/hpijs/apollo21xx.cpp Downloads/hplip-3.19.3/prnt/hpijs/colormatch.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj600.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj600_maps.cpp Downloads/hplip-3.19.3/prnt/hpijs/ljzjs.cpp Downloads/hplip-3.19.3/prnt/hpijs/compression.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj8x5.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj4100_cmap.cpp Downloads/hplip-3.19.3/prnt/hpijs/ljmono.cpp Downloads/hplip-3.19.3/prnt/hpijs/colormatcher_open.cpp Downloads/hplip-3.19.3/prnt/hpijs/versioncode.cpp Downloads/hplip-3.19.3/prnt/hpijs/hpijs.cpp Downloads/hplip-3.19.3/prnt/hpijs/jccolor.c Downloads/hplip-3.19.3/prnt/hpijs/dj895_maps.cpp Downloads/hplip-3.19.3/prnt/hpijs/filterhpa.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj350.cpp Downloads/hplip-3.19.3/prnt/hpijs/ljcolor.cpp Downloads/hplip-3.19.3/prnt/hpijs/hpcupsfax.cpp Downloads/hplip-3.19.3/prnt/hpijs/translator.cpp Downloads/hplip-3.19.3/prnt/hpijs/models.cpp Downloads/hplip-3.19.3/prnt/hpijs/apollo2560.cpp Downloads/hplip-3.19.3/prnt/hpijs/htmtxhi.cpp Downloads/hplip-3.19.3/prnt/hpijs/ljfastraster.cpp Downloads/hplip-3.19.3/prnt/hpijs/ljm1005.cpp Downloads/hplip-3.19.3/prnt/hpijs/ijs_server.c Downloads/hplip-3.19.3/prnt/hpijs/globals.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj970_maps2.cpp Downloads/hplip-3.19.3/prnt/hpijs/header2.cpp Downloads/hplip-3.19.3/prnt/hpijs/PrinterProperties.cpp Downloads/hplip-3.19.3/prnt/hpijs/creator.cpp Downloads/hplip-3.19.3/prnt/hpijs/dj895_maps2.cpp Downloads/hplip-3.19.3/prnt/hpijs/job.cpp Downloads/hplip-3.19.3/prnt/hpps/hppsfilter.c Downloads/hplip-3.19.3/prnt/hpps/psbooklet.c Downloads/hplip-3.19.3/prnt/hpps/psspec.c Downloads/hplip-3.19.3/prnt/hpps/pserror.c Downloads/hplip-3.19.3/prnt/hpps/psutil.c Downloads/hplip-3.19.3/prnt/cupsext/cupsext.c Downloads/hplip-3.19.3/FindPPD.cpp Downloads/hplip-3.19.3/Dat2drv.cpp Downloads/hplip-3.19.3/Normalize.cpp Downloads/hplip-3.19.3/common/utils.c Downloads/hplip-3.19.3/io/hpmud/pp.c Downloads/hplip-3.19.3/io/hpmud/dot4.c Downloads/hplip-3.19.3/io/hpmud/pml.c Downloads/hplip-3.19.3/io/hpmud/musb.c Downloads/hplip-3.19.3/io/hpmud/mlc.c Downloads/hplip-3.19.3/io/hpmud/musb_libusb01.c Downloads/hplip-3.19.3/io/hpmud/model.c Downloads/hplip-3.19.3/io/hpmud/jd.c Downloads/hplip-3.19.3/io/hpmud/hpmud.c Downloads/hplip-3.19.3/io/mudext/hpmudext.c Downloads/hplip-3.19.3/scan/sane/soapht.c Downloads/hplip-3.19.3/scan/sane/http.cDownloads/hplip-3.19.3/scan/sane/soap.cDownloads/hplip-3.19.3/scan/sane/ledm.cDownloads/hplip-3.19.3/scan/sane/xml.cDownloads/hplip-3.19.3/scan/sane/scl.cDownloads/hplip-3.19.3/scan/sane/sanei_init_debug.cDownloads/hplip-3.19.3/scan/sane/mfpdtf.cDownloads/hplip-3.19.3/scan/sane/orblite.cDownloads/hplip-3.19.3/scan/sane/pml.cDownloads/hplip-3.19.3/scan/sane/marvell.cDownloads/hplip-3.19.3/scan/sane/common.cDownloads/hplip-3.19.3/scan/sane/io.cDownloads/hplip-3.19.3/scan/sane/sclpml.cDownloads/hplip-3.19.3/scan/sane/bb_ledm.cDownloads/hplip-3.19.3/scan/sane/hpaio.cDownloads/hplip-3.19.3/scan/sane/escl.cDownloads/hplip-3.19.3/scan/scanext/scanext.c

--
Take care, 

Jonathan 
 Click to see the full signature
Reply to
Jonathan N. Little
--
|_|O|_|  
|_|_|O| Github: https://github.com/dpurgert 
 Click to see the full signature
Reply to
Dan Purgert

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.