private void Query() { try { Console.WriteLine("Input path:"); var path = Console.ReadLine(); Console.WriteLine("Input your query:"); var query = Console.ReadLine(); Console.WriteLine("Recursive search? (y/n):"); var searchStrategy = LdapConnection.SCOPE_ONE; if (Console.ReadKey().Key == ConsoleKey.Y) { searchStrategy = LdapConnection.SCOPE_SUB; } Console.WriteLine(); LdapSearchConstraints c = new LdapSearchConstraints(); c.MaxResults = 50; LdapSearchResults searchResults = this.connect.Search(path, searchStrategy, query, null, false, c); while (searchResults.hasMore()) { LdapEntry entry = null; try { entry = searchResults.next(); //Console.WriteLine(entry.getAttribute("name")); Console.WriteLine(entry.ToString()); Console.WriteLine(); Console.WriteLine("==============="); Console.WriteLine(); } catch (LdapException e) { Console.WriteLine("Error: " + e.LdapErrorMessage); } /* * // Get the attribute set of the entry * LdapAttributeSet attributeSet = entry.getAttributeSet(); * System.Collections.IEnumerator ienum = attributeSet.GetEnumerator(); * * // Parse through the attribute set to get the attributes and the corresponding values * while (ienum.MoveNext()) * { * LdapAttribute attribute = (LdapAttribute)ienum.Current; * string attributeName = attribute.Name; * string attributeVal = attribute.StringValue; * Console.WriteLine(attributeName + "value:" + attributeVal); * } */ } } catch (Exception e) { Console.WriteLine("Query ERROR:"); Console.WriteLine(e.ToString()); Console.ReadLine(); } }
public IActionResult OnPost() { Startup.ldap.EnsureConnection(); // update details if (Startup.migrateSecret.Length < 1) { ModelState.AddModelError("Secret", "Secret not loaded into the app"); } if (formData.Secret != Startup.migrateSecret) { ModelState.AddModelError("Secret", "Invalid secret"); } if (!ModelState.IsValid) { return(OnGet()); } Dictionary <int, IntranetUtils.User> iusers = IntranetUtils.GetCurrentUserList(Startup.Configuration); List <LDAPUtils.MemberInfo> lusers = Startup.ldap.FetchAllMembersInfo(); var llut = new Dictionary <int, LDAPUtils.MemberInfo>(); // fill out any missing django account numbers foreach (var mi in lusers) { if (mi.DjangoAccount <= 0) { var q = from i in iusers.Values where string.Equals(i.Username, mi.UID, StringComparison.OrdinalIgnoreCase) || string.Equals(i.Email, mi.Mail, StringComparison.OrdinalIgnoreCase) select i.Id; mi.DjangoAccount = q.SingleOrDefault(); } //Console.WriteLine("Matching user " + mi.UID + " with Django user " + mi.DjangoAccount); if (mi.DjangoAccount > 0) { llut.Add(mi.DjangoAccount, mi); } } int newUsers = 0, modUsers = 0; // update/create user data from intranet in ldap foreach (var iu in iusers.Values) { //Console.WriteLine("Intranet user: <" + iu.Username + ">"); string ldapPwd = iu.PasswordHash; string[] parts = iu.PasswordHash.Split('$'); if (parts.Length >= 4) { string algo = parts[0]; string iters = parts[1]; string salt = parts[2]; string bdk = parts[3].Replace('+', '.').TrimEnd('='); string b64salt = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(salt)); ldapPwd = "{PBKDF2-SHA256}" + iters + "$" + b64salt + "$" + bdk; } string ldapCn = iu.FirstName + " " + iu.LastName; if (!llut.ContainsKey(iu.Id)) { // create entry newUsers++; string dn = Startup.ldap.Params.DN("uid=" + iu.Username + ",ou=Members"); var ast = new LdapAttributeSet(); ast.Add(new LdapAttribute("objectClass", new string[] { "top", "person", "organizationalPerson", "shadowAccount", "inetOrgPerson", "Nextcloud" })); ast.Add(new LdapAttribute("cn", ldapCn)); if (iu.FirstName.Length > 0) { ast.Add(new LdapAttribute("givenName", iu.FirstName)); } if (iu.LastName.Length > 0) { ast.Add(new LdapAttribute("sn", iu.LastName)); } ast.Add(new LdapAttribute("uid", iu.Username)); if (iu.PreferredName.Length > 0) { ast.Add(new LdapAttribute("displayName", iu.PreferredName)); } ast.Add(new LdapAttribute("employeeNumber", iu.Id.ToString())); if (iu.Email.Length > 0) { ast.Add(new LdapAttribute("mail", iu.Email)); } ast.Add(new LdapAttribute("NextcloudQuota", "1GB")); if (iu.PermanentAddress.Length > 0) { ast.Add(new LdapAttribute("postalAddress", iu.PermanentAddress)); } if (iu.Room.Length > 0) { ast.Add(new LdapAttribute("roomNumber", iu.Room)); } if (iu.PhoneNumber.Length > 0) { ast.Add(new LdapAttribute("telephoneNumber", iu.PhoneNumber)); } ast.Add(new LdapAttribute("userPassword", ldapPwd)); try { LdapEntry e = new LdapEntry(dn, ast); // update ldap db Startup.ldap.Connection.Add(e); // update model var nmi = new LDAPUtils.MemberInfo(e, Startup.ldap); lusers.Add(nmi); llut.Add(nmi.DjangoAccount, nmi); // */ } catch (LdapException e) { Console.WriteLine("Invalid LDAP conversion for " + iu.Username); Console.WriteLine(e.ToString()); } } else { // update entry var lu = llut[iu.Id]; List <LdapModification> modifications = new List <LdapModification>(); if (ldapCn != lu.FullName) { modifications.Add(new LdapModification(LdapModification.Replace, new LdapAttribute("cn", ldapCn))); } if (iu.FirstName != lu.FirstName && iu.FirstName.Length > 0) { modifications.Add(new LdapModification(LdapModification.Replace, new LdapAttribute("givenName", iu.FirstName))); } if (iu.LastName != lu.Surname && iu.LastName.Length > 0) { modifications.Add(new LdapModification(LdapModification.Replace, new LdapAttribute("sn", iu.LastName))); } if (iu.PreferredName != lu.DisplayName && iu.PreferredName.Length > 0) { modifications.Add(new LdapModification(LdapModification.Replace, new LdapAttribute("displayName", iu.PreferredName))); } if (iu.Email != lu.Mail && iu.Email.Length > 0) { modifications.Add(new LdapModification(LdapModification.Replace, new LdapAttribute("mail", iu.Email))); } if (iu.Room != lu.Flat && iu.Room.Length > 0) { modifications.Add(new LdapModification(LdapModification.Replace, new LdapAttribute("roomNumber", iu.Room))); } if (iu.PermanentAddress != lu.Address && iu.PermanentAddress.Length > 0) { modifications.Add(new LdapModification(LdapModification.Replace, new LdapAttribute("postalAddress", iu.PermanentAddress))); } if (iu.PhoneNumber != lu.TelephoneNumber && iu.PhoneNumber.Length > 0) { modifications.Add(new LdapModification(LdapModification.Replace, new LdapAttribute("telephoneNumber", iu.PhoneNumber))); } if (ldapPwd != lu.Password) { modifications.Add(new LdapModification(LdapModification.Replace, new LdapAttribute("userPassword", ldapPwd))); } if (modifications.Count < 1) { continue; } modUsers++; try { Startup.ldap.Connection.Modify(lu.DN, modifications.ToArray()); } catch (LdapException e) { Console.WriteLine("Invalid LDAP conversion for " + lu.DN); Console.WriteLine(e.ToString()); } } } // move old users (TODO) Console.WriteLine("Users: new: {0} modified: {1}", newUsers, modUsers); return(Page()); }