Need help on FTPS transfer using X509 Certificates

I am developing a FTPS component in my ASP.Net application.
We configued the Personal Certificate,Intermediate Certificate and Root Certificate in Server and Client machine MMC console.
I am stuck in to implement the same as I am getting below error when the the line "using (Stream writer = ftpRequest.GetRequestStream())" is getting executed.
System.Net Information: 0 : [6876] SecureChannel#65124268 - Certificate is of type X509Certificate2 and contains the private key.
System.Net Information: 0 : [6876] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc = System.Net.SecureCredential)
System.Net Error: 0 : [6876] AcquireCredentialsHandle() failed with error 0X8009030D.
System.Net Information: 0 : [6876] AcquireCredentialsHandle(package = Microsoft Unified Security Protocol Provider, intent = Outbound, scc = System.Net.SecureCredential)
System.Net Error: 0 : [6876] AcquireCredentialsHandle() failed with error 0X8009030D.
System.Net.Sockets Verbose: 0 : [6876] Socket#19949373::Dispose()
System.Net Information: 0 : [6876] FtpWebRequest#64456428::(Releasing FTP connection#53218812.)
System.Net Error: 0 : [6876] Exception in FtpWebRequest#64456428::GetRequestStream - The remote server returned an error: 234 SecurFTP: SSL starting
at System.Net.FtpWebRequest.CheckError()
at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
at System.IO.Stream.Close()
at System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
at System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
at System.Net.FtpWebRequest.GetRequestStream()
System.Net Verbose: 0 : [6876] Exiting FtpWebRequest#64456428::GetRequestStream()
System.Net Information: 0 : [1320] ServicePoint#797974 - Closed as idle.
Please help me to solve this issue as it is urgent.
Below is my sample code:
public bool FileTransferStatus(FileInfo oFile, string localCertificateNames, bool isFileType, out string statusMessage)
FtpWebRequest ftpRequest;
FtpWebResponse ftpResponse;
try
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(FTPSite + CurrentDirectory + oFile.Name);
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpRequest.Proxy = null;
ftpRequest.UseBinary = true;
ftpRequest.Credentials = new NetworkCredential(UserName, Password);
ftpRequest.KeepAlive = KeepAlive;
ftpRequest.EnableSsl = UseSSL;
ftpRequest.UsePassive = true;
if (UseSSL)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
List<string> listLocalCertificates = localCertificateNames.Split(',').ToList<string>();
if (isFileType)
foreach (string localCertificate in listLocalCertificates)
string currentCertificate = localCertificate.Replace("\n", "").Replace("\t", "").Replace("\r", "");
X509Certificate certificate = X509Certificate.CreateFromCertFile(System.AppDomain.CurrentDomain.BaseDirectory + currentCertificate.Trim());
ftpRequest.ClientCertificates.Add(certificate);
else
X509Store storeRoot = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
storeRoot.Open(OpenFlags.ReadOnly);
X509Store storePersonal = new X509Store(StoreName.My, StoreLocation.LocalMachine);
storePersonal.Open(OpenFlags.ReadOnly);
List<string> listSerialNumbers = localCertificateNames.Split(',').ToList<string>();
foreach (string sn in listSerialNumbers)
string serialNumber = sn.Trim().ToUpper();
X509CertificateCollection certificates = storeRoot.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, false);
if (certificates.Count == 0) // Not in root store
certificates = storePersonal.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, true);
if (certificates.Count == 0) //Not in personal store
throw new Exception(string.Format("Certificate {0} not found", serialNumber));
storeRoot.Close();
storePersonal.Close();
X509Certificate certificate = certificates[0];
ftpRequest.ClientCertificates.Add(certificate);
//Selection of file to be uploaded
byte[] fileContents = new byte[oFile.Length];
using (FileStream fr = oFile.OpenRead())
fr.Read(fileContents, 0, Convert.ToInt32(oFile.Length));
using (Stream writer = ftpRequest.GetRequestStream())
writer.Write(fileContents, 0, fileContents.Length);
//Gets the FtpWebResponse of the uploading operation
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
ftpResponse.Close();
ftpRequest = null;
statusMessage = "Uploaded successfully";
return true;
catch (Exception webex)
statusMessage = webex.Message;
return false;

