самый большой "глюк" вводит - C++ намного более со строгим контролем типов, чем C, и предпочтительные методы для решения, это в C++ просто не доступно в C. А именно, можно тихо бросить между типами в C (особенно типы указателей), но не в C++. И C++ высоко рекомендует использовать static_cast/reinterpret_cast/const_cast методы для того, чтобы решить эти вопросы.
, Что еще более важно, если Вы изучаете синтаксис C++ и манерности, Вы, вероятно, найдете трудным иметь дело с C (некоторые могут сказать, что это хорошо; и я предпочитаю C++ сам, но иногда это просто не опция, или необходимо иметь дело с унаследованным кодом, это находится в C и не C++). Снова, наиболее вероятные проблемы, с которыми Вы встретитесь, имеют дело с указателями (и общее использование массива особенно символьного *; в C++ с помощью станд.:: строка и станд.:: вектор или другие наборы просто лучше ).
, конечно, возможно изучить C++, и затем изучить различия между C и C++ и быть способным к программированию в обоих. Но различия намного больше, чем просто кожа глубоко.
Как говорится в сообщении, для установки Java на Mac вам нужно перейти на Apple, а не на Sun. Насколько мне известно, Apple JDK 6 по умолчанию устанавливается в Mac OS X 10.6 (Snow Leopard). Возможно, вам потребуется установить инструменты разработчика с установочного DVD-диска Mac OS X (инструменты разработчика можно установить с DVD-диска с ОС по желанию).
См .: http://developer.apple.com/java/
ПРИМЕЧАНИЕ Этот ответ от 16 октября 2009 г. устарел; вы можете получить JDK для Mac OS X с обычной страницы загрузки JDK на веб-сайте Oracle.
Если доменное имя, указанное в параметре username
, недействительно, но пользователь существует в домене, указанном в параметре path
, пользователь будет аутентифицирован (с помощью резервного ). Однако, если пользователь существует в другом домене в лесу, чем тот, который указан в параметре path
, аутентификация будет успешной, только если доменная часть параметра username
включена и верна.
Существует четыре различных способа указания параметра имени пользователя при работе с объектами DirectoryEntry:
Позвольте мне проиллюстрировать это на примере:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.DirectoryServices;
namespace DirectoryTest
{
class Program
{
private static Int32 counter = 1;
static void Main(string[] args)
{
TestConnection();
}
private static void TestConnection()
{
String domainOne = "LDAP://DC=domain,DC=one";
String domainOneName = "DOMAINONE";
String domainOneUser = "onetest";
String domainOnePass = "testingONE!";
String domainTwo = "LDAP://DC=domain,DC=two";
String domainTwoName = "DOMAINTWO";
String domainTwoUser = "twotest";
String domainTwoPass = "testingTWO!";
String invalidDomain = "INVALIDDOMAIN";
// 1) This works because it's the correct NT Account Name in the same domain:
Connect(domainOne, domainOneName + "\\" + domainOneUser, domainOnePass);
// 2) This works because username can be supplied without the domain part
// (plain username = sAMAccountName):
Connect(domainOne, domainOneUser, domainOnePass);
// 3) This works because there's a fall back in DirectoryEntry to drop the domain part
// and attempt connection using the plain username (sAMAccountName) in (in this case)
// the forrest root domain:
Connect(domainOne, invalidDomain + "\\" + domainOneUser, domainOnePass);
// 4) This works because the forrest is searched for a domain matching domainTwoName:
Connect(domainOne, domainTwoName + "\\" + domainTwoUser, domainTwoPass);
// 5) This fails because domainTwoUser is not in the forrest root (domainOne)
// and because no domain was specified other domains are not searched:
Connect(domainOne, domainTwoUser, domainTwoPass);
// 6) This fails as well because the fallback of dropping the domain name and using
// the plain username fails (there's no domainTwoUser in domainOne):
Connect(domainOne, invalidDomain + "\\" + domainTwoUser, domainTwoPass);
// 7) This fails because there's no domainTwoUser in domainOneName:
Connect(domainOne, domainOneName + "\\" + domainTwoUser, domainTwoPass);
// 8) This works because there's a domainTwoUser in domainTwoName:
Connect(domainTwo, domainTwoName + "\\" + domainTwoUser, domainTwoPass);
// 9) This works because of the fallback to using plain username when connecting
// to domainTwo with an invalid domain name but using domainTwoUser/Pass:
Connect(domainTwo, invalidDomain + "\\" + domainTwoUser, domainTwoPass);
}
private static void Connect(String path, String username, String password)
{
Console.WriteLine(
"{0}) Path: {1} User: {2} Pass: {3}",
counter, path, username, password);
DirectoryEntry de = new DirectoryEntry(path, username, password);
try
{
de.RefreshCache();
Console.WriteLine("{0} = {1}", username, "Autenticated");
}
catch (Exception ex)
{
Console.WriteLine("{0} ({1})", ex.Message, username);
}
Console.WriteLine();
counter++;
}
}
}
В приведенном выше примере domain.one - это корневой домен forrest, а domain.two находится в том же forrest, что и domain.one (но, естественно, другое дерево ).
Итак, чтобы ответить на ваш вопрос: Аутентификация всегда будет неудачной, если пользователь находится не в том домене, к которому мы подключаемся, и в имени пользователя
указано недопустимое доменное имя или нет. параметр.
I есть два приложения, которые используют DirectoryEntry (_path, domainAndUsername, pwd);
конструктор, а я не нет проблем с аутентификацией. Каждое приложение устанавливается на разных клиентах, у обоих очень (очень) большие доменные структуры.