summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings2/main.cpp4
-rw-r--r--noncore/settings/networksettings2/network/network_NN.cpp5
-rw-r--r--noncore/settings/networksettings2/networksettings2/resources.cpp109
-rw-r--r--noncore/settings/networksettings2/networksettings2/resources.h5
-rw-r--r--noncore/settings/networksettings2/nsdata.cpp12
5 files changed, 77 insertions, 58 deletions
diff --git a/noncore/settings/networksettings2/main.cpp b/noncore/settings/networksettings2/main.cpp
index 200e31b..9004d19 100644
--- a/noncore/settings/networksettings2/main.cpp
+++ b/noncore/settings/networksettings2/main.cpp
@@ -90,32 +90,36 @@ int main( int argc, char * argv[] ) {
90 S.sprintf( QPEApplication::qpeDir()+ 90 S.sprintf( QPEApplication::qpeDir()+
91 "/bin/networksettings2" ); 91 "/bin/networksettings2" );
92 char * MyArgv[4]; 92 char * MyArgv[4];
93 MyArgv[0] = "networksettings2"; 93 MyArgv[0] = "networksettings2";
94 MyArgv[1] = "--prompt"; 94 MyArgv[1] = "--prompt";
95 MyArgv[2] = argv[1]; 95 MyArgv[2] = argv[1];
96 MyArgv[3] = NULL; 96 MyArgv[3] = NULL;
97 NSResources->system().execAsUser( S, MyArgv ); 97 NSResources->system().execAsUser( S, MyArgv );
98 Log(("FAILED %s-cNN-allowed\n", argv[1] ));
98 // if we come here , failed 99 // if we come here , failed
99 printf( "%s-cNN-disallowed", argv[1] ); 100 printf( "%s-cNN-disallowed", argv[1] );
100 } 101 }
101 } 102 }
102 break; 103 break;
103 case ACT_REGEN : 104 case ACT_REGEN :
104 { NetworkSettingsData NS; 105 { NetworkSettingsData NS;
105 // regen returns 0 if OK 106 // regen returns 0 if OK
106 rv = (NS.regenerate()) ? 1 : 0; 107 rv = (NS.regenerate()) ? 1 : 0;
107 } 108 }
108 break; 109 break;
109 case ACT_PROMPT : 110 case ACT_PROMPT :
110 { ActivateProfile AP(argv[1]); 111 { ActivateProfile AP(argv[1]);
111 if( AP.exec() == QDialog::Accepted ) { 112 if( AP.exec() == QDialog::Accepted ) {
113 Log(("%s-c%ld-allowed\n",
114 argv[1], AP.selectedProfile() ));
112 printf( "%s-c%ld-allowed", argv[1], AP.selectedProfile() ); 115 printf( "%s-c%ld-allowed", argv[1], AP.selectedProfile() );
113 } else { 116 } else {
117 Log(("%s-c%NN-disallowed\n", argv[1] ));
114 printf( "%s-cNN-disallowed", argv[1] ); 118 printf( "%s-cNN-disallowed", argv[1] );
115 } 119 }
116 } 120 }
117 break; 121 break;
118 case ACT_VPN : 122 case ACT_VPN :
119 { ActivateVPN AVPN; 123 { ActivateVPN AVPN;
120 AVPN.exec(); 124 AVPN.exec();
121 } 125 }
diff --git a/noncore/settings/networksettings2/network/network_NN.cpp b/noncore/settings/networksettings2/network/network_NN.cpp
index 1feffdb..b5c41bf 100644
--- a/noncore/settings/networksettings2/network/network_NN.cpp
+++ b/noncore/settings/networksettings2/network/network_NN.cpp
@@ -1,8 +1,9 @@
1#include <qpe/qpeapplication.h>
1#include <asdevice.h> 2#include <asdevice.h>
2#include "network_NN.h" 3#include "network_NN.h"
3#include "network_NNI.h" 4#include "network_NNI.h"
4 5
5static const char * NetworkNeeds[] = 6static const char * NetworkNeeds[] =
6 { "device", 7 { "device",
7 0 8 0
8 }; 9 };
@@ -48,17 +49,19 @@ short NetworkNetNode::generateFile( const QString & ID,
48 // generate mapping stanza for this interface 49 // generate mapping stanza for this interface
49 TS << "# check if " 50 TS << "# check if "
50 << NIC 51 << NIC
51 << " can be brought UP" 52 << " can be brought UP"
52 << endl; 53 << endl;
53 TS << "mapping " 54 TS << "mapping "
54 << NIC 55 << NIC
55 << endl; 56 << endl;
56 TS << " script networksettings2-request" 57 TS << " script "
58 << QPEApplication::qpeDir()
59 << "/bin/networksettings2-request"
57 << endl 60 << endl
58 << endl; 61 << endl;
59 return 0; 62 return 0;
60 } 63 }
61 return 1; 64 return 1;
62} 65}
63 66
64const char ** NetworkNetNode::needs( void ) { 67const char ** NetworkNetNode::needs( void ) {
diff --git a/noncore/settings/networksettings2/networksettings2/resources.cpp b/noncore/settings/networksettings2/networksettings2/resources.cpp
index 7ece817..2f17693 100644
--- a/noncore/settings/networksettings2/networksettings2/resources.cpp
+++ b/noncore/settings/networksettings2/networksettings2/resources.cpp
@@ -289,31 +289,34 @@ void TheNSResources::renumberConnections( void ) {
289typedef struct EnvVars { 289typedef struct EnvVars {
290 char * Name; 290 char * Name;
291 int Len; 291 int Len;
292} EnvVar_t; 292} EnvVar_t;
293 293
294#define AnEV(x) x, sizeof(x)-1 294#define AnEV(x) x, sizeof(x)-1
295 295
296static EnvVar_t EV[] = { 296static EnvVar_t EV[] = {
297 // AnEV( "HOME=" ), -> SPECIAL 297 AnEV( "HOME" ),
298 // AnEV( "LOGNAME=" ), -> SPECIAL 298 AnEV( "LOGNAME" ),
299 AnEV( "USER=" ), 299 AnEV( "USER" ),
300 AnEV( "LD_LIBRARY_PATH=" ), 300 AnEV( "LD_LIBRARY_PATH" ),
301 AnEV( "PATH=" ), 301 AnEV( "PATH" ),
302 AnEV( "QTDIR=" ), 302 AnEV( "QTDIR" ),
303 AnEV( "OPIEDIR=" ), 303 AnEV( "OPIEDIR" ),
304 AnEV( "SHELL=" ), 304 AnEV( "SHELL" ),
305 { NULL, 0 } 305 { NULL, 0 }
306}; 306};
307 307
308void TheNSResources::detectCurrentUser( void ) { 308void TheNSResources::detectCurrentUser( void ) {
309 // find current running qpe 309 // find current running qpe
310 QString QPEEnvFile = ""; 310 QString QPEEnvFile = "";
311 311
312 CurrentUser.UserName = "";
313 CurrentUser.HomeDir = "";
314
312 if( getenv( "OPIEDIR" ) == 0 ) { 315 if( getenv( "OPIEDIR" ) == 0 ) {
313 // nothing known 316 // nothing known
314 { // open proc dir and find all dirs in it 317 { // open proc dir and find all dirs in it
315 QRegExp R("[0-9]+"); 318 QRegExp R("[0-9]+");
316 QDir ProcDir( "/proc" ); 319 QDir ProcDir( "/proc" );
317 QFileInfo FI; 320 QFileInfo FI;
318 QStringList EL = ProcDir.entryList( QDir::Dirs ); 321 QStringList EL = ProcDir.entryList( QDir::Dirs );
319 322
@@ -362,42 +365,37 @@ void TheNSResources::detectCurrentUser( void ) {
362 BufSize += rd; 365 BufSize += rd;
363 } 366 }
364 367
365 char * Data = Buf; 368 char * Data = Buf;
366 char * DataEnd = Data+BufSize-1; 369 char * DataEnd = Data+BufSize-1;
367 370
368 // get env items out of list 371 // get env items out of list
369 while( Data < DataEnd ) { 372 while( Data < DataEnd ) {
370 if( strncmp( Data, "LOGNAME=", 8 ) == 0 ) {
371 CurrentUser.UserName = Data+8;
372 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
373 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] =
374 strdup( Data );
375 } else if( strncmp( Data, "HOME=", 5 ) == 0 ) {
376 CurrentUser.HomeDir = Data+5;
377 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
378 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] =
379 strdup( Data );
380 } else {
381 EnvVar_t * Run = EV;
382 while( Run->Name ) {
383 if( strncmp( Data, Run->Name, Run->Len ) == 0 ) {
384 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
385 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] =
386 strdup( Data );
387 // put OPIEDIR in env
388 if( strcmp( Run->Name, "OPIEDIR=" ) == 0 ) {
389 putenv( CurrentUser.EnvList[CurrentUser.EnvList.size()-1] );
390 373
391 } 374 EnvVar_t * Run = EV;
392 break; 375 while( Run->Name ) {
376 if( strncmp( Data, Run->Name, Run->Len ) == 0 &&
377 Data[Run->Len] == '='
378 ) {
379 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
380 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] =
381 strdup( Data );
382
383 if( strcmp( Run->Name, "OPIEDIR" ) == 0 ) {
384 // put OPIEDIR in env
385 putenv( CurrentUser.EnvList[CurrentUser.EnvList.size()-1] );
386 } else if( strcmp( Run->Name, "HOME" ) == 0 ) {
387 CurrentUser.HomeDir = Data+5;
388 } else if( strcmp( Run->Name, "LOGNAME" ) == 0 ) {
389 CurrentUser.UserName = Data+8;
393 } 390 }
394 Run ++; 391 break;
395 } 392 }
393 Run ++;
396 } 394 }
397 395
398 Data += strlen( Data )+1; 396 Data += strlen( Data )+1;
399 } 397 }
400 398
401 free( Buf ); 399 free( Buf );
402 400
403 if( ! CurrentUser.UserName.isEmpty() ) { 401 if( ! CurrentUser.UserName.isEmpty() ) {
@@ -416,38 +414,37 @@ void TheNSResources::detectCurrentUser( void ) {
416 CurrentUser.Gid = pwd.pw_gid; 414 CurrentUser.Gid = pwd.pw_gid;
417 } else{ 415 } else{
418 CurrentUser.Uid = 416 CurrentUser.Uid =
419 CurrentUser.Gid = -1; 417 CurrentUser.Gid = -1;
420 } 418 }
421 } 419 }
422 420
423 } else { 421 } else {
424 CurrentUser.UserName = getenv( "LOGNAME" ); 422 char * X;
425 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 423 QString S;
426 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = 424
427 strdup( CurrentUser.UserName ); 425 EnvVar_t * Run = EV;
428 426 while( Run->Name ) {
429 CurrentUser.HomeDir = getenv( "HOME" ); 427
430 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 428 if( ( X = getenv( Run->Name ) ) ) {
431 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = 429 Log(( "Env : %s = %s\n", Run->Name, X ));
432 strdup( CurrentUser.HomeDir ); 430
433 431 S.sprintf( "%s=%s", Run->Name, X );
434 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 432 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 );
435 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("USER"); 433 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] =
436 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 434 strdup( S.latin1() );
437 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("LD_LIBRARY_PATH"); 435
438 436 if( strcmp( Run->Name, "LOGNAME" ) == 0 ) {
439 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 437 CurrentUser.UserName = X;
440 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("PATH"); 438 } else if( strcmp( Run->Name, "HOME" ) == 0 ) {
441 439 CurrentUser.HomeDir = X;
442 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 440 } // regulare env var
443 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("QTDIR"); 441 } else {
444 442 Log(("Could not determine %s\n", Run->Name ));
445 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 443 }
446 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("OPIEDIR"); 444 Run ++;
447 CurrentUser.EnvList.resize( CurrentUser.EnvList.size()+1 ); 445 }
448 CurrentUser.EnvList[CurrentUser.EnvList.size()-1] = getenv("SHELL");
449 446
450 CurrentUser.Uid = getuid(); 447 CurrentUser.Uid = getuid();
451 CurrentUser.Gid = getgid(); 448 CurrentUser.Gid = getgid();
452 } 449 }
453} 450}
diff --git a/noncore/settings/networksettings2/networksettings2/resources.h b/noncore/settings/networksettings2/networksettings2/resources.h
index 16355ba..23b120e 100644
--- a/noncore/settings/networksettings2/networksettings2/resources.h
+++ b/noncore/settings/networksettings2/networksettings2/resources.h
@@ -22,16 +22,19 @@ typedef struct NetNode_S {
22 long NodeCountInLib; 22 long NodeCountInLib;
23} NetNode_t; 23} NetNode_t;
24 24
25class CurrentQPEUser { 25class CurrentQPEUser {
26 26
27public : 27public :
28 CurrentQPEUser() : UserName(), HomeDir(), EnvList() {} 28 CurrentQPEUser() : UserName(), HomeDir(), EnvList() {}
29 29
30 inline bool known( void )
31 { return ! HomeDir.isEmpty() && ! UserName.isEmpty(); }
32
30 QString UserName; 33 QString UserName;
31 QString HomeDir; 34 QString HomeDir;
32 int Uid; 35 int Uid;
33 int Gid; 36 int Gid;
34 QArray<char *> EnvList; 37 QArray<char *> EnvList;
35}; 38};
36 39
37typedef QDict<NetNode_t> Name2NetNode_t; 40typedef QDict<NetNode_t> Name2NetNode_t;
@@ -94,16 +97,18 @@ public :
94 const QString & netNode2Description( const char * Type ); 97 const QString & netNode2Description( const char * Type );
95 98
96 void addConnection( NodeCollection * NC ); 99 void addConnection( NodeCollection * NC );
97 void removeConnection( const QString & N ); 100 void removeConnection( const QString & N );
98 NodeCollection * findConnection( const QString & N ); 101 NodeCollection * findConnection( const QString & N );
99 Name2Connection_t & connections( void ) 102 Name2Connection_t & connections( void )
100 { return ConnectionsMap; } 103 { return ConnectionsMap; }
101 104
105 inline bool userKnown( void )
106 { return CurrentUser.known(); }
102 CurrentQPEUser & currentUser( void ) 107 CurrentQPEUser & currentUser( void )
103 { return CurrentUser; } 108 { return CurrentUser; }
104 109
105private : 110private :
106 111
107 void detectCurrentUser( void ); 112 void detectCurrentUser( void );
108 QString tr( const char * path ); 113 QString tr( const char * path );
109 void findAvailableNetNodes( const QString &path ); 114 void findAvailableNetNodes( const QString &path );
diff --git a/noncore/settings/networksettings2/nsdata.cpp b/noncore/settings/networksettings2/nsdata.cpp
index d709c0a..e2dd5b5 100644
--- a/noncore/settings/networksettings2/nsdata.cpp
+++ b/noncore/settings/networksettings2/nsdata.cpp
@@ -10,16 +10,23 @@
10#include <resources.h> 10#include <resources.h>
11 11
12static QString CfgFile; 12static QString CfgFile;
13 13
14NetworkSettingsData::NetworkSettingsData( void ) { 14NetworkSettingsData::NetworkSettingsData( void ) {
15 // init global resources structure 15 // init global resources structure
16 new TheNSResources(); 16 new TheNSResources();
17 17
18 if( ! NSResources->userKnown() ) {
19 Log(( "Cannot detect qpe user HOME=\"%s\" USER=\"%s\"\n",
20 NSResources->currentUser().HomeDir.latin1(),
21 NSResources->currentUser().UserName.latin1() ));
22 return;
23 }
24
18 CfgFile.sprintf( "%s/Settings/NS2.conf", 25 CfgFile.sprintf( "%s/Settings/NS2.conf",
19 NSResources->currentUser().HomeDir.latin1() ); 26 NSResources->currentUser().HomeDir.latin1() );
20 Log(( "Cfg from %s\n", CfgFile.latin1() )); 27 Log(( "Cfg from %s\n", CfgFile.latin1() ));
21 28
22 // load settings 29 // load settings
23 IsModified = 0; 30 IsModified = 0;
24 loadSettings(); 31 loadSettings();
25} 32}
@@ -534,17 +541,18 @@ QList<NodeCollection> NetworkSettingsData::collectPossible( const char * Interfa
534 541
535bool NetworkSettingsData::canStart( const char * Interface ) { 542bool NetworkSettingsData::canStart( const char * Interface ) {
536 // load situation 543 // load situation
537 NodeCollection * NC = 0; 544 NodeCollection * NC = 0;
538 QList<NodeCollection> PossibleConnections; 545 QList<NodeCollection> PossibleConnections;
539 546
540 PossibleConnections = collectPossible( Interface ); 547 PossibleConnections = collectPossible( Interface );
541 548
542 Log( ( "Possiblilies %d\n", PossibleConnections.count() )); 549 Log( ( "for %s : Possiblilies %d\n",
550 Interface, PossibleConnections.count() ));
543 switch( PossibleConnections.count() ) { 551 switch( PossibleConnections.count() ) {
544 case 0 : // no connections 552 case 0 : // no connections
545 break; 553 break;
546 case 1 : // one connection 554 case 1 : // one connection
547 NC = PossibleConnections.first(); 555 NC = PossibleConnections.first();
548 break; 556 break;
549 default : // need to ask user ? 557 default : // need to ask user ?
550 return 1; 558 return 1;
@@ -564,22 +572,24 @@ bool NetworkSettingsData::canStart( const char * Interface ) {
564 if( ! NC->setState( Activate ) ) { 572 if( ! NC->setState( Activate ) ) {
565 // cannot bring device Online -> try other alters 573 // cannot bring device Online -> try other alters
566 break; 574 break;
567 } 575 }
568 // FT 576 // FT
569 case Available : 577 case Available :
570 case IsUp : // also called for 'ifdown' 578 case IsUp : // also called for 'ifdown'
571 // device is ready -> done 579 // device is ready -> done
580 Log(( "%s-c%d-allowed\n", Interface, NC->number() ));
572 printf( "%s-c%d-allowed\n", Interface, NC->number() ); 581 printf( "%s-c%d-allowed\n", Interface, NC->number() );
573 return 0; 582 return 0;
574 } 583 }
575 } 584 }
576 585
577 // if we come here no alternatives are possible 586 // if we come here no alternatives are possible
587 Log(( "%s-cnn-disallowed\n", Interface ));
578 printf( "%s-cnn-disallowed\n", Interface ); 588 printf( "%s-cnn-disallowed\n", Interface );
579 return 0; 589 return 0;
580} 590}
581 591
582/* 592/*
583 Called by the system to regenerate config files 593 Called by the system to regenerate config files
584*/ 594*/
585 595