FireFox functionality
This commit is contained in:
		
							
								
								
									
										80
									
								
								c_adlib/ad_ff/AssemblyInfo.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								c_adlib/ad_ff/AssemblyInfo.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | ||||
| /*********************************************************************** | ||||
|  *  | ||||
|  *  Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. | ||||
|  * | ||||
|  *  This library is free software; you can redistribute it and/or | ||||
|  *  modify it under the terms of the GNU Lesser General Public | ||||
|  *  License as published by the Free Software Foundation; version 2.1 | ||||
|  *  of the License. | ||||
|  * | ||||
|  *  This library is distributed in the hope that it will be useful, | ||||
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  *  Library Lesser General Public License for more details. | ||||
|  * | ||||
|  *  You should have received a copy of the GNU Lesser General Public | ||||
|  *  License along with this library; if not, Novell, Inc. | ||||
|  *  | ||||
|  *  To contact Novell about this file by physical or electronic mail,  | ||||
|  *  you may find current contact information at www.novell.com. | ||||
|  *  | ||||
|  ***********************************************************************/ | ||||
|  | ||||
| using System.Reflection; | ||||
| using System.Runtime.CompilerServices; | ||||
|  | ||||
| // | ||||
| // General Information about an assembly is controlled through the following  | ||||
| // set of attributes. Change these attribute values to modify the information | ||||
| // associated with an assembly. | ||||
| // | ||||
| [assembly: AssemblyTitle("Novell.CASA.DataEngines.FireFox.dll")] | ||||
| [assembly: AssemblyDescription("")] | ||||
| [assembly: AssemblyConfiguration("")] | ||||
| [assembly: AssemblyCompany("Novell, Inc")] | ||||
| [assembly: AssemblyProduct("CASA")] | ||||
| [assembly: AssemblyCopyright("")] | ||||
| [assembly: AssemblyTrademark("")] | ||||
| [assembly: AssemblyCulture("")]		 | ||||
|  | ||||
| // | ||||
| // Version information for an assembly consists of the following four values: | ||||
| // | ||||
| //      Major Version | ||||
| //      Minor Version  | ||||
| //      Build Number | ||||
| //      Revision | ||||
| // | ||||
| // You can specify all the values or you can default the Revision and Build Numbers  | ||||
| // by using the '*' as shown below: | ||||
|  | ||||
| [assembly: AssemblyVersion("1.6.*")] | ||||
|  | ||||
| // | ||||
| // In order to sign your assembly you must specify a key to use. Refer to the  | ||||
| // Microsoft .NET Framework documentation for more information on assembly signing. | ||||
| // | ||||
| // Use the attributes below to control which key is used for signing.  | ||||
| // | ||||
| // Notes:  | ||||
| //   (*) If no key is specified, the assembly is not signed. | ||||
| //   (*) KeyName refers to a key that has been installed in the Crypto Service | ||||
| //       Provider (CSP) on your machine. KeyFile refers to a file which contains | ||||
| //       a key. | ||||
| //   (*) If the KeyFile and the KeyName values are both specified, the  | ||||
| //       following processing occurs: | ||||
| //       (1) If the KeyName can be found in the CSP, that key is used. | ||||
| //       (2) If the KeyName does not exist and the KeyFile does exist, the key  | ||||
| //           in the KeyFile is installed into the CSP and used. | ||||
| //   (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. | ||||
| //       When specifying the KeyFile, the location of the KeyFile should be | ||||
| //       relative to the project output directory which is | ||||
| //       %Project Directory%\obj\<configuration>. For example, if your KeyFile is | ||||
| //       located in the project directory, you would specify the AssemblyKeyFile  | ||||
| //       attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] | ||||
| //   (*) Delay Signing is an advanced option - see the Microsoft .NET Framework | ||||
| //       documentation for more information on this. | ||||
| // | ||||
| [assembly: AssemblyDelaySign(false)] | ||||
| [assembly: AssemblyKeyFile("")] | ||||
| [assembly: AssemblyKeyName("")] | ||||
							
								
								
									
										356
									
								
								c_adlib/ad_ff/FireFox.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										356
									
								
								c_adlib/ad_ff/FireFox.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,356 @@ | ||||
