[Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

Reason why this Impersonator code doesn't work?

Posted on 2007-11-20
3
Medium Priority
?
892 Views
Last Modified: 2008-02-01
Hi All -
I'm using C#

I got this code over a year ago from here. It worked then, but when i added it into my new project it doesn't work. The code doesn't error out, i just get "access denied" when i try to update the list.

Thanks
public class Impersonator
      {
 
            public static WindowsIdentity CreateIdentity(string User, string Domain, string Password)
            {
                  // The Windows NT user token.
                  IntPtr tokenHandle = new IntPtr(0);
 
                  const int LOGON32_PROVIDER_DEFAULT = 0;
                  const int LOGON32_LOGON_NETWORK = 3;
 
                  tokenHandle = IntPtr.Zero;
 
                  // Call LogonUser to obtain a handle to an access token.
                  bool returnValue = LogonUser(User, Domain, Password, 
                        LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT,
                        ref tokenHandle);
 
                  if (false == returnValue)
                  {
                        int ret = Marshal.GetLastWin32Error();
                        throw new Exception("LogonUser failed with error code: " +  ret);
                  }
 
                  //System.Diagnostics.Debug.WriteLine("Created user token: " + tokenHandle);
 
                  //The WindowsIdentity class makes a new copy of the token.
                  //It also handles calling CloseHandle for the copy.
                  WindowsIdentity id = new WindowsIdentity(tokenHandle);
                  CloseHandle(tokenHandle);
                  return id;
            }
 
            [DllImport("advapi32.dll", SetLastError=true)]
            private static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
                  int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
 
            [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
            private extern static bool CloseHandle(IntPtr handle);
      }
}
 
protected void btnSaveExit_Click(object sender, EventArgs e)
    {
WindowsImpersonationContext wic = Impersonator.CreateIdentity("Admin User Name", "Domain where Admin resids", "Password").Impersonate();
            SPSite site = SPControl.GetContextSite(Context);
            //site.CatchAccessDeniedException = false;
            SPWeb subSite = site.AllWebs["mysite"];
            subSite.AllowUnsafeUpdates = true;
            SPListCollection allSiteLists = subSite.Lists;
            SPList list = subSite.Lists["mylist"];
            SPListItemCollection listItems = list.Items;
            SPListItem newItem = list.GetItemById(Convert.ToInt32(lblUnique.Text));
            wic.Undo();
            ////
            newItem["ApprovedBy"] = txtApprovedBy.Text;
            newItem["ApprovedDate"] = txtApprovedDate.Text;
            ////
            newItem.Update();

Open in new window

0
Comment
Question by:JordanBlackler
  • 2
3 Comments
 
LVL 11

Accepted Solution

by:
Salim Fayad earned 2000 total points
ID: 20321028
Make sure that the user has access to the Sharepoint site and that he has write access on the list
0
 

Author Comment

by:JordanBlackler
ID: 20321401
If they have write access, then wouldn't they people able to edit the list anyways?
0
 

Author Comment

by:JordanBlackler
ID: 20322631
I did what your suggested and i also changed the way i got the site and list. Now it works.
0

Featured Post

Get quick recovery of individual SharePoint items

Free tool – Veeam Explorer for Microsoft SharePoint, enables fast, easy restores of SharePoint sites, documents, libraries and lists — all with no agents to manage and no additional licenses to buy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The vision: A MegaMenu for a SharePoint portal home page The mission: Make it easy to maintain. Allow rich content and sub headers as well as standard links. Factor in frequent changes without involving developers or a lengthy Dev/Test/Prod rel…
I thought I'd write this up for anyone who has a request to create an anonymous whistle-blower-type submission form created using SharePoint 2010 (this would probably work the same for 2013). It's not 100% fool-proof but it's as close as you can get…
Integration Management Part 2
Is your OST file inaccessible, Need to transfer OST file from one computer to another? Want to convert OST file to PST? If the answer to any of the above question is yes, then look no further. With the help of Stellar OST to PST Converter, you can e…
Suggested Courses

864 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question