kylefarris / clamscan

A robust ClamAV virus scanning library supporting scanning files, directories, and streams with local sockets, local/remote TCP, and local clamscan/clamdscan binaries (with failover).
MIT License
230 stars 68 forks source link

fix: support port-only connection #122

Closed tamil-rss closed 2 months ago

tamil-rss commented 3 months ago

Current version doesn't support port only connection (expecting host option) by default.

The _initSocket method has the option to connect using port alone,

client = net.createConnection({ port: this.settings.clamdscan.port, timeout });

if (this.settings.clamdscan.socket)
    client = net.createConnection({ path: this.settings.clamdscan.socket, timeout });
// If a port is specified, we're going to be connecting via TCP
else if (this.settings.clamdscan.port) {
    // If a host is specified (usually for a remote host)
    if (this.settings.clamdscan.host) {
        if (this.settings.clamdscan.tls) {
            client = tls.connect({
                host: this.settings.clamdscan.host,
                port: this.settings.clamdscan.port,
                // Activate SNI
                // servername: this.settings.clamdscan.host,
                timeout,
            });
        } else {
            client = net.createConnection({
                host: this.settings.clamdscan.host,
                port: this.settings.clamdscan.port,
                timeout,
            });
        }
    }
    // Host can be ignored since the default is `localhost`
    else if (this.settings.tls) {
        client = tls.connect({ port: this.settings.clamdscan.port, timeout });
    } else {
        client = net.createConnection({ port: this.settings.clamdscan.port, timeout });
    }
}

But, init method has a validation that restricts to use port-only connection,

 if ( !this.settings.clamdscan.socket && !this.settings.clamdscan.host) {
      const err = new NodeClamError('No valid & active virus scanning binaries are active and available and no socket/host option provided!');
      return hasCb ? cb(err, null) : reject(err);
}

This fix should solve issue #123

kylefarris commented 2 months ago

Your changes have been added to v2.2.2. Thank you for your contribution!

kylefarris commented 2 months ago

Closes #123