| /*********************************************************************** | ||||
|  *  | ||||
|  *  Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. | ||||
|  * | ||||
|  *  This library is free software; you can redistribute it and/or | ||||
|  *  modify it under the terms of the GNU Lesser General Public | ||||
|  *  License as published by the Free Software Foundation; version 2.1 | ||||
|  *  of the License. | ||||
|  * | ||||
|  *  This library is distributed in the hope that it will be useful, | ||||
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | ||||
|  *  Library Lesser General Public License for more details. | ||||
|  * | ||||
|  *  You should have received a copy of the GNU Lesser General Public | ||||
|  *  License along with this library; if not, Novell, Inc. | ||||
|  *  | ||||
|  *  To contact Novell about this file by physical or electronic mail,  | ||||
|  *  you may find current contact information at www.novell.com. | ||||
|  *  | ||||
|  ***********************************************************************/ | ||||
|  | ||||
| using System; | ||||
| using System.Runtime.InteropServices; | ||||
| using System.Collections.Specialized; | ||||
| using System.Collections; | ||||
|  | ||||
|  | ||||
| namespace Novell.CASA.DataEngines.FF | ||||
| { | ||||
|      | ||||
| [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] | ||||
| public class Host | ||||
| { | ||||
| 	public IntPtr hostName; | ||||
| 	public IntPtr hostElement; | ||||
| 	public IntPtr next; | ||||
|         public Host() | ||||
|         { | ||||
|             hostName = Marshal.AllocHGlobal(128); | ||||
|         } | ||||
|         ~Host() | ||||
|         { | ||||
|             Marshal.FreeHGlobal(hostName); | ||||
|         } | ||||
| }; | ||||
|  | ||||
|  | ||||
| [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] | ||||
| public class HostElement | ||||
| { | ||||
| 	public IntPtr name; | ||||
| 	public IntPtr value; | ||||
| 	public int  isPassword; | ||||
| 	public IntPtr next; | ||||
|         public HostElement() | ||||
|         { | ||||
|             name = Marshal.AllocHGlobal(128); | ||||
|             value = Marshal.AllocHGlobal(128); | ||||
|         } | ||||
|         ~HostElement() | ||||
|         { | ||||
|             Marshal.FreeHGlobal(name); | ||||
|             Marshal.FreeHGlobal(value); | ||||
|         } | ||||
| }; | ||||
|  | ||||
|  | ||||
|     [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] | ||||
|     public class KeyringInfo | ||||
|     { | ||||
|         public int lockOnIdle; | ||||
|         public uint lockTimeout; | ||||
|         public uint mTime; | ||||
|         public uint cTime; | ||||
|         public int isLocked; | ||||
|     } | ||||
|     [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] | ||||
|     public class NativeItemInfo | ||||
|     { | ||||
|         public int itemType; | ||||
|         public IntPtr displayName; | ||||
|         public IntPtr secret; | ||||
|         public int mTime; | ||||
|         public int cTime; | ||||
|         public NativeItemInfo() | ||||
|         { | ||||
|             displayName = Marshal.AllocHGlobal(128); | ||||
|             secret = Marshal.AllocHGlobal(128); | ||||
|         } | ||||
|         ~NativeItemInfo() | ||||
|         { | ||||
|             Marshal.FreeHGlobal(displayName); | ||||
|             Marshal.FreeHGlobal(secret); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public class ItemInfo | ||||
|     { | ||||
|         public string itemType; | ||||
|         public string displayName; | ||||
|         public string secret; | ||||
|         public int mTime; | ||||
|         public int cTime; | ||||
|     } | ||||
|  | ||||
|  | ||||
|     [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] | ||||
|     public class NativeAttribute | ||||
|     { | ||||
|         public uint type; | ||||
|         public IntPtr key; | ||||
|         public IntPtr value; | ||||
|     } | ||||
|  | ||||
|     [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] | ||||
|     public class Attribute | ||||
|     { | ||||
|         public uint type; | ||||
|         public string key; | ||||
|         public string value; | ||||
|      | ||||
|     } | ||||
|  | ||||
|     public class FireFox | ||||
|     { | ||||
| 	private static int MAX_PROFILES = 5;			//FIXME:Maximum Profiles for Firefox - To be removed when done dynamically via a native api | ||||
| 	private static int LOAD_PROFILE_ALWAYSFROM_FILE = 1;		 | ||||
|  | ||||
|  | ||||
| 	//Initialization functions | ||||
|     	[DllImport("libad_ff.so.1.1.1")] | ||||
|     	public static extern int FPM_GetProfileList(out IntPtr[] profileList, out IntPtr[] profileFlag); | ||||
|  | ||||
|     	[DllImport("libad_ff.so.1.1.1")] | ||||
|  	public static extern int FPM_FirefoxProfileInit(string profileName); | ||||
|  | ||||
|     	[DllImport("libad_ff.so.1.1.1")] | ||||
|  	public static extern int FPM_FirefoxProfileExit(string profileName); | ||||
|  | ||||
| 	//Master Password functions | ||||
|      	[DllImport("libad_ff.so.1.1.1")] | ||||
|  	public static extern int FPM_IsMasterPasswordSet(string profileName); | ||||
|  | ||||
|      	[DllImport("libad_ff.so.1.1.1")] | ||||
|  	public static extern int FPM_CheckMasterPassword(string profileName, string masterPassword); | ||||
|  | ||||
| 	//Signon functions | ||||
|     	[DllImport("libad_ff.so.1.1.1")] | ||||
|         public static extern int FPM_GetSignonData(string profileName,out IntPtr host,int doRefresh); | ||||
| 	//TBD | ||||
| 	//int FPM_WriteSignonData(char *profileName) | ||||
|    	//int FPM_AddHost(char *profileName, struct Host *host, int doUpdate) | ||||
| 	//int FPM_ModifyHost(char *profileName, struct Host *host, int doUpdate) | ||||
| 	//int FPM_RemoveHost(char *profileName, char *hostname, int doUpdate) | ||||
|  | ||||
|  | ||||
| 	//-------------------------------------------------------------- | ||||
| 	//GetDefaultProfileName | ||||
| 	//@param   None | ||||
| 	//@return  Default ProfileName on success | ||||
| 	//         else null if not retrivable  | ||||
| 	//-------------------------------------------------------------- | ||||
|         public static String GetDefaultProfileName() | ||||
|         { | ||||
|  | ||||
| 		IntPtr[] profileListIntPtr=new IntPtr[MAX_PROFILES];; | ||||
| 		IntPtr[] profileFlagsIntPtr=new IntPtr[MAX_PROFILES];; | ||||
| 		String[] profileList=null;    | ||||
| 		int[] profileFlags=null;   | ||||
| 		String profileName=null;    | ||||
| 		int profileFlag=0;   | ||||
| 		int profCount=0; | ||||
| 		String defaultProfileName=null;    | ||||
|  | ||||
| 		Console.WriteLine("FireFox:Invoking FPM_GetProfileList:"); | ||||
| 		profCount=FPM_GetProfileList(out profileListIntPtr,out profileFlagsIntPtr); | ||||
| 		Console.WriteLine("FireFox:No of Profiles found= "+profCount); | ||||
| 		 | ||||
| 		for(int i=0; i< profCount; i++) | ||||
| 		{ | ||||
| 			profileName=Marshal.PtrToStringAnsi(profileListIntPtr[i]); | ||||
| 			profileFlag=(int)profileFlagsIntPtr[i]; | ||||
| 			Console.WriteLine("FireFox:Iter="+i+"profileName="+profileName); | ||||
| 			Console.WriteLine("FireFox:Iter="+i+"profileFlag="+profileFlag); | ||||
| 			if(profileFlag==1) | ||||
| 				defaultProfileName=profileName;	//Get the default profile name to init later | ||||
| 		} | ||||
|  | ||||
| 		 | ||||
| 		return defaultProfileName; | ||||
| 	} | ||||
|  | ||||
|  | ||||
| 	//-------------------------------------------------------------- | ||||
| 	//GetAllProfileNames | ||||
| 	//@param   None | ||||
| 	//@return  ProfileNames (String[]) - List of all Profile Names | ||||
| 	//	   else null  | ||||
| 	//-------------------------------------------------------------- | ||||
|         public static String[] GetAllProfileNames() | ||||
|         { | ||||
| 		//TBD:To be implemented if\when required | ||||
| 		return null; | ||||
| 	} | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| 	//-------------------------------------------------------------- | ||||
| 	//GetProfileData | ||||
| 	//GetProfileData   for the specified profile | ||||
| 	//@param    | ||||
| 	//		profileName (string) | ||||
| 	// | ||||
| 	//@return  hostList (Host)   on success | ||||
| 	//         else null  | ||||
| 	//-------------------------------------------------------------- | ||||
|         public static Host GetProfileData(string profileName) | ||||
| 	{ | ||||
|              	Host hostList = new Host(); | ||||
| 		int methodStatusCode=-1;   | ||||
|  | ||||
| 			//Console.WriteLine("FireFox:Initializing the Profile "+profileName); | ||||
| 			//methodStatusCode=InitProfile(profileName); | ||||
| 			//Console.WriteLine("FireFox:InitProfile returned "+methodStatusCode); | ||||
|  | ||||
| 			//if(methodStatusCode==1) | ||||
| 			{//If Init of the profile was sucessfull, get the sigon data to complete the aggregation | ||||
|                  		IntPtr hostListIntPtr = new IntPtr(); | ||||
|           			try | ||||
|             			{ | ||||
|  					Console.WriteLine("FireFox:Getting Data for profile "+profileName); | ||||
| 					methodStatusCode=-1; | ||||
|                 			methodStatusCode = FPM_GetSignonData(profileName,out hostListIntPtr,LOAD_PROFILE_ALWAYSFROM_FILE); | ||||
|                 			if( 1 != methodStatusCode ) | ||||
| 					{ | ||||
|  						Console.WriteLine("FireFox:Getting Data for profile Failed with error "+methodStatusCode); | ||||
|                    				hostList = null; | ||||
| 					}  					 | ||||
|  | ||||
|           			} | ||||
|             			catch(Exception e) | ||||
|             			{ | ||||
|                 			Console.WriteLine("FireFox:Exception during invokation of FPM_GetSignonData"); | ||||
|                 			Console.WriteLine(e.ToString()); | ||||
|                 			hostList = null; | ||||
|             			} | ||||
|  | ||||
|          	       		hostList = (Host)Marshal.PtrToStructure(hostListIntPtr, typeof(Host)); | ||||
|             			//This can be Null only when nothing is aggregated. | ||||
|              			if (((String)Marshal.PtrToStringAnsi(hostList.hostName)) == null )  | ||||
|              			{ | ||||
|                  			//TBD: Log that there are no secrets to aggregate | ||||
|                 			Console.WriteLine("FireFox:no secrets to aggregate"); | ||||
|                  			hostList = null; | ||||
|             			} | ||||
|  | ||||
| 				//Uninitialize the profile | ||||
| 				//Console.WriteLine("FireFox:UnInitializing the Profile "+profileName); | ||||
| 				//UninitProfile(profileName); | ||||
| 			} | ||||
| 		 | ||||
| 		return hostList; | ||||
| 	} | ||||
|  | ||||
| 	//-------------------------------------------------------------- | ||||
| 	//InitFFProfile | ||||
| 	//@param   profileName   name of the profile | ||||
| 	//@return  1     on success | ||||
| 	//         <=0   on error  | ||||
| 	//-------------------------------------------------------------- | ||||
|         public static int InitProfile(string profileName) | ||||
|         { | ||||
| 		return FPM_FirefoxProfileInit(profileName); | ||||
| 	} | ||||
|  | ||||
|  | ||||
| 	//================================================================= | ||||
|  | ||||
| 	//-------------------------------------------------------------- | ||||
| 	//UninitProfile | ||||
| 	//UninitProfile   for the specified profile | ||||
| 	//@param    | ||||
| 	//		profileName (string) | ||||
| 	// | ||||
| 	//@return  	1     on success | ||||
|         //		<=0   on error  | ||||
| 	//-------------------------------------------------------------- | ||||
|         public static int UninitProfile(string profileName) | ||||
| 	{ | ||||
| 	 int methodStatusCode=-1;  | ||||
|   | ||||
|  		Console.WriteLine("FireFox:UninitProfile for "+profileName); | ||||
| 		methodStatusCode=-1; | ||||
|                 methodStatusCode = FPM_FirefoxProfileExit(profileName); | ||||
|                 if( 1 != methodStatusCode ) | ||||
| 		{ | ||||
|  			Console.WriteLine("FireFox:UninitProfile Failed with error "+methodStatusCode); | ||||
| 		}   | ||||
|  | ||||
| 	 return methodStatusCode;					 | ||||
| 	} | ||||
|  | ||||
|  | ||||
| 	//-------------------------------------------------------------- | ||||
| 	//isMasterPasswordSetFor | ||||
| 	//Is MasterPassword Set For specified profile | ||||
| 	//@param    | ||||
| 	//		profileName (string) | ||||
| 	// | ||||
| 	//@param   profileName   name of the profile | ||||
| 	//	@return 1    if master password is set | ||||
| 	//        	0    if master password not set | ||||
| 	//-------------------------------------------------------------- | ||||
|         public static int isMasterPasswordSetFor(string profileName) | ||||
| 	{ | ||||
| 	 int methodStatusCode=0;  | ||||
|   | ||||
|  		Console.WriteLine("FireFox:isMasterPasswordSetFor "+profileName); | ||||
|                 methodStatusCode = FPM_IsMasterPasswordSet(profileName); | ||||
|  | ||||
| 	 return methodStatusCode;					 | ||||
| 	} | ||||
|  | ||||
| 	//-------------------------------------------------------------- | ||||
| 	//checkMasterPassword | ||||
| 	//Check if the specified master password is correct or not.  | ||||
| 	//If it is correct then password is stored to the internal store for later use.  | ||||
| 	//If it is wrong then nothing is stored and 0 will be returned. | ||||
| 	// | ||||
| 	//@param    | ||||
| 	//	profileName (string) | ||||
| 	//	masterPassword (string) | ||||
| 	// | ||||
| 	//	@return  1   if the specified master password is correct | ||||
|         //		 0   if the master password is wrong. | ||||
| 	//-------------------------------------------------------------- | ||||
|         public static int checkMasterPassword(string profileName,string masterPassword) | ||||
| 	{ | ||||
| 	 int methodStatusCode=0;  | ||||
|   | ||||
|  		Console.WriteLine("FireFox:checking MasterPassword for "+profileName); | ||||
|                 methodStatusCode = FPM_CheckMasterPassword(profileName,masterPassword); | ||||
|  | ||||
| 	 return methodStatusCode;					 | ||||
| 	} | ||||
|  | ||||
| 	//=================Local Methods==================================== | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								c_adlib/ad_ff/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								c_adlib/ad_ff/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| # | ||||
| # configure environment | ||||
| # | ||||
| TARGET = Novell.CASA.DataEngines.FireFox | ||||
| CS_NAME = $(TARGET)$(xtra).$(EXE) | ||||
| include global.mak | ||||
| include defaults.$(PLAT) | ||||
| include rules.mak | ||||
|  | ||||
|  | ||||
| # | ||||
| # target object and source files | ||||
| # | ||||
| include src.$(PLAT) | ||||
| include objs.$(PLAT) | ||||
|  | ||||
| # | ||||
| # targets | ||||
| # | ||||
| include target.cs | ||||
							
								
								
									
										3
									
								
								c_adlib/ad_ff/objs.lux
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								c_adlib/ad_ff/objs.lux
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| OBJS=\ | ||||
| 	AssembyInfo\ | ||||
| 	FireFox | ||||
							
								
								
									
										3
									
								
								c_adlib/ad_ff/src.lux
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								c_adlib/ad_ff/src.lux
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| SRC=\ | ||||
| 	AssemblyInfo.cs\ | ||||
| 	FireFox.cs | ||||
		Reference in New Issue
	
	Block a user