| Summary: | cannot browse SMB printers outside local network | ||
|---|---|---|---|
| Product: | [Unmaintained] kdeprint | Reporter: | Gérald Macinenti <gmacinenti> |
| Component: | general | Assignee: | KDEPrint Devel Mailinglist <kde-print-bugs-null> |
| Status: | CLOSED FIXED | ||
| Severity: | wishlist | CC: | jlayt, web |
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Fedora RPMs | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
| Attachments: |
use wins server to browse smb printers outside of the local network
use wins server to browse smb printers outside of the local network (bis) |
||
|
Description
Gérald Macinenti
2005-10-03 10:18:20 UTC
Created attachment 12826 [details]
use wins server to browse smb printers outside of the local network
I won't be able to test this, as I can't create such a setup (not enough computers/routers etc.) I have two quirks with the patch. Of course, better have it this way than not at all, but still: a) isn't /etc/samba/smb.conf distribution dependent? b) according to smb.conf(5) manpage, parameter name and value are not case sensitive (thus, looking for 'wins server' in the file matches only one in 2^10 possibilities -- of course, we're very lucky and most distributors will just use lowercase). Anyways, I'm nitpicking. Thanks for the contribution and if I get a confirmation that the patch applied as given in the current code works, I will add it depending on release schedules. Thanks Created attachment 12936 [details]
use wins server to browse smb printers outside of the local network (bis)
here is an update of my previous patch based on Cristian Tibirna remarks:
1) /etc/samba/smb.conf is "standard" amongst mainstream distributions I know
such as Debian, Redhat Fedora, Suse, if anyone can give a significative
counter-example here, of course would I do the required adaptation
2) smb.conf parsing improved by a more attentiv re-read of man smb.conf ;)
note: this patch was diffed against KDE 3.5 svn sources (the previous used
3.4.2 sources from Fedora)
hope this can help.
SVN commit 469327 by tibirna:
use WINS for SMB printer detection. Thanks to Gerard Macinenti for
patch.
BUG:113763
M +42 -2 smbview.cpp
M +1 -0 smbview.h
--- trunk/KDE/kdelibs/kdeprint/management/smbview.cpp #469326:469327
@@ -31,6 +31,11 @@
#include <kmessagebox.h>
#include <kcursor.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <cstdlib>
+
+
//*********************************************************************************************
SmbView::SmbView(QWidget *parent)
@@ -126,7 +131,42 @@
void SmbView::init()
{
- QString cmd("nmblookup -M -- - | grep '<01>' | awk '{print $1}' | xargs nmblookup -A | grep '<1d>'");
+ // Open Samba configuration file and check if a WINS server is defined
+ m_wins_server = QString::null;
+ QString wins_keyword("wins server");
+ QFile smb_conf ("/etc/samba/smb.conf");
+ if (smb_conf.exists () && smb_conf.open (IO_ReadOnly))
+ {
+ QTextStream smb_stream (&smb_conf);
+ while (!smb_stream.atEnd ())
+ {
+ QString smb_line = smb_stream.readLine ();
+ if (smb_line.contains (wins_keyword, FALSE) > 0)
+ {
+ QString key = smb_line.section ('=', 0, 0);
+ key = key.stripWhiteSpace();
+ if (key.contains(wins_keyword, FALSE) * wins_keyword.contains(key, FALSE) != 1)
+ {
+ continue;
+ }
+ m_wins_server = smb_line.section ('=', 1, 1);
+ // take only the first declared WINS server
+ m_wins_server = m_wins_server.section(',', 0, 0);
+ m_wins_server = m_wins_server.stripWhiteSpace ();
+ m_wins_server = m_wins_server.section(' ', 0, 0);
+ // strip any server tag (see man smb.conf(5))
+ if (m_wins_server.section(':', 1, 1) != NULL)
+ {
+ m_wins_server = m_wins_server.section(':', 1, 1);
+ }
+ break;
+ }
+ }
+ smb_conf.close ();
+ }
+ m_wins_server = m_wins_server.isEmpty ()? " " : " -U " + m_wins_server + " ";
+ QString cmd ("nmblookup" + m_wins_server +
+ "-M -- - | grep '<01>' | awk '{print $1}' | xargs nmblookup -A | grep '<1d>'");
*m_proc << cmd;
startProcess(GroupListing);
}
@@ -138,7 +178,7 @@
if (item->depth() == 0)
{ // opening group
m_current = item;
- *m_proc << "nmblookup -M ";
+ *m_proc << "nmblookup"+m_wins_server+"-M ";
*m_proc << KProcess::quote(item->text(0));
*m_proc << " -S | grep '<20>' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*<20>.*//' | xargs -iserv_name smbclient -N -L 'serv_name' -W ";
*m_proc << KProcess::quote(item->text(0));
--- trunk/KDE/kdelibs/kdeprint/management/smbview.h #469326:469327
@@ -61,6 +61,7 @@
QString m_buffer;
QString m_login, m_password;
KTempFile *m_passwdFile;
+ QString m_wins_server;
};
#endif
*** Bug 103428 has been marked as a duplicate of this bug. *** Closing old Resolved status bug. |