[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdeadmin/kuser
From: Szombathelyi György <gyurco () freemail ! hu>
Date: 2004-08-24 19:47:16
Message-ID: 20040824194716.F2BAD1773 () office ! kde ! org
[Download RAW message or body]
CVS commit by gyurco:
Handle symlinks in /etc/skel correctly. CCMAIL:87887-done@bugs.kde.org
M +49 -44 kuser.cpp 1.75
--- kdeadmin/kuser/kuser.cpp #1.74:1.75
@@ -612,15 +612,13 @@ int KUser::createMailBox()
void KUser::copyDir(const QString &srcPath, const QString &dstPath)
{
- struct stat st;
+ mode_t mode;
QDir s(srcPath);
QDir d(dstPath);
- QString prefix = QFile::decodeName(SKEL_FILE_PREFIX);
- int len = prefix.length();
-
- s.setFilter(QDir::Dirs | QDir::Hidden);
QString dot = QString::fromLatin1(".");
QString dotdot = QString::fromLatin1("..");
+ s.setFilter( QDir::All | QDir::Hidden | QDir::System );
+
for (uint i=0; i<s.count(); i++) {
QString name(s[i]);
@@ -632,10 +630,29 @@ void KUser::copyDir(const QString &srcPa
QString filename(s.filePath(name));
- QDir dir(filename);
- if (name.left(len) == prefix)
- name = name.remove(0, len);
+ QFileInfo info(filename);
+ mode = 0;
+ if ( info.permission(QFileInfo::ReadOwner) ) mode |= S_IRUSR;
+ if ( info.permission(QFileInfo::WriteOwner) ) mode |= S_IWUSR;
+ if ( info.permission(QFileInfo::ExeOwner) ) mode |= S_IXUSR;
+ if ( info.permission(QFileInfo::ReadGroup) ) mode |= S_IRGRP;
+ if ( info.permission(QFileInfo::WriteGroup) ) mode |= S_IWGRP;
+ if ( info.permission(QFileInfo::ExeGroup) ) mode |= S_IXGRP;
+ if ( info.permission(QFileInfo::ReadOther) ) mode |= S_IROTH;
+ if ( info.permission(QFileInfo::WriteOther) ) mode |= S_IWOTH;
+ if ( info.permission(QFileInfo::ExeOther) ) mode |= S_IXOTH;
+
+ if ( info.isSymLink() ) {
+ QString link = info.readLink();
+
+ if (symlink(QFile::encodeName(link),QFile::encodeName(d.filePath(name))) != 0) {
+ KMessageBox::error( 0, i18n("Error creating symlink %1.\nError: %2")
+ .arg(d.filePath(s[i])).arg(QString::fromLocal8Bit(strerror(errno))) );
+ }
+ } else if ( info.isDir() ) {
+ QDir dir(filename);
d.mkdir(name, FALSE);
+ copyDir(s.filePath(name), d.filePath(name));
if (chown(QFile::encodeName(d.filePath(name)), p_uid, p_gid) != 0) {
@@ -644,24 +661,10 @@ void KUser::copyDir(const QString &srcPa
}
- if (chmod(QFile::encodeName(d.filePath(name)), st.st_mode & 07777) != 0) {
+ if (chmod(QFile::encodeName(d.filePath(name)), mode) != 0) {
KMessageBox::error( 0, i18n("Cannot change permissions on folder %1.\nError: %2")
.arg(d.filePath(s[i])).arg(QString::fromLocal8Bit(strerror(errno))) );
}
- copyDir(s.filePath(name), d.filePath(name));
- }
-
- s.setFilter(QDir::Files | QDir::Hidden);
-
- for (uint i=0; i<s.count(); i++) {
- QString name(s[i]);
-
- QString filename(s.filePath(name));
-
- stat(QFile::encodeName(filename), &st);
-
- if (name.left(len) == prefix)
- name = name.remove(0, len);
-
+ } else {
if (copyFile(filename, d.filePath(name)) == -1) {
continue;
@@ -673,9 +676,10 @@ void KUser::copyDir(const QString &srcPa
}
- if (chmod(QFile::encodeName(d.filePath(name)), st.st_mode & 07777) != 0) {
+ if (chmod(QFile::encodeName(d.filePath(name)), mode) != 0) {
KMessageBox::error( 0, i18n("Cannot change permissions on file %1.\nError: %2")
.arg(d.filePath(s[i])).arg(QString::fromLocal8Bit(strerror(errno))) );
}
}
+ }
}
@@ -684,6 +688,5 @@ int KUser::copySkel()
QDir s(QFile::decodeName(SKELDIR));
QDir d(p_dir);
-
- umask(0777);
+ mode_t mode;
if (!s.exists()) {
@@ -697,5 +700,7 @@ int KUser::copySkel()
}
+ mode = umask(0007);
copyDir(s.absPath(), d.absPath());
+ umask( mode );
return 0;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic