diff options
Diffstat (limited to 'opensuse/tdelibs/fileshare.diff')
-rw-r--r-- | opensuse/tdelibs/fileshare.diff | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/opensuse/tdelibs/fileshare.diff b/opensuse/tdelibs/fileshare.diff new file mode 100644 index 000000000..86f7d0941 --- /dev/null +++ b/opensuse/tdelibs/fileshare.diff @@ -0,0 +1,296 @@ +--- kio/kfile/kfilesharedlg.cpp ++++ kio/kfile/kfilesharedlg.cpp 2004/08/06 08:38:31 +@@ -24,6 +24,7 @@ + #include <qradiobutton.h> + #include <qbuttongroup.h> + #include <qlayout.h> ++#include <qlineedit.h> + #include <kprocess.h> + #include <kprocio.h> + #include <klocale.h> +@@ -93,8 +94,10 @@ + delete m_widget; + m_rbShare = 0L; + m_rbUnShare = 0L; ++ m_rbSharerw = 0L; + m_widget = new QWidget( d->m_vBox ); + QVBoxLayout * vbox = new QVBoxLayout( m_widget ); ++ //QHBoxLayout * hbox = new QHBoxLayout( vbox ); + + switch ( KFileShare::authorization() ) { + case KFileShare::Authorized: +@@ -105,18 +108,31 @@ + home += '/'; + bool ok = true; + KFileItemList items = properties->items(); +- // We have 3 possibilities: all shared, all unshared, or mixed. ++ // We have some possibilities: all shared, all unshared (ro,rw), or mixed. + bool allShared = true; + bool allUnshared = true; ++ bool allreadonly = true; + KFileItemListIterator it( items ); + for ( ; it.current() && ok; ++it ) { + QString path = (*it)->url().path(); ++ ++ // 0 => not shared ++ // 1 => shared read only ++ // 3 => shared writeable ++ int dirStatus = KFileShare::isDirectoryShared( path ); + if ( !path.startsWith( home ) ) + ok = false; +- if ( KFileShare::isDirectoryShared( path ) ) ++ if ( dirStatus == 1 ) { + allUnshared = false; +- else ++ } ++ else if ( dirStatus == 3 ) { ++ allUnshared = false; ++ allreadonly = false; ++ } ++ else { + allShared = false; ++ allreadonly = false; ++ } + } + if ( !ok ) + { +@@ -136,16 +152,31 @@ + vbox->addWidget( m_rbUnShare, 0 ); + rbGroup->insert( m_rbUnShare ); + +- m_rbShare = new QRadioButton( i18n("Shared"), m_widget ); ++ m_rbShare = new QRadioButton( i18n("Shared - read only for others"), m_widget ); + connect( m_rbShare, SIGNAL( toggled(bool) ), SIGNAL( changed() ) ); + vbox->addWidget( m_rbShare, 0 ); + rbGroup->insert( m_rbShare ); + ++ m_rbSharerw = new QRadioButton( i18n("Shared - writeable for others"), m_widget ); ++ connect( m_rbSharerw, SIGNAL( toggled(bool) ), SIGNAL( changed() ) ); ++ vbox->addWidget( m_rbSharerw, 0 ); ++ rbGroup->insert( m_rbSharerw ); ++ ++ //QLabel *testlabel1 = new QLabel(i18n("Enter Samba Share Name here"),m_widget); ++ //m_leSmbShareName = new QLineEdit(m_widget); ++ //m_leSmbShareName->setMaxLength(12); ++ ++ //hbox->addWidget( testlabel1, 0 ); ++ //hbox->addWidget( m_leSmbShareName ); ++ //vbox->addLayout( hbox ); ++ + // Activate depending on status + if ( allShared ) +- m_rbShare->setChecked(true); ++ m_rbSharerw->setChecked(true); + if ( allUnshared ) + m_rbUnShare->setChecked(true); ++ if ( allreadonly ) ++ m_rbShare->setChecked(true); + + // Some help text + QLabel *label = new QLabel( i18n("Sharing this folder makes it available under Linux/UNIX (NFS) and Windows (Samba).") , m_widget ); +@@ -204,7 +235,7 @@ + void KFileSharePropsPlugin::applyChanges() + { + kdDebug() << "KFileSharePropsPlugin::applyChanges" << endl; +- if ( m_rbShare && m_rbUnShare ) ++ if ( m_rbShare && m_rbUnShare && m_rbSharerw ) + { + bool share = m_rbShare->isChecked(); + KFileItemList items = properties->items(); +@@ -212,7 +243,7 @@ + bool ok = true; + for ( ; it.current() && ok; ++it ) { + QString path = (*it)->url().path(); +- ok = setShared( path, share ); ++ ok = SuSEsetShared( path, share, m_rbSharerw->isChecked() ); + if (!ok) { + if (share) + KMessageBox::detailedError(properties, +@@ -239,8 +270,14 @@ + + bool KFileSharePropsPlugin::setShared( const QString& path, bool shared ) + { +- kdDebug() << "KFileSharePropsPlugin::setShared " << path << "," << shared << endl; +- return KFileShare::setShared( path, shared ); ++ return SuSEsetShared( path, shared, true ); ++} ++ ++bool KFileSharePropsPlugin::SuSEsetShared( const QString& path, bool shared, bool readonly ) ++{ ++ kdDebug() << "KFileSharePropsPlugin::setShared " << path << "," ++ << shared << readonly << endl; ++ return KFileShare::SuSEsetShared( path, shared, readonly ); + } + + QWidget* KFileSharePropsPlugin::page() const +--- kio/kfile/kfilesharedlg.h ++++ kio/kfile/kfilesharedlg.h 2004/08/06 08:38:31 +@@ -54,10 +54,13 @@ + private: + void init(); + bool setShared( const QString&path, bool shared ); ++ bool SuSEsetShared( const QString&path, bool shared, bool readonly ); + + QWidget *m_widget; + QRadioButton *m_rbShare; ++ QRadioButton *m_rbSharerw; + QRadioButton *m_rbUnShare; ++ //QLineEdit *m_leSmbShareName; + QPushButton *m_pbConfig; + class Private; + Private *d; +--- kio/kio/kfileshare.cpp ++++ kio/kio/kfileshare.cpp 2004/08/06 08:38:51 +@@ -20,6 +20,7 @@ + #include "kfileshare.h" + #include <qdir.h> + #include <qfile.h> ++#include <qregexp.h> + #include <kprocess.h> + #include <kprocio.h> + #include <klocale.h> +@@ -35,8 +36,10 @@ + #include <kuser.h> + + KFileShare::Authorization KFileShare::s_authorization = NotInitialized; +-QStringList* KFileShare::s_shareList = 0L; +-static KStaticDeleter<QStringList> sdShareList; ++//QStringList* KFileShare::s_shareList = 0L; ++//static KStaticDeleter<QStringList> sdShareList; ++QMap<QString,QString>* KFileShare::s_shareMap = 0L; ++static KStaticDeleter<QMap<QString,QString> > sdShareMap; + + KFileShare::ShareMode KFileShare::s_shareMode; + bool KFileShare::s_sambaEnabled; +@@ -164,10 +167,10 @@ + void KFileShare::readShareList() + { + KFileSharePrivate::self(); +- if ( !s_shareList ) +- sdShareList.setObject( s_shareList, new QStringList ); ++ if ( !s_shareMap ) ++ sdShareMap.setObject( s_shareMap, new QMap<QString,QString> ); + else +- s_shareList->clear(); ++ s_shareMap->clear(); + + // /usr/sbin on Mandrake, $PATH allows flexibility for other distributions + QString exe = findExe( "filesharelist" ); +@@ -185,29 +188,45 @@ + + // Reading code shamelessly stolen from khostname.cpp ;) + QString line; ++ QString options; ++ QString path; + int length; ++ QRegExp rx_line("([^\\s]+)\\s+(.*)"); + do { + length = proc.readln(line, true); + if ( length > 0 ) + { + if ( line[length-1] != '/' ) + line += '/'; +- s_shareList->append(line); ++ if( rx_line.search( line ) != -1 ) { ++ options = rx_line.cap(1); ++ path = rx_line.cap(2); ++ (*s_shareMap)[path] = options; ++ } + kdDebug(7000) << "Shared dir:" << line << endl; + } + } while (length > -1); + } + + +-bool KFileShare::isDirectoryShared( const QString& _path ) ++int KFileShare::isDirectoryShared( const QString& _path ) + { +- if ( ! s_shareList ) ++ int ret(0); ++ ++ if ( ! s_shareMap ) + readShareList(); + + QString path( _path ); + if ( path[path.length()-1] != '/' ) + path += '/'; +- return s_shareList && s_shareList->contains( path ); ++ //return s_shareList && s_shareList->contains( path ); ++ if( (*s_shareMap).contains(path) && !((*s_shareMap)[path].isEmpty()) ) { ++ ret+=1; ++ if( (*s_shareMap)[path].find("readwrite") != -1 ) ++ ret+=2; ++ } ++ ++ return ret; + } + + KFileShare::Authorization KFileShare::authorization() +@@ -230,17 +249,30 @@ + + bool KFileShare::setShared( const QString& path, bool shared ) + { ++ return SuSEsetShared( path, shared, false ); ++} ++ ++bool KFileShare::SuSEsetShared( const QString& path, bool shared, bool rw ) ++{ + if (! KFileShare::sharingEnabled() || + KFileShare::shareMode() == Advanced) + return false; + +- kdDebug(7000) << "KFileShare::setShared " << path << "," << shared << endl; + QString exe = KFileShare::findExe( "fileshareset" ); + if (exe.isEmpty()) + return false; +- ++ ++ // we want to share, so we kick it first - just to be sure + KProcess proc; + proc << exe; ++ proc << "--remove"; ++ proc << path; ++ proc.start( KProcess::Block ); ++ proc.clearArguments(); ++ ++ proc << exe; ++ if( rw ) ++ proc << "--rw"; + if ( shared ) + proc << "--add"; + else +--- kio/kio/kfileshare.h ++++ kio/kio/kfileshare.h 2004/08/06 08:38:31 +@@ -65,7 +65,7 @@ + /** + * Call this to know if a directory is currently shared + */ +- static bool isDirectoryShared( const QString& path ); ++ static int isDirectoryShared( const QString& path ); + + enum Authorization { NotInitialized, ErrorNotFound, Authorized, UserNotAllowed }; + /** +@@ -83,7 +83,12 @@ + * @returns wether the perl script was successful + */ + static bool setShared( const QString& path, bool shared ); +- ++ ++ /* ++ * SuSE only enhancement for now ++ */ ++ static bool SuSEsetShared( const QString& path, bool shared, bool ro ); ++ + /** + * The used share mode. + * Simple means that the simple sharing dialog is used and +@@ -132,7 +137,8 @@ + + private: + static Authorization s_authorization; +- static QStringList* s_shareList; ++// static QStringList* s_shareList; ++ static QMap<QString,QString>* s_shareMap; + static ShareMode s_shareMode; + static bool s_sambaEnabled; + static bool s_nfsEnabled; |