summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2002-04-22 23:59:40 (UTC)
committer llornkcor <llornkcor>2002-04-22 23:59:40 (UTC)
commitb3190f8be01fb364f89d9de0a0dddb9a5ccebe77 (patch) (side-by-side diff)
tree6bcc72e9a0b2b1259f1556dd31203e60d6792568
parent01ddcc2d67eb928eec6018e7e355820f2458b74f (diff)
downloadopie-b3190f8be01fb364f89d9de0a0dddb9a5ccebe77.zip
opie-b3190f8be01fb364f89d9de0a0dddb9a5ccebe77.tar.gz
opie-b3190f8be01fb364f89d9de0a0dddb9a5ccebe77.tar.bz2
fixed pro and added file permissions
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieftp/filePermissions.cpp276
-rw-r--r--noncore/net/opieftp/filePermissions.h58
-rw-r--r--noncore/net/opieftp/opieftp.pro4
3 files changed, 336 insertions, 2 deletions
diff --git a/noncore/net/opieftp/filePermissions.cpp b/noncore/net/opieftp/filePermissions.cpp
new file mode 100644
index 0000000..ab094db
--- a/dev/null
+++ b/noncore/net/opieftp/filePermissions.cpp
@@ -0,0 +1,276 @@
+/****************************************************************************
+** copyright 2002 ljp ljp@llornkcor.com
+** Created: Sat Feb 23 19:44:40 2002 L.J. Potter
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+#include "filePermissions.h"
+
+#include <qfile.h>
+#include <qfileinfo.h>
+
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qlineedit.h>
+#include <qlayout.h>
+#include <qvariant.h>
+#include <qtooltip.h>
+#include <qmessagebox.h>
+
+#include <unistd.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <pwd.h>
+#include <grp.h>
+
+filePermissions::filePermissions( QWidget* parent, const char* name, bool modal, WFlags fl, const QString &fileName, bool useRemote )
+ : QDialog( parent, name, modal, fl )
+{
+ if ( !name )
+ setName( tr("filePermissions") );
+// qDebug("FilePermissions "+fileName);
+ resize( 236, 210 );
+ isRemote=useRemote;
+ setMaximumSize( QSize( 236, 210 ) );
+ setCaption( tr( "Set File Permissions" ) );
+
+ TextLabel1 = new QLabel( this, "TextLabel1" );
+ TextLabel1->setGeometry( QRect( 25, 5, 175, 20 ) );
+ TextLabel1->setText( tr( "Set file permissions for:" ) );
+
+ LineEdit1 = new QLineEdit( this, "LineEdit1" );
+ LineEdit1->setGeometry( QRect( 10, 25, 218, 22 ) );
+ LineEdit1->setReadOnly(true);
+
+ TextLabel4 = new QLabel( this, "TextLabel4" );
+ TextLabel4->setGeometry( QRect( 5, 85, 50, 15 ) );
+ TextLabel4->setText( tr( "owner" ) );
+
+ TextLabel4_2 = new QLabel( this, "TextLabel4_2" );
+ TextLabel4_2->setGeometry( QRect( 5, 105, 50, 15 ) );
+ TextLabel4_2->setText( tr( "group" ) );
+
+ TextLabel4_3 = new QLabel( this, "TextLabel4_3" );
+ TextLabel4_3->setGeometry( QRect( 5, 125, 50, 15 ) );
+ TextLabel4_3->setText( tr( "others" ) );
+
+ CheckBox1 = new QCheckBox( this, "CheckBox1" );
+ CheckBox1->setGeometry( QRect( 75, 85, 20, 16 ) );
+ connect(CheckBox1, SIGNAL(released()),this,SLOT(ownReadCheck()));
+
+ CheckBox1_2 = new QCheckBox( this, "CheckBox1_2" );
+ CheckBox1_2->setGeometry( QRect( 135, 85, 20, 16 ) );
+ connect(CheckBox1_2, SIGNAL(released()),this,SLOT(ownWriteCheck()));
+
+ CheckBox1_3 = new QCheckBox( this, "CheckBox1_3" );
+ CheckBox1_3->setGeometry( QRect( 195, 85, 20, 16 ) );
+ connect(CheckBox1_3, SIGNAL(released()),this,SLOT(ownExeCheck()));
+
+ CheckBox1_4 = new QCheckBox( this, "CheckBox1_4" );
+ CheckBox1_4->setGeometry( QRect( 75, 105, 20, 16 ) );
+ connect(CheckBox1_4, SIGNAL(released()),this,SLOT(grpReadCheck()));
+
+ CheckBox1_5 = new QCheckBox( this, "CheckBox1_5" );
+ CheckBox1_5->setGeometry( QRect( 135, 105, 20, 16 ) );
+ connect(CheckBox1_5, SIGNAL(released()),this,SLOT(grpWriteCheck()));
+
+ CheckBox1_6 = new QCheckBox( this, "CheckBox1_6" );
+ CheckBox1_6->setGeometry( QRect( 195, 105, 20, 16 ) );
+ connect(CheckBox1_6, SIGNAL(released()),this,SLOT(grpExeCheck()));
+
+ CheckBox1_7 = new QCheckBox( this, "CheckBox1_7" );
+ CheckBox1_7->setGeometry( QRect( 75, 125, 16, 16 ) );
+ connect(CheckBox1_7, SIGNAL(released()),this,SLOT(wrldReadCheck()));
+
+ CheckBox1_8 = new QCheckBox( this, "CheckBox1_8" );
+ CheckBox1_8->setGeometry( QRect( 135, 125, 20, 16 ) );
+ connect(CheckBox1_8, SIGNAL(released()),this,SLOT(wrldWriteCheck()));
+
+ CheckBox1_8_2 = new QCheckBox( this, "CheckBox1_8_2" );
+ CheckBox1_8_2->setGeometry( QRect( 195, 125, 20, 16 ) );
+ connect(CheckBox1_8_2, SIGNAL(released()),this,SLOT(wrldExeCheck()));
+
+ GroupLineEdit = new QLineEdit( this, "GroupLineEdit" );
+ GroupLineEdit->setGeometry( QRect( 125, 155, 106, 22 ) );
+
+ OwnerLineEdit = new QLineEdit( this, "OwnerLineEdit" );
+ OwnerLineEdit->setGeometry( QRect( 10, 155, 106, 22 ) );
+
+ TextLabel5 = new QLabel( this, "TextLabel5" );
+ TextLabel5->setGeometry( QRect( 45, 180, 40, 16 ) );
+ TextLabel5->setText( tr( "Owner" ) );
+
+ TextLabel5_2 = new QLabel( this, "TextLabel5_2" );
+ TextLabel5_2->setGeometry( QRect( 155, 180, 40, 16 ) );
+ TextLabel5_2->setText( tr( "Group" ) );
+
+ ModeLine = new QLineEdit( this, "TextLabelMode" );
+ ModeLine->setGeometry( QRect( 10, 60, 40, 15 ) );
+
+ TextLabel3_2 = new QLabel( this, "TextLabel3_2" );
+ TextLabel3_2->setGeometry( QRect( 60, 55, 50, 20 ) );
+ TextLabel3_2->setText( tr( "read" ) );
+ TextLabel3_2->setAlignment( int( QLabel::AlignBottom | QLabel::AlignHCenter ) );
+
+ TextLabel3_2_2 = new QLabel( this, "TextLabel3_2_2" );
+ TextLabel3_2_2->setGeometry( QRect( 120, 55, 50, 20 ) );
+ TextLabel3_2_2->setText( tr( "write" ) );
+ TextLabel3_2_2->setAlignment( int( QLabel::AlignBottom | QLabel::AlignHCenter ) );
+
+ TextLabel3 = new QLabel( this, "TextLabel3" );
+ TextLabel3->setGeometry( QRect( 180, 55, 50, 20 ) );
+ TextLabel3->setText( tr( "execute" ) );
+ TextLabel3->setAlignment( int( QLabel::AlignBottom | QLabel::AlignHCenter ) );
+
+ struct stat buf;
+ mode_t mode;
+ file = fileName;
+ QFileInfo fi(file);
+
+ LineEdit1->setText( file);
+ OwnerLineEdit->setText( fi.owner());
+ GroupLineEdit->setText( fi.group());
+
+ if( fi.permission( QFileInfo::ReadUser)) { CheckBox1->setChecked(true); }
+ if( fi.permission( QFileInfo::WriteUser)) { CheckBox1_2->setChecked(true); }
+ if( fi.permission( QFileInfo::ExeUser)) { CheckBox1_3->setChecked(true); }
+
+ if( fi.permission( QFileInfo::ReadGroup)) { CheckBox1_4->setChecked(true); }
+ if( fi.permission( QFileInfo::WriteGroup)) { CheckBox1_5->setChecked(true); }
+ if( fi.permission( QFileInfo::ExeGroup)) { CheckBox1_6->setChecked(true); }
+
+ if( fi.permission( QFileInfo::ReadOther)) { CheckBox1_7->setChecked(true); }
+ if( fi.permission( QFileInfo::WriteOther)) { CheckBox1_8->setChecked(true); }
+ if( fi.permission( QFileInfo::ExeOther)) { CheckBox1_8_2->setChecked(true); }
+
+ stat(file.latin1(), &buf);
+ mode = buf.st_mode;
+ modeStr.sprintf("%#o", buf.st_mode & ~(S_IFMT) );
+ ModeLine->setText(modeStr);
+ bool ok;
+ i_mode = modeStr.toInt(&ok,10);
+
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+filePermissions::~filePermissions()
+{
+}
+
+
+// might this be better as a callback routine???
+void filePermissions::ownReadCheck() {
+ if(CheckBox1->isChecked()) { i_mode +=400; }
+ else i_mode -=400;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText( modeStr);
+// 0400
+}
+
+void filePermissions::ownWriteCheck() {
+ if(CheckBox1_2->isChecked()) { i_mode +=200; }
+ else i_mode -=200;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0200
+}
+
+void filePermissions::ownExeCheck() {
+ if(CheckBox1_3->isChecked()) { i_mode +=100; }
+ else i_mode -=100;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0100
+}
+
+void filePermissions::grpReadCheck() {
+ if(CheckBox1_4->isChecked()) { i_mode +=40; }
+ else i_mode -=40;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0040
+}
+
+void filePermissions::grpWriteCheck() {
+ if(CheckBox1_5->isChecked()) { i_mode +=20; }
+ else i_mode -=20;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0020
+}
+
+void filePermissions::grpExeCheck() {
+ if(CheckBox1_6->isChecked()) { i_mode +=10; }
+ else i_mode -=10;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0010
+}
+
+void filePermissions::wrldReadCheck() {
+ if(CheckBox1_7->isChecked()) { i_mode +=4; }
+ else i_mode -=4;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0004
+}
+
+void filePermissions::wrldWriteCheck() {
+ if(CheckBox1_8->isChecked()) { i_mode +=2; }
+ else i_mode -=2;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0002
+}
+
+void filePermissions::wrldExeCheck() {
+ if(CheckBox1_8_2->isChecked()) { i_mode +=1; }
+ else i_mode -=1;
+ modeStr.sprintf("0%d",i_mode);
+ ModeLine->setText(modeStr);
+// 0001
+}
+
+void filePermissions::accept() {
+ QFileInfo fi(file);
+ struct passwd *pwd=0;
+ struct group *grp=0;
+ pwd = getpwnam(OwnerLineEdit->text().latin1() );
+ if(pwd == NULL) {
+ perror("getpwnam");
+ QMessageBox::warning(this,tr("Warning"),tr("Error- no user"));
+ return;
+ } else {
+ grp = getgrnam(GroupLineEdit->text().latin1());
+ if(grp==NULL) {
+ perror("getgrnam");
+ QMessageBox::warning(this,tr("Warning"),tr("Error- no group"));
+ return;
+ }
+ if( chown( file.latin1(), pwd->pw_uid, grp->gr_gid) <0) {
+ perror("chown");
+ QMessageBox::warning(this,tr("Warning"),tr("Error setting ownership or group"));
+ return;
+ }
+ bool ok;
+ moder = modeStr.toUInt(&ok,8);
+ if (!isRemote) {
+ if( chmod( file.latin1(), moder) < 0) {
+ perror("chmod");
+ QMessageBox::warning(this,tr("Warning"),tr("Error setting mode"));
+ return;
+ }
+ }
+}
+ close();
+}
diff --git a/noncore/net/opieftp/filePermissions.h b/noncore/net/opieftp/filePermissions.h
new file mode 100644
index 0000000..b8f3776
--- a/dev/null
+++ b/noncore/net/opieftp/filePermissions.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+** copyright 2002 ljp ljp@llornkcor.com
+** Created: Sat Feb 23 19:44:17 2002
+**
+** This file may be distributed and/or modified under the terms of the
+** GNU General Public License version 2 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+#ifndef FILEPERMISSIONS_H
+#define FILEPERMISSIONS_H
+
+#include <qvariant.h>
+#include <qdialog.h>
+class QVBoxLayout;
+class QHBoxLayout;
+class QGridLayout;
+class QCheckBox;
+class QLabel;
+class QLineEdit;
+class QString;
+
+class filePermissions : public QDialog
+{
+ Q_OBJECT
+
+public:
+ filePermissions( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 , const QString & fileName ="", bool useRemote = FALSE);
+ ~filePermissions();
+
+ QLineEdit *LineEdit1, *ModeLine;
+ QLabel *TextLabel1, *TextLabel4, *TextLabel4_2, *TextLabel4_3, *TextLabel3_2_2, *TextLabel3_2, *TextLabel3, *TextLabel5_2, *TextLabel5;
+ QCheckBox*CheckBox1, *CheckBox1_3, *CheckBox1_2, *CheckBox1_4, *CheckBox1_5, *CheckBox1_6, *CheckBox1_7, *CheckBox1_8, *CheckBox1_8_2;
+ QLineEdit*GroupLineEdit, *OwnerLineEdit;
+ QString modeStr, file;
+ int i_mode;
+ uint moder;
+ bool isRemote;
+private slots:
+ void ownReadCheck();
+ void ownWriteCheck();
+ void ownExeCheck();
+
+ void grpReadCheck();
+ void grpWriteCheck();
+ void grpExeCheck();
+
+ void wrldReadCheck();
+ void wrldWriteCheck();
+ void wrldExeCheck();
+ void accept();
+};
+
+#endif // FILEPERMISSIONS_H
diff --git a/noncore/net/opieftp/opieftp.pro b/noncore/net/opieftp/opieftp.pro
index 7aead00..f25d15f 100644
--- a/noncore/net/opieftp/opieftp.pro
+++ b/noncore/net/opieftp/opieftp.pro
@@ -1,7 +1,7 @@
TEMPLATE = app
CONFIG += qt warn_on release
-HEADERS = opieftp.h inputDialog.h ftplib.h filePermissions.h
-SOURCES = opieftp.cpp inputDialog.cpp ftplib.c filePermissions.cpp main.cpp
+HEADERS = opieftp.h inputDialog.h ftplib.h
+SOURCES = opieftp.cpp inputDialog.cpp ftplib.c main.cpp
TARGET = opieftp
REQUIRES=medium-config
DESTDIR = $(OPIEDIR)/bin