summaryrefslogtreecommitdiffstats
path: root/kioslave/smb/kio_smb_mount.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kioslave/smb/kio_smb_mount.cpp')
-rw-r--r--kioslave/smb/kio_smb_mount.cpp211
1 files changed, 0 insertions, 211 deletions
diff --git a/kioslave/smb/kio_smb_mount.cpp b/kioslave/smb/kio_smb_mount.cpp
deleted file mode 100644
index ad421f631..000000000
--- a/kioslave/smb/kio_smb_mount.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/* This file is part of the KDE project
-
- Copyright (C) 2000 Alexander Neundorf <neundorf@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kio_smb.h"
-#include <kstandarddirs.h>
-#include <tqcstring.h>
-#include <unistd.h>
-#include <tqdir.h>
-#include <kprocess.h>
-
-void SMBSlave::readOutput(TDEProcess *, char *buffer, int buflen)
-{
- mybuf += TQString::fromLocal8Bit(buffer, buflen);
-}
-
-void SMBSlave::readStdErr(TDEProcess *, char *buffer, int buflen)
-{
- mystderr += TQString::fromLocal8Bit(buffer, buflen);
-}
-
-void SMBSlave::special( const TQByteArray & data)
-{
- kdDebug(KIO_SMB)<<"Smb::special()"<<endl;
- int tmp;
- TQDataStream stream(data, IO_ReadOnly);
- stream >> tmp;
- //mounting and umounting are both blocking, "guarded" by a SIGALARM in the future
- switch (tmp)
- {
- case 1:
- case 3:
- {
- TQString remotePath, mountPoint, user;
- stream >> remotePath >> mountPoint;
-
- TQStringList sl=TQStringList::split("/",remotePath);
- TQString share,host;
- if (sl.count()>=2)
- {
- host=(*sl.at(0)).mid(2);
- share=(*sl.at(1));
- kdDebug(KIO_SMB)<<"special() host -"<< host <<"- share -" << share <<"-"<<endl;
- }
-
- remotePath.replace('\\', '/'); // smbmounterplugin sends \\host/share
-
- kdDebug(KIO_SMB) << "mounting: " << remotePath.local8Bit() << " to " << mountPoint.local8Bit() << endl;
-
- if (tmp==3) {
- if (!KStandardDirs::makeDir(mountPoint)) {
- error(TDEIO::ERR_COULD_NOT_MKDIR, mountPoint);
- return;
- }
- }
- mybuf.truncate(0);
- mystderr.truncate(0);
-
- SMBUrl smburl("smb:///");
- smburl.setHost(host);
- smburl.setPath("/" + share);
-
- if ( !checkPassword(smburl) )
- {
- finished();
- return;
- }
-
- // using smbmount instead of "mount -t smbfs", because mount does not allow a non-root
- // user to do a mount, but a suid smbmnt does allow this
-
- TDEProcess proc;
- proc.setUseShell(true); // to have the path to smbmnt (which is used by smbmount); see man smbmount
- proc << "smbmount";
-
- TQString options;
-
- if ( smburl.user().isEmpty() )
- {
- user = "guest";
- options = "-o guest";
- }
- else
- {
- options = "-o username=" + TDEProcess::quote(smburl.user());
- user = smburl.user();
-
- if ( ! smburl.pass().isEmpty() )
- options += ",password=" + TDEProcess::quote(smburl.pass());
- }
-
- // TODO: check why the control center uses encodings with a blank char, e.g. "cp 1250"
- //if ( ! m_default_encoding.isEmpty() )
- //options += ",codepage=" + TDEProcess::quote(m_default_encoding);
-
- proc << TDEProcess::quote(remotePath.local8Bit());
- proc << TDEProcess::quote(mountPoint.local8Bit());
- proc << options;
-
- connect(&proc, TQT_SIGNAL( receivedStdout(TDEProcess *, char *, int )),
- TQT_SLOT(readOutput(TDEProcess *, char *, int)));
-
- connect(&proc, TQT_SIGNAL( receivedStderr(TDEProcess *, char *, int )),
- TQT_SLOT(readStdErr(TDEProcess *, char *, int)));
-
- if (!proc.start( TDEProcess::Block, TDEProcess::AllOutput ))
- {
- error(TDEIO::ERR_CANNOT_LAUNCH_PROCESS,
- "smbmount"+i18n("\nMake sure that the samba package is installed properly on your system."));
- return;
- }
-
- kdDebug(KIO_SMB) << "mount exit " << proc.exitStatus() << endl
- << "stdout:" << mybuf << endl << "stderr:" << mystderr << endl;
-
- if (proc.exitStatus() != 0)
- {
- error( TDEIO::ERR_COULD_NOT_MOUNT,
- i18n("Mounting of share \"%1\" from host \"%2\" by user \"%3\" failed.\n%4")
- .arg(share).arg(host).arg(user).arg(mybuf + "\n" + mystderr));
- return;
- }
-
- finished();
- }
- break;
- case 2:
- case 4:
- {
- TQString mountPoint;
- stream >> mountPoint;
-
- TDEProcess proc;
- proc.setUseShell(true);
- proc << "smbumount";
- proc << TDEProcess::quote(mountPoint);
-
- mybuf.truncate(0);
- mystderr.truncate(0);
-
- connect(&proc, TQT_SIGNAL( receivedStdout(TDEProcess *, char *, int )),
- TQT_SLOT(readOutput(TDEProcess *, char *, int)));
-
- connect(&proc, TQT_SIGNAL( receivedStderr(TDEProcess *, char *, int )),
- TQT_SLOT(readStdErr(TDEProcess *, char *, int)));
-
- if ( !proc.start( TDEProcess::Block, TDEProcess::AllOutput ) )
- {
- error(TDEIO::ERR_CANNOT_LAUNCH_PROCESS,
- "smbumount"+i18n("\nMake sure that the samba package is installed properly on your system."));
- return;
- }
-
- kdDebug(KIO_SMB) << "smbumount exit " << proc.exitStatus() << endl
- << "stdout:" << mybuf << endl << "stderr:" << mystderr << endl;
-
- if (proc.exitStatus() != 0)
- {
- error(TDEIO::ERR_COULD_NOT_UNMOUNT,
- i18n("Unmounting of mountpoint \"%1\" failed.\n%2")
- .arg(mountPoint).arg(mybuf + "\n" + mystderr));
- return;
- }
-
- if ( tmp == 4 )
- {
- bool ok;
-
- TQDir dir(mountPoint);
- dir.cdUp();
- ok = dir.rmdir(mountPoint);
- if ( ok )
- {
- TQString p=dir.path();
- dir.cdUp();
- ok = dir.rmdir(p);
- }
-
- if ( !ok )
- {
- error(TDEIO::ERR_COULD_NOT_RMDIR, mountPoint);
- return;
- }
- }
-
- finished();
- }
- break;
- default:
- break;
- }
- finished();
-}
-
-#include "kio_smb.moc"