You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
smb4k/smb4k/core/smb4ksambaoptionshandler.h

256 lines
9.2 KiB

/***************************************************************************
smb4ksambaoptionshandler - This class handles the Samba options.
-------------------
begin : So Mai 14 2006
copyright : (C) 2006-2007 by Alexander Reinholdt
email : dustpuppy@users.berlios.de
***************************************************************************/
/***************************************************************************
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program 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 *
* General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301 USA *
***************************************************************************/
#ifndef SMB4KSAMBAOPTIONSHANDLER_H
#define SMB4KSAMBAOPTIONSHANDLER_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
// TQt includes
#include <tqobject.h>
#include <tqmap.h>
// KDE includes
#include <kdemacros.h>
#include <tdeconfig.h>
// forward declarations
class Smb4KSambaOptionsInfo;
class Smb4KShare;
/**
* This class belongs to the core classes of Smb4K and handles the global
* and the custom Samba options.
*
* @author Alexander Reinholdt <dustpuppy@mail.berlios.de>
*/
class KDE_EXPORT Smb4KSambaOptionsHandler : public TQObject
{
TQ_OBJECT
public:
/**
* The constructor
*
* @param parent The parent object
*
* @param name The name of this object
*/
Smb4KSambaOptionsHandler( TQObject *parent = 0, const char *name = 0 );
/**
* The destructor
*/
~Smb4KSambaOptionsHandler();
/**
* Retrieve the list of shares that have custom options defined.
* You will not only get those options that have different ports etc.
* defined but also all shares that are to be remounted.
*
* @returns the list of all shares that have custom options defined.
*/
const TQValueList<Smb4KSambaOptionsInfo *> &customOptionsList();
/**
* This functions sets the remount flag of the share @p share to TRUE or FALSE.
* In case the share is not yet in the list of shares that are to be remounted,
* it will be added. If you set the remount flag to FALSE on an existing entry,
* it will stay in the list even if no other custom options were defined.
*
* @param share The Smb4KShare object that represents the share
*
* @param yes TRUE if you want the share to be remounted and FALSE
* otherwise
*/
void remount( Smb4KShare *share, bool yes );
/**
* Commit the whole list of shares with custom options to the configuration
* file. You should call this if you exit the application.
*/
void sync();
/**
* This function returns the line of arguments for the 'smbclient' program.
* The arguments are spcific to the share that is defined by @p share. You have
* to provide the name of the shares - as always - in the form //HOST/SHARE.
*
* @param share The name of the share.
*
* @returns a list of arguments for use with the 'smbclient' program.
*/
const TQString smbclientOptions( const TQString &share = TQString() );
/**
* This function returns the "global" options for nmblookup, i.e. the domain
* the client is in, if Kerberos should be used, etc.
*
* @param with_broadcast Return the global broadcast address if defined.
*
* @returns a string with the "global" options for nmblookup
*/
const TQString nmblookupOptions( bool with_broadcast = true );
/**
* This function returns the options defined in the global section of the smb.conf
* file. All option names have been converted to lower case and you can find each
* entry by providing the option name in lowercase (!) as key.
*
* @returns a list of the options defined in smb.conf.
*/
const TQMap<TQString,TQString> &globalSambaOptions();
/**
* This function returns the WINS server the system is using.
*
* @returns the name or IP of the WINS server
*/
const TQString &winsServer();
/**
* This enumeration is for use with the netOptions() function. It tells which
* command to use.
*/
enum NetCommand { Share, ServerDomain, LookupHost, LookupMaster, Domain };
/**
* This function returns the options for the net command.
*
* @param command One of the entries of the NetCommand enumeration.
*
* @param networkItem The name of the network Item. May be empty.
*
* @param protocol Force a certain protocol (rap/rpc/ads) to be used.
*
* @returns the list of arguments for the net command or TQString() if an error occurred.
*/
const TQString netOptions( int command, const TQString &networkItem, const TQString &protocol = TQString() );
/**
* This function returns the options for smbmount/mount.cifs under Linux
* and similar operating systems or for mount_smbfs under FreeBSD.
*
* Note: Under Linux etc. this is a comma-separated list which ends with
* a comma, so remember this when you build up the command line.
*
* @param share The share that is to be mounted.
*/
const TQString mountOptions( const TQString &share );
/**
* Find a network item in the list.
*
* Please note that if the host where a share you are probing for
* is located, a pointer to this *host* item will be returned unless
* you set @p exactMatch to TRUE in which case NULL is returned! If
* neither the host nor the share is found, NULL is returned.
*
* @param item The name of the network item to find.
*
* @param exactMatch The name has to match exactly the result that's returned.
*
* @returns the network item.
*/
Smb4KSambaOptionsInfo *findItem( const TQString &item, bool exactMatch = false ) { return find_item( item, exactMatch ); }
/**
* Add a new Smb4KSambaOptionsInfo object to the list of custom options. If the item already exists,
* the old options will be replaced by the new ones.
*
* @param info The Smb4KSambaOptionsInfo object
*
* @param sync If TRUE, the list is sync'ed with the config file.
*/
void addItem( Smb4KSambaOptionsInfo *info, bool sync );
/**
* Remove an item from the list.
*
* @param name The name of the item.
*
* @param sync If TRUE, the list is sync'ed with the config file.
*/
void removeItem( const TQString &name, bool sync );
private:
/**
* The list of network items that have custom options defined.
*/
TQValueList<Smb4KSambaOptionsInfo *> m_list;
/**
* This function reads the options from the config file.
*/
void read_options();
/**
* Write the list of custom shares to the file.
*/
void write_options();
/**
* This function searches a particular network item in the list. If this item is a share
* and it is not found, @p exactMatch determines if NULL is returned or if the values of
* the item that matches @p item closest (i.e. the host, or another share that's located
* on the host). In most cases you want @p exactMatch to be FALSE.
* Please note: Do not delete the pointer that's returned by this function or you will
* remove an item from the list!
*
* @param item The name of the network item.
*
* @param exactMatch The name has to match exactly the result that's returned.
*
* @returns The Smb4KSambaOptionsInfo object associated with the network item.
*/
Smb4KSambaOptionsInfo *find_item( const TQString &item, bool exactMatch = false );
/**
* This function reads the entries of the global section of Samba's configuration
* file smb.conf and puts them into a map.
*/
void read_smb_conf();
/**
* This map carries the options defined in the [global] section of Samba's configuration
* file smb.conf. You can access a certain value by providing the lower case option name
* as key.
*/
TQMap<TQString,TQString> m_samba_options;
/**
* The WINS server
*/
TQString m_wins_server;
};
#endif