summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/opie-login/passworddialogimpl.cpp6
-rw-r--r--noncore/settings/aqpkg/ipkg.cpp11
2 files changed, 14 insertions, 3 deletions
diff --git a/core/opie-login/passworddialogimpl.cpp b/core/opie-login/passworddialogimpl.cpp
index d9132e2..3c1b474 100644
--- a/core/opie-login/passworddialogimpl.cpp
+++ b/core/opie-login/passworddialogimpl.cpp
@@ -119,97 +119,101 @@ void PasswordDialogImpl::done(int res) {
119 } 119 }
120 120
121 if(m_isSet) 121 if(m_isSet)
122 PasswordDialog::done( res ); 122 PasswordDialog::done( res );
123} 123}
124 124
125/* 125/*
126 * Lets see if we can write either shadow 126 * Lets see if we can write either shadow
127 * 127 *
128 */ 128 */
129/** 129/**
130 * CRYPT the password and then tries to write it either to the shadow password 130 * CRYPT the password and then tries to write it either to the shadow password
131 * or to the plain /etc/passwd 131 * or to the plain /etc/passwd
132 */ 132 */
133void PasswordDialogImpl::writePassword() { 133void PasswordDialogImpl::writePassword() {
134 /* 134 /*
135 * Check if both texts are the same 135 * Check if both texts are the same
136 */ 136 */
137 if ( m_pass->text() != m_confirm->text() ) 137 if ( m_pass->text() != m_confirm->text() )
138 return error( tr("Passwords don't match"), 138 return error( tr("Passwords don't match"),
139 tr("<qt>The two passwords don't match. Please try again.</qt>") ); 139 tr("<qt>The two passwords don't match. Please try again.</qt>") );
140 140
141 141
142 /* 142 /*
143 * Now crypt the password so we can write it later 143 * Now crypt the password so we can write it later
144 */ 144 */
145 char* password = ::crypt( m_pass->text().latin1(), crypt_make_salt() ); 145 char* password = ::crypt( m_pass->text().latin1(), crypt_make_salt() );
146 146
147 if ( !password ) 147 if ( !password )
148 return error( tr("Password not legal" ), 148 return error( tr("Password not legal" ),
149 tr("<qt>The entered password is not a valid password." 149 tr("<qt>The entered password is not a valid password."
150 "Please try entering a valid password.</qt>" ) ); 150 "Please try entering a valid password.</qt>" ) );
151 151
152 /* rewind and rewrite the password file */ 152 /* rewind and rewrite the password file */
153 ::setpwent(); 153 ::setpwent();
154 154
155 FILE* file = ::fopen( "/etc/passwd.new", "w" ); 155 FILE* file = ::fopen( "/etc/passwd.new", "w" );
156 struct passwd* pass; 156 struct passwd* pass;
157 while ( (pass = ::getpwent()) != 0l ) { 157 while ( (pass = ::getpwent()) != 0l ) {
158 /* no shadow password support */ 158 /* no shadow password support */
159 if ( pass->pw_uid == 0 ) 159 if ( pass->pw_uid == 0 )
160 pass->pw_passwd = password; 160 pass->pw_passwd = password;
161 161
162 ::putpwent( pass, file ); 162 ::putpwent( pass, file );
163 } 163 }
164 164
165 ::fclose( file ); 165 ::fclose( file );
166 ::endpwent(); 166 ::endpwent();
167 ::rename("/etc/passwd.new","/etc/passwd" ); 167 if (::rename("/etc/passwd.new","/etc/passwd" ) == -1)
168 return error( tr("Rename /etc/passwd failed"),
169 tr("<qt>Renaming /etc/passwd.new to /etc/passwd failed."
170 "Please check your /etc/passed file, your /etc directory "
171 "or your filesystem.</qt>") );
168 172
169 /* should be done now */ 173 /* should be done now */
170#ifdef OPIE_LOGIN_SHADOW_PW 174#ifdef OPIE_LOGIN_SHADOW_PW
171 #error "Can't write Shadow Passwords fixme" 175 #error "Can't write Shadow Passwords fixme"
172#endif 176#endif
173} 177}
174 178
175/** 179/**
176 * Raise an error. Delete input and set the focus after showing 180 * Raise an error. Delete input and set the focus after showing
177 * the error to the user 181 * the error to the user
178 */ 182 */
179void PasswordDialogImpl::error( const QString& caption, const QString& text ) { 183void PasswordDialogImpl::error( const QString& caption, const QString& text ) {
180 m_isSet = false; 184 m_isSet = false;
181 QMessageBox::critical(this,caption, text, 185 QMessageBox::critical(this,caption, text,
182 QMessageBox::Ok, QMessageBox::NoButton ); 186 QMessageBox::Ok, QMessageBox::NoButton );
183 187
184 m_pass->setText(""); 188 m_pass->setText("");
185 m_pass->setFocus(); 189 m_pass->setFocus();
186 190
187 m_confirm->setText(""); 191 m_confirm->setText("");
188} 192}
189 193
190void PasswordDialogImpl::slotToggleEcho( bool b ) { 194void PasswordDialogImpl::slotToggleEcho( bool b ) {
191 m_pass-> setEchoMode( b ? QLineEdit::Normal : QLineEdit::Password ); 195 m_pass-> setEchoMode( b ? QLineEdit::Normal : QLineEdit::Password );
192 m_confirm->setEchoMode( b ? QLineEdit::Normal : QLineEdit::Password ); 196 m_confirm->setEchoMode( b ? QLineEdit::Normal : QLineEdit::Password );
193} 197}
194 198
195///////////////////////// 199/////////////////////////
196/// static functions 200/// static functions
197/// 201///
198 202
199/** 203/**
200 * Ask whether or not we need to show the dialog. It returns true if 204 * Ask whether or not we need to show the dialog. It returns true if
201 * no root password is set so that the user will be able to set one. 205 * no root password is set so that the user will be able to set one.
202 */ 206 */
203bool PasswordDialogImpl::needDialog() { 207bool PasswordDialogImpl::needDialog() {
204 /* 208 /*
205 * This can cope with no password and shadow passwords 209 * This can cope with no password and shadow passwords
206 * Let us go through the user database until we find 'root' and then 210 * Let us go through the user database until we find 'root' and then
207 * see if it is 'shadow' and see if shadow is empty or see if the password is empty 211 * see if it is 'shadow' and see if shadow is empty or see if the password is empty
208 */ 212 */
209 bool need = false; 213 bool need = false;
210 struct passwd *pwd; 214 struct passwd *pwd;
211 ::setpwent(); 215 ::setpwent();
212 216
213 while((pwd = ::getpwent() ) ) { 217 while((pwd = ::getpwent() ) ) {
214 /* found root */ 218 /* found root */
215 if( pwd->pw_uid == 0 ) { 219 if( pwd->pw_uid == 0 ) {
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp
index dd9e78d..c5c6387 100644
--- a/noncore/settings/aqpkg/ipkg.cpp
+++ b/noncore/settings/aqpkg/ipkg.cpp
@@ -164,158 +164,165 @@ void Ipkg :: createSymLinks()
164 for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() ) 164 for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() )
165 { 165 {
166 if ( *pkg == package ) 166 if ( *pkg == package )
167 continue; 167 continue;
168 emit outputText( " " ); 168 emit outputText( " " );
169 emit outputText( tr( "Creating symbolic links for %1" ).arg( *pkg ) ); 169 emit outputText( tr( "Creating symbolic links for %1" ).arg( *pkg ) );
170 linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); 170 linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir );
171 } 171 }
172 } 172 }
173 } 173 }
174 174
175 delete dependantPackages; 175 delete dependantPackages;
176 176
177 emit outputText( tr("Finished") ); 177 emit outputText( tr("Finished") );
178 emit outputText( "" ); 178 emit outputText( "" );
179} 179}
180 180
181void Ipkg :: removeStatusEntry() 181void Ipkg :: removeStatusEntry()
182{ 182{
183 QString statusFile = destDir; 183 QString statusFile = destDir;
184 if ( statusFile.right( 1 ) != "/" ) 184 if ( statusFile.right( 1 ) != "/" )
185 statusFile.append( "/" ); 185 statusFile.append( "/" );
186 statusFile.append( "usr/lib/ipkg/status" ); 186 statusFile.append( "usr/lib/ipkg/status" );
187 QString outStatusFile = statusFile; 187 QString outStatusFile = statusFile;
188 outStatusFile.append( ".tmp" ); 188 outStatusFile.append( ".tmp" );
189 189
190 emit outputText( "" ); 190 emit outputText( "" );
191 emit outputText( tr("Removing status entry...") ); 191 emit outputText( tr("Removing status entry...") );
192 QString tempstr = tr("status file - "); 192 QString tempstr = tr("status file - ");
193 tempstr.append( statusFile ); 193 tempstr.append( statusFile );
194 emit outputText( tempstr ); 194 emit outputText( tempstr );
195 tempstr = tr("package - "); 195 tempstr = tr("package - ");
196 tempstr.append( package ); 196 tempstr.append( package );
197 emit outputText( tempstr ); 197 emit outputText( tempstr );
198 198
199 QFile readFile( statusFile ); 199 QFile readFile( statusFile );
200 QFile writeFile( outStatusFile ); 200 QFile writeFile( outStatusFile );
201 201
202 if ( !readFile.open( IO_ReadOnly ) ) 202 if ( !readFile.open( IO_ReadOnly ) )
203 { 203 {
204 tempstr = tr("Couldn't open status file - "); 204 tempstr = tr("Couldn't open status file - ");
205 tempstr.append( statusFile ); 205 tempstr.append( statusFile );
206 emit outputText( tempstr ); 206 emit outputText( tempstr );
207 return; 207 return;
208 } 208 }
209 209
210 if ( !writeFile.open( IO_WriteOnly ) ) 210 if ( !writeFile.open( IO_WriteOnly ) )
211 { 211 {
212 tempstr = tr("Couldn't create tempory status file - "); 212 tempstr = tr("Couldn't create temporary status file - ");
213 tempstr.append( outStatusFile ); 213 tempstr.append( outStatusFile );
214 emit outputText( tempstr ); 214 emit outputText( tempstr );
215 return; 215 return;
216 } 216 }
217 217
218 int i = 0; 218 int i = 0;
219 219
220 QTextStream readStream( &readFile ); 220 QTextStream readStream( &readFile );
221 QTextStream writeStream( &writeFile ); 221 QTextStream writeStream( &writeFile );
222 QString line; 222 QString line;
223 223
224 char k[21]; 224 char k[21];
225 char v[1001]; 225 char v[1001];
226 QString key; 226 QString key;
227 QString value; 227 QString value;
228 228
229 while ( !readStream.atEnd() ) 229 while ( !readStream.atEnd() )
230 { 230 {
231 //read new line 231 //read new line
232 line = readStream.readLine(); 232 line = readStream.readLine();
233 233
234 if ( line.contains( ":", TRUE ) ) 234 if ( line.contains( ":", TRUE ) )
235 { 235 {
236 //grep key and value from line 236 //grep key and value from line
237 k[0] = '\0'; 237 k[0] = '\0';
238 v[0] = '\0'; 238 v[0] = '\0';
239 sscanf( line, "%[^:]: %[^\n]", k, v ); 239 sscanf( line, "%[^:]: %[^\n]", k, v );
240 key = k; 240 key = k;
241 value = v; 241 value = v;
242 key = key.stripWhiteSpace(); 242 key = key.stripWhiteSpace();
243 value = value.stripWhiteSpace(); 243 value = value.stripWhiteSpace();
244 } else { 244 } else {
245 key = ""; 245 key = "";
246 value = ""; 246 value = "";
247 } 247 }
248 248
249 if ( key == "Package" && value == package ) 249 if ( key == "Package" && value == package )
250 { 250 {
251 //skip lines from the deleted package 251 //skip lines from the deleted package
252 while ( ( !readStream.atEnd() ) && ( line.stripWhiteSpace() != "" ) ) 252 while ( ( !readStream.atEnd() ) && ( line.stripWhiteSpace() != "" ) )
253 { 253 {
254 line = readStream.readLine(); 254 line = readStream.readLine();
255 } 255 }
256 } else { 256 } else {
257 257
258 //write other lines into the tempfile 258 //write other lines into the tempfile
259 writeStream << line << "\n"; 259 writeStream << line << "\n";
260 260
261 // Improve UI responsiveness 261 // Improve UI responsiveness
262 i++; 262 i++;
263 if ( ( i % 50 ) == 0 ) 263 if ( ( i % 50 ) == 0 )
264 qApp->processEvents(); 264 qApp->processEvents();
265 } 265 }
266 } 266 }
267 267
268 readFile.close(); 268 readFile.close();
269 writeFile.close(); 269 writeFile.close();
270 270
271 // Remove old status file and put tmp stats file in its place 271 // Remove old status file and put tmp stats file in its place
272 remove( statusFile ); 272 remove( statusFile );
273 rename( outStatusFile, statusFile ); 273 if (::rename( outStatusFile, statusFile ) == -1)
274 {
275 tempstr = tr("Couldn't rename temporary status file - ");
276 tempstr.append( outStatusFile );
277 tempstr.append( tr("to status file - ") );
278 tempstr.append( statusFile );
279 emit outputText( tempstr );
280 }
274 } 281 }
275 282
276int Ipkg :: executeIpkgLinkCommand( QStringList *cmd ) 283int Ipkg :: executeIpkgLinkCommand( QStringList *cmd )
277{ 284{
278 // If one is already running - should never be but just to be safe 285 // If one is already running - should never be but just to be safe
279 if ( proc ) 286 if ( proc )
280 { 287 {
281 delete proc; 288 delete proc;
282 proc = 0; 289 proc = 0;
283 } 290 }
284 291
285 // OK we're gonna use OProcess to run this thing 292 // OK we're gonna use OProcess to run this thing
286 proc = new OProcess(); 293 proc = new OProcess();
287 aborted = false; 294 aborted = false;
288 295
289 // Connect up our slots 296 // Connect up our slots
290 connect(proc, SIGNAL(processExited(Opie::Core::OProcess*)), 297 connect(proc, SIGNAL(processExited(Opie::Core::OProcess*)),
291 this, SLOT( linkProcessFinished())); 298 this, SLOT( linkProcessFinished()));
292 connect(proc, SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int)), 299 connect(proc, SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int)),
293 this, SLOT(linkCommandStdout(Opie::Core::OProcess*,char*,int))); 300 this, SLOT(linkCommandStdout(Opie::Core::OProcess*,char*,int)));
294 301
295 *proc << *cmd; 302 *proc << *cmd;
296 303
297 if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) 304 if(!proc->start(OProcess::NotifyOnExit, OProcess::All))
298 { 305 {
299 emit outputText( tr("Couldn't start ipkg-link process" ) ); 306 emit outputText( tr("Couldn't start ipkg-link process" ) );
300 } 307 }
301 308
302 return 0; 309 return 0;
303} 310}
304 311
305void Ipkg::linkProcessFinished() 312void Ipkg::linkProcessFinished()
306{ 313{
307 // Report that the link process succeeded/failed 314 // Report that the link process succeeded/failed
308 315
309 if ( error ) 316 if ( error )
310 emit outputText( tr("Symbolic linking failed!\n") ); 317 emit outputText( tr("Symbolic linking failed!\n") );
311 else 318 else
312 emit outputText( tr("Symbolic linking succeeded.\n") ); 319 emit outputText( tr("Symbolic linking succeeded.\n") );
313 320
314 delete proc; 321 delete proc;
315 proc = 0; 322 proc = 0;
316 finished = true; 323 finished = true;
317} 324}
318 325
319void Ipkg::linkCommandStdout(OProcess*, char *buffer, int buflen) 326void Ipkg::linkCommandStdout(OProcess*, char *buffer, int buflen)
320{ 327{
321 QString lineStr = buffer; 328 QString lineStr = buffer;