30 #include <QtCore/QFile>
36 #include <sys/types.h>
59 int newOwner,
int newGroup,
bool recursive)
61 , m_permissions( permissions )
63 , m_newOwner( newOwner )
64 , m_newGroup( newGroup )
65 , m_recursive( recursive )
66 , m_lstItems( lstItems )
77 QLinkedList<ChmodInfo> m_infos;
81 void _k_processList();
86 int newOwner,
int newGroup,
bool recursive, JobFlags flags)
89 newOwner,newGroup,recursive));
104 QMetaObject::invokeMethod(
this,
"_k_processList", Qt::QueuedConnection );
111 void ChmodJobPrivate::_k_processList()
114 while ( !m_lstItems.isEmpty() )
116 const KFileItem item = m_lstItems.first();
121 info.url = item.
url();
123 const mode_t permissions = item.
permissions() & 0777;
124 info.permissions = ( m_permissions & m_mask ) | ( permissions & ~m_mask );
131 m_infos.prepend( info );
134 if ( item.
isDir() && m_recursive )
138 q->connect( listJob, SIGNAL(entries(
KIO::Job *,
145 m_lstItems.removeFirst();
147 kDebug(7007) <<
"ChmodJob::processList -> going to STATE_CHMODING";
155 KIO::UDSEntryList::ConstIterator it = list.begin();
156 KIO::UDSEntryList::ConstIterator
end = list.end();
157 for (; it != end; ++it) {
161 if ( !isLink && relativePath !=
".." )
167 info.url = m_lstItems.first().url();
168 info.url.addPath( relativePath );
173 if ( !entry.
isDir() )
175 int newPerms = m_permissions & mask;
176 if ( (newPerms & 0111) && !(permissions & 0111) )
179 if ( newPerms & 02000 )
185 info.permissions = ( m_permissions & mask ) | ( permissions & ~mask );
194 m_infos.prepend( info );
199 void ChmodJobPrivate::chmodNextFile()
202 if ( !m_infos.isEmpty() )
204 ChmodInfo info = m_infos.takeFirst();
207 if ( info.url.isLocalFile() && ( m_newOwner != -1 || m_newGroup != -1 ) )
209 QString path = info.url.toLocalFile();
210 if (
chown( QFile::encodeName(path), m_newOwner, m_newGroup ) != 0 )
222 kDebug(7007) <<
"chmod'ing" << info.url
226 const QString aclString = q->queryMetaData( QLatin1String(
"ACL_STRING") );
227 const QString defaultAclString = q->queryMetaData( QLatin1String(
"DEFAULT_ACL_STRING") );
228 if ( !aclString.isEmpty() )
229 job->
addMetaData( QLatin1String(
"ACL_STRING"), aclString );
230 if ( !defaultAclString.isEmpty() )
231 job->
addMetaData( QLatin1String(
"DEFAULT_ACL_STRING"), defaultAclString );
254 d->m_lstItems.removeFirst();
255 kDebug(7007) <<
"-> processList";
259 kDebug(7007) <<
"-> chmodNextFile";
270 bool recursive, JobFlags flags )
272 uid_t newOwnerID = uid_t(-1);
273 if ( !owner.isEmpty() )
275 struct passwd* pw = getpwnam(QFile::encodeName(owner));
277 kError(250) <<
" ERROR: No user" << owner;
279 newOwnerID = pw->pw_uid;
281 gid_t newGroupID = gid_t(-1);
282 if ( !group.isEmpty() )
284 struct group* g = getgrnam(QFile::encodeName(group));
286 kError(250) <<
" ERROR: No group" << group;
288 newGroupID = g->gr_gid;
290 return ChmodJobPrivate::newJob(lstItems, permissions, mask, newOwnerID,
291 newGroupID, recursive, flags);
294 #include "chmodjob.moc"