Hi,
In .NET, you have built-in support for FTPS in the .NET Framework (see the FtpWebRequest class). However, functionality of this class is severely limited, especially in the SSL/TLS control aspect. The .NET Framework doesn't include any support for SSH or
SFTP.
In VCL, you have a selection of free components and libraries that provide FTP functionality. When you add OpenSSL to them, you can get FTPS for free. If you don't want to deal with OpenSSL DLLs, you can use one of the commercially available libraries for
SSL and FTPS support. Again, there are no freeware SFTP components available for .NET.
Mark as answer or vote as helpful if you find it useful | Ammar Zaied [MCP]

Similar Messages

  • Using X509 certificates to create a client in a JCo destination / pool

    Hi,
    Our administrators have set up JCo destinations for us developers to use in connecting to the SAP R/3 back-end.  We need to use X509 certificates instead of username/password to create a connection.  How is this done?  The JCo API doesn't seem to list any class/method combination that is suitable. 
    JCO.createClient allows me to pass an X509 certificate, but it doesn't allow me to specify what JCO.Pool (i.e., JCo destination) to use. 
    JCO.addClientPool seems to allow both, but I don't think I want to really "add" a pool-- don't I just want to "use" a  pre-existing pool, i.e., one of the JCo destinations our administrator has set up? 
    Do I need to create a Client using the X509 certificate and somehow add this Client to the JCO.Pool?  I thought JCo destinations were meant to be pre-established Client pools waiting for a Client to be plucked out of it and used.  Is that wrong?  What am I missing? 
    Thanks in advance for your responses.

    Hi,
    I'm note sure whether you can use prepared JCo destinations in this case. However, if it's possible to use single JCo clients you instantiate when you need them, you have different options depending on whether you have an Enterprise Portal installed on top of your J2EE Engine or not.
    --> Without Portal
    Retrieve the user's current certificate from UME using:
    [code]com.sap.security.api.IUser currentUser = ...;
    java.security.cert.X509Certificate[] certificates = currentUser.getUserAccounts()[0].getCertificates();
    byte[] certBytes = certs[0].getEncoded();
    String encodedCert = someBase64Method(certBytes);
    Properties jcoProperties = new Properties();
    // Add your backend properties like hostname and so on...
    jcoProperties.setProperty("jco.client.user", "$X509CERT$");
    jcoProperties.setProperty("jco.client.passwd", x509Cert);
    JCO.Client jcoClient = JCO.createClient(jcoProperties);[/code]
    --> With Portal installed
    In general: Define your backend system in the Portal's system landscape instead of as JCo destination. Configure it's logonmethod for X.509 certificates. Either use UME's user mapping feature directly via com.sap.security.api.UMFactory.getUserMapping()... to add the certificate properties to the JCO properties, or use some intermediate API, some of which are available in the portal, some of which reside in the J2EE Engine (details if you request them).
    Best regards
    Heiko

  • Web Services Security using X509 certificate

    Hi,
    I have secured a web service using X509 certificate. i also secured the proxy of it but when i run the proxy client it says.
    javax.security.auth.login.LoginException: Cannot authenticate X509 certificate, User CN=Sam, OU=Technology, O=FS, L=Dallas, ST=Texas, C=US does not exist in our system
    Any idea on this. Do i need to configure the X509 certificate in the server. I am using Oracle SOA Suite and JDeveloper 10.1.3.1
    Thanks

    Hi,
    I have secured a web service using X509 certificate. i also secured the proxy of it but when i run the proxy client it says.
    javax.security.auth.login.LoginException: Cannot authenticate X509 certificate, User CN=Sam, OU=Technology, O=FS, L=Dallas, ST=Texas, C=US does not exist in our system
    Any idea on this. Do i need to configure the X509 certificate in the server. I am using Oracle SOA Suite and JDeveloper 10.1.3.1
    Thanks

  • I need help I tried to use cloud backup on my iPhone 5.0.1 and after all my camera roll pictures are blurry and videos canot be played messege says URL not on this server ! Please help!! iPhone 4S, iOS 5.0.1

    I need help I tried to use cloud backup on my iPhone 5.0.1 and after all my camera roll pictures are blurry and videos canot be played messege says URL not on this server ! Please help!!
    iPhone 4S, iOS 5.0.1

    Try updating to iOS 6.1.3.

  • Need help writing host program using LabView.

    Need help writing host program using LabView.
    Hello,
    I'm designing a HID device, and I want to write a host program using National Instrument's LabView. NI doesn't have any software support for USB, so I'm trying to write a few C dll files and link them to Call Library Functions. NI has some documentation on how to do this, but it's not exactly easy reading.
    I've written a few C console programs (running Win 2K) using the PC host software example for a HID device from John Hyde's book "USB by design", and they run ok. From Hyde's example program, I've written a few functions that use a few API functions each. This makes the main program more streamlined. The functions are; GetHIDPath, OpenHID, GetHIDInfo, Writ
    eHID, ReadHIC, and CloseHID. As I mentioned, my main program runs well with these functions.
    My strategy is to make dll files from these functions and load them into LabView Call Library Functions. However, I'm having a number of subtle problems in trying to do this. The big problem I'm having now are build errors when I try to build to a dll.
    I'm writing this post for a few reasons. First, I'm wondering if there are any LabView programmers who have already written USB HID host programs, and if they could give me some advice. Or, I would be grateful if a LabView or Visual C programmer could help me work out the programming problems that I'm having with my current program. If I get this LabView program working I would be happy to share it. I'm also wondering if there might already be any USB IHD LabView that I could download.
    Any help would be appreciated.
    Regards, George
    George Dorian
    Sutter Instruments
    51 Digital DR.
    Novato, CA 94949
    USA
    [email protected]
    m
    (415) 883-0128
    FAX (415) 883-0572

    George may not answer you.  He hasn't been online here for almost eight years.
    Jim
    You're entirely bonkers. But I'll tell you a secret. All the best people are. ~ Alice

  • I need help from chile and use a language translator to write and not turn my iphone4

    I need help from chile and use a language translator to write and not turn my iphone4

    http://support.apple.com/kb/TS3281       
    Not turn on

  • Need help trying to transfer my information from one iphone to another

    need help trying to transfer my information from one iphone to another

    If you are restoring from an icloud backup you are going to have to erase a content and setting and while in the setup prompts you will get the option to restore from an icloud back...that's the only time you will get the option to restore from an icloud back and that's during setup

  • Need to use  x509 certificate for a SMTP server

    Hello everybody,
    if I want to send e-mail from a location different than my company builing, my company SMTP server requires authentication with my peronal x509 certificate.
    I had no problem using Thunderbird, but I would like to use OS X Mail.
    I installed the x509 certificate into the keyring, and in fact I can send digitally signed emails, but I was not able to find how to tell Mail to use my x509 certificate to authenticate myself to the SMTP server.
    Does anybody know how to solve this problem?
    Thanks and bye,
    Lapoz.

    Browsers such as iCabMobile and Atomic allow you to choose how the device identifies itself to a website. IE is one of the options. However, if the reason you need IE is for something like ActiveX, it's not going to work.

  • How to install & use x509 certificate in XI 3.0

    Hi gurus,
    Somebody knows as install a x509 certificate in XI 3.0? Is it in Visual Admin?
    Is There some guide?
    When this installed, how we test it? What configuration we must do in Communication Channels and the Receiver Agreement/Sender Agreement? What tool we can use to test the scenario?
    Kind regards

    Hi,
    This is used when you are using FTPS in your communicaiton channel. The Certificates are installed in the visual administration. I have not seen any guide on how to install this. But you have a detailed step  by step procedure of how to install in this link:
    http://help.sap.com/saphelp_nw04/helpdata/en/53/b221e3b466b346860715a550ca987d/content.htm
    Apart from this you may also need to install SAP Java Cryptographic Toolkit. You get some help on this at this link:
    http://help.sap.com/saphelp_nw04/helpdata/en/8d/cb71b8046e6e469bf3dd283104e65b/content.htm
    Once when you do this your certificates can be seen from the communicaiton channel. In your communication channel in the FTP Conneciton parameters you have to select Conneciton security as FTPS and check the check box X.509 certificates. In keystore if you press F4 you will see the keystore which were installed earlier. Select the keystore and the X.509 Certificate.
    Once you are done with this run your scenario. If you have any errors you will see in communicaiton channel monitoring.
    ---Satish

  • Need Help on FTP Adapter Archival Process

    Hi Guru's,
    I implemented FTP Adapter for Inbound Operation to read the file from inbound directory and after reading the file should be archived in Archival Directory and Delete the file from directory from inbound directory.
    In my case file is successfully picked from inbound directory and records inserted in to database table. File is not Archiving in Archival Folder and File deleted from Inbound Directory. Here I need to Archive the files in Archival Folder.
    Thanks in Advance
    Could you please help me in this regard and Please provide pointers to me

    <property name="UseRemoteArchive" value="true"/>
    Set this property to "true" to notify the Oracle FTP Adapter that the archival directory is on the same FTP server. If set to "false", the Oracle FTP Adapter uses a local file system folder for archival.
    for more Information here to go : http://docs.oracle.com/cd/E15523_01/integration.1111/e10231/adptr_propertys.htm#CHDEDJEA
    Regards,
    MS Raghava

  • Need help in english to use my iphone4 with orange.fr in france

    I am travelling in France with my factory unlocked iphone4. England and Thailand services have been fine but Orange France is a nightmare. They say I can't get 3G on my iphone4 and there is no english speaking support to help me out. My network settings are turned off but my 20 euro credit has either dissappeared or never was there in the first place. Where can I get English support for this company?

    Hello
    The whole story is a little bit confusing for me. So lets see what you wrote:
    >... thinking that it would fix it but it ended up erasing the whole of my computer even windows 7.
    Thinking is wrong. What you need is exact info about recovery installation and this can be found in users manuals document. Recovery disc is not like Microsoft installation disc and cannot be used for repair. Recovery disc contains recovery image and can be used for clean OS installation (recovery image installation) only.
    > So now I have a computer I can't use
    Why you cannot use it? Recovery image installation installs OS again. Which OS is installed after running recovery image installation?
    > I have also bought the product recovery disks from toshiba's backup media site
    But why if you already have recovery disc that you have used at the beginning of the whole story?
    What you need to do is to use this original disc for OS installation.
    -start your notebook and press F12 several times to enter BOOT menu
    -when the menu is shown put recovery disc into ODD
    -select CD/DVD drive in the menu and press ENTER
    -follow the menu on the screen
    After recovery image installation you will have factory settings again and everything should be OK.
    More questions?

  • Need Help Understanding How To Use iMessage Between Two iPhones

    I have an iPhone 4 and my wife an iPhone 3GS.  We both have iOS 5, but I have discovered something about iMessage I need to make sure I understand correctly.  As I understand it iMessage can send text even if our voice carrier service is unavailable.  I tend to loose signal inside the building I work in.  I usually can get texts in and out, but sometimes not.  But in testing the two phones sending iMessages, I've noticed is that if I have one of the phones with iMessage turned on and the other with iMessage turned off, the two phones will not be able to exchange text.  Is that how it's supposed to work?  Even though one of these phones can receive an iMessage doesn't mean the other one send one back.  Can't the system detect when one phone is connected and another one not, and the one that is not gets sent SMS messages instead?  I don't want to try to send my wife an iMessage because I can't get a voice signal in my building, but her have iMessages turned off and not able to get any messages from me, iMessage or SMS.  I guess I need help better understanding how this actually works between the two phones so I can always get texts back and forth between my wife and I.  My other misgiving is that this iMessage thing consumes my data limit.  My wife gets unlimited because she had her phone before the limits were imposed, but I got on board after, so I am hesitant to use iMessage all the time because of it.  I have no intention to send picture mail through iMessage, but the thing is if I wanted to switch to SMS to send picture mail to save data, but my wife's phone is set to iMessage, she won't get it.  If this is how this thing is supposed to work, I'm not really impressed.  Some insight would be appreciated

    I think you are making this way too complicated. Why are you turning iMessage off? If you are at your office connect to the WiFi there and send your wife messages that way (unless your office is blocking the port iMessage uses). When possible the two phones will use iMessage but will revert to SMS is iMessage is not available if that option is set that way.
    I would not worry about using up your data plan if you have the 2GB, text iMessages are going to be very small and MMS (picture) ones are not very large either. Unless you are sending hundreds of picture iMessages a day you will have a hard time using up your data.
    If you are near an Apple Store you should explore signing up for an intro iPhone course and have them run through iMessage options.

  • Need help on how to use conference facility within adobe connect

    I need some help on how to use conference facility within adobe connect?

    I'd recommend you start here: Getting Started with Adobe Connect - Adobe Connect User Community

  • Need help please. When using Safari while banking online I cannot get rid of Pop ups although I have ticket no Pop ups. Any ideas ?

    Need your help please. When using Safari while banking online- I cannot get rid of the Pop ups although I have ticked the correct place. Any ideas ?
    A few months ago I downloaded a program someone suggested.

    Get Adblock or GlimmerBlocker.

  • Need help on Self Hosting Using channel Factory

    Hello,
         Need Help.
         I am trying to self host WCF service using cutom Channel Factory class. but I am getting exception.
     The scenario is something like below this  : -
    I want to create the endpoint connection to WCF service. I want to achieve this  using custom channel factory(not using default channel factory API provided in .Net Framework).
    I have written one class and it is derived from channel factory and we are reading the service endpoints, behaviors, bindings from external configuration file added in the project.
    I am able to connect to server side service hosted on different machine using following sample code successfully.
    In the case of “self-hosting”  I am receiving following error : --
         "There was an error reading from the pipe: The pipe has been ended. (109, 0x6d)."
    Below is the code which I have written for self hosting WCF service using custom channel factory.
    // Method where I am calling CustomChannel Factory constructor
    internal void ProxyCall(string msgEndpointConfigurationName, string url)
                string appConfigDirName, extConfigFilePath;
                FileInfo configFileInfo = new FileInfo(appConfigName);
                appConfigDirName = configFileInfo.DirectoryName;
                extConfigFilePath = appConfigDirName + "\\" + extConfigFileName;
                this.messageEndpointConfigurationName = msgEndpointConfigurationName;
                if (string.IsNullOrEmpty(url))
                    this.messageFactory = new CustomChannelFactory<IServerOperationsMessage>(extConfigFilePath, this.messageEndpointConfigurationName);
                else
                   //EndpointAddress e = new EndpointAddress(url + ClientToServerOperations.ServiceAddress);
                   //this.messageFactory = new ChannelFactory<IServerOperationsMessage>(this.messageEndpointConfigurationName, e);
                   this.messageFactory = new CustomSelfHostingChannelFactory<IServerOperationsMessage>(extConfigFilePath, this.messageEndpointConfigurationName, url + ClientToServerOperations.ServiceAddress);
                   //this.messageFactory = new CustomSelfHostingChannelFactory<IServerOperationsMessage>(extConfigFilePath, this.messageEndpointConfigurationName, e);
       ClientMessageFormatterBehavior formatterBehavior = new ClientMessageFormatterBehavior();
       foreach (OperationDescription operation in this.messageFactory.Endpoint.Contract.Operations)
        if (!operation.Behaviors.Contains(typeof(ClientMessageFormatterBehavior)))
         operation.Behaviors.Add(formatterBehavior);
       this.messageFactory.Endpoint.Behaviors.Add(new MessageStatisticsBehavior());
       this.messageFactory.Open();
    // Custom Channel Factory Class
    internal class CustomSelfHostingChannelFactory<T> : ChannelFactory<T>
            /// Custom client channel. Allows to specify a different configuration file
            /// <typeparam name="T"></typeparam>
            private string configurationPath, selectedMsgEndPoint, uriAddress;
            public PPCCustomSelfHostingChannelFactory(string configurationPath, string selectedEndPoint, string uriAddress)
                : base(typeof(T))
                this.configurationPath = configurationPath;
                this.selectedMsgEndPoint = selectedEndPoint;
                this.uriAddress = uriAddress;
                EndpointAddress e = new EndpointAddress(this.uriAddress);
                base.InitializeEndpoint(selectedEndPoint,e);
            //As you can see, a call to the method InitialiazeEndpoint of the base class is required.
            //That method will automatically call to our CreateDescription method to configure the service endpoint.
            ///Loads the serviceEndpoint description from the specified configuration file
            protected override ServiceEndpoint CreateDescription()
                ServiceEndpoint serviceEndpoint = base.CreateDescription();
                return serviceEndpoint;
            private EndpointIdentity GetIdentity(IdentityElement element)
                EndpointIdentity identity = null;
                PropertyInformationCollection properties = element.ElementInformation.Properties;
                if (properties["userPrincipalName"].ValueOrigin != PropertyValueOrigin.Default)
                    return EndpointIdentity.CreateUpnIdentity(element.UserPrincipalName.Value);
                if (properties["servicePrincipalName"].ValueOrigin != PropertyValueOrigin.Default)
                    return EndpointIdentity.CreateSpnIdentity(element.ServicePrincipalName.Value);
                if (properties["dns"].ValueOrigin != PropertyValueOrigin.Default)
                    return EndpointIdentity.CreateDnsIdentity(element.Dns.Value);
                if (properties["rsa"].ValueOrigin != PropertyValueOrigin.Default)
                    return EndpointIdentity.CreateRsaIdentity(element.Rsa.Value);
                return identity;
            private Binding GetBinding(IBindingConfigurationElement configurationElement)
                if (configurationElement is CustomBindingElement) return new CustomBinding();
                else if (configurationElement is BasicHttpBindingElement) return new BasicHttpBinding();
                else if (configurationElement is NetMsmqBindingElement) return new NetMsmqBinding();
                else if (configurationElement is NetNamedPipeBindingElement) return new NetNamedPipeBinding();
                else if (configurationElement is NetPeerTcpBindingElement) return new NetPeerTcpBinding();
                else if (configurationElement is NetTcpBindingElement) return new NetTcpBinding();
                else if (configurationElement is WSDualHttpBindingElement) return new WSDualHttpBinding();
                else if (configurationElement is WSHttpBindingElement) return new WSHttpBinding();
                else if (configurationElement is WSFederationHttpBindingElement) return new WSFederationHttpBinding();
                return null;
            private Binding CreateBinding(string bindingName, ServiceModelSectionGroup group)
                BindingCollectionElement bindingElementCollection = group.Bindings[bindingName];
                if (bindingElementCollection.ConfiguredBindings.Count > 0)
                    IBindingConfigurationElement be = bindingElementCollection.ConfiguredBindings[0];
                    Binding binding = GetBinding(be);
                    if (be != null)
                        be.ApplyConfiguration(binding);
                    return binding;
                return null;
            private void AddBehaviors(string behaviorConfiguration, ServiceEndpoint serviceEndpoint, ServiceModelSectionGroup group)
                EndpointBehaviorElement behaviorElement = group.Behaviors.EndpointBehaviors[behaviorConfiguration];
                for (int i = 0; i < behaviorElement.Count; i++)
                    BehaviorExtensionElement behaviorExtension = behaviorElement[i];
                    object extension = behaviorExtension.GetType().InvokeMember("CreateBehavior", BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, null,
    behaviorExtension, null);
                    if (extension != null)
                        serviceEndpoint.Behaviors.Add((IEndpointBehavior)extension);
    Thanks in advance !! :-)

    Hi,
    There was an error reading from the pipe: Unrecognized error 109 (0x6d).
    One reason was inconsistent binding between client and server <netNamedPipeBinding> <security mode="None"></security>... (no
    communication)
    The other intermittent issue was time-out related.
    For more information, you could refer to:
    http://stackoverflow.com/questions/15836199/wcf-namedpipe-communicationexception-the-pipe-has-been-ended-109-0x6d
    http://stackoverflow.com/questions/22334514/wcf-named-pipe-error-the-pipe-has-been-ended-109-0x6d
    Regards

Maybe you are looking for