Re[11]: Изменение прав для своего процесса
От: fefelov Россия  
Дата: 18.05.05 23:03
Оценка: 3 (2)
Здравствуйте, Olexiy, Вы писали:

Вот этот код успешно работает с Samba-сервером, который является контроллером домена:
import jcifs.*;
import jcifs.smb.*;

public class ListFiles {

  public static void main(String argv[]) throws Exception {
    try {
      UniAddress dc = UniAddress.getByName(HOST);
      NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(DOMAIN, USER, PASSWD);
      SmbSession.logon(dc, auth);

      SmbFile file = new SmbFile("smb://" + HOST + "/" + RESOURCE + "/", auth);
      SmbFile[] allFiles = file.listFiles();
      for (int i = 0; i < allFiles.length; i++)
        System.out.println(allFiles[i].getName());
    } catch (SmbException se) {
      System.out.println(Integer.toHexString(se.getNtStatus()) + ": " + se.getRootCause());
    }
  }

  private final static String HOST     = "culsu";
  private final static String DOMAIN   = "home";
  private final static String USER     = "user";
  private final static String PASSWD   = "pass";
  private final static String RESOURCE = "shared2";

}
Re: Изменение прав для своего процесса
От: Risotto Украина  
Дата: 18.05.05 20:13
Оценка: 1 (1) -1
Здравствуйте, TheGrey, Вы писали:

TG>Задача следующая. Даны виндовые шары, и логины/пароли пользователей которые имеют доступ к этим шарам (каждый к своей). Как можно в Java реализовать автоматический просмотр файлов в этих шарах? (Можно считать что это обычные каталоги, но с разными настройками security).


Ключевое слово выделено. Это говорит о том, что без нейтив кода не обойтись (через JNI).
Кто-то сказал когда-то давно, что людям свойственно убивать тех, кого любишь. Что ж, верно и обратное.
Изменение прав для своего процесса
От: TheGrey Украина http://www.uoi.kiev.ua
Дата: 18.05.05 17:31
Оценка: 3 (1)
Привет.

Время от времени занимаюсь одной проблемой, но сроки поджимают, и я решил обратиться к знающим, опытным в Java людям.

Подскажите, плиз, как можно изменить пользователя, под которым запущен процесс/поток имея сетевые логин и пароль?

Задача следующая. Даны виндовые шары, и логины/пароли пользователей которые имеют доступ к этим шарам (каждый к своей). Как можно в Java реализовать автоматический просмотр файлов в этих шарах? (Можно считать что это обычные каталоги, но с разными настройками security).

Все уже работает. С шарами работаю как с обычными каталогами. Только не разобрался как менять эти самые права...

Если можно, какой-нить примерчик маленький на Java, если кто-то решал подобную проблему.

Спасибо всем.
Re[4]: Изменение прав для своего процесса
От: fefelov Россия  
Дата: 18.05.05 21:09
Оценка: 3 (1)
Здравствуйте, Olexiy, Вы писали:

O> SmbFile[] allFiles = file.listFiles(); /// Вылетает exception — cannot connect to socket

O>Есть какие-то идеи что я делаю не так?

Дайте полный текст exception.
Re[2]: Изменение прав для своего процесса
От: fefelov Россия  
Дата: 18.05.05 20:23
Оценка: 2 (1)
Здравствуйте, Risotto, Вы писали:

R>Ключевое слово выделено.

Верно.

R>Это говорит о том, что без нейтив кода не обойтись (через JNI).

А как же вот это?
Re[3]: Изменение прав для своего процесса
От: Olexiy http://www.topcoder.com/tc?module=MemberProfile&amp;cr=303644
Дата: 18.05.05 20:57
Оценка: 1 (1)
Здравствуйте, fefelov, Вы писали:

F>Здравствуйте, Risotto, Вы писали:


R>>Ключевое слово выделено.

F>Верно.

R>>Это говорит о том, что без нейтив кода не обойтись (через JNI).

F>А как же вот это?

А вот у меня возникла похожая проблема:
Задача — прочитать структуру каталога из расшаренной папки на другом компе


import jcifs.UniAddress;
import jcifs.smb.*;
.....
{
UniAddress mydomaincontroller = null;
SmbFile file = null;
        
try {
    mydomaincontroller = UniAddress.getByName("smb://anotherpc/");
    NtlmPasswordAuthentication mycreds = new NtlmPasswordAuthentication("smb://anotherpc", "login", "pass");
    SmbSession.logon(mydomaincontroller, mycreds);

    file = new SmbFile("smb://anotherpc/folder/", mycreds);
              
    } 
    catch (Exception e) {
    }
        
List allFiles = new ArrayList();
try {
    SmbFile[] allFiles = file.listFiles(); /// Вылетает exception - cannot connect to socket
    for (int i = 0; i < allFiles.length; i++)
    System.out.println(allFiles[i].getName());
}
catch (Exception e){
e.printStackTrace();
}
}


Есть какие-то идеи что я делаю не так?
Re[8]: Изменение прав для своего процесса
От: fefelov Россия  
Дата: 18.05.05 21:48
Оценка: 1 (1)
Здравствуйте, Olexiy, Вы писали:

O>Я пробовал как "smb://anotherpc", так и "//anotherpc", так и "anotherpc" — эффект одинаковый.

А в эксплорере (или через net view) вы этот anotherpc видите?
На нем есть учетная запись login/pass?

Попробуйте в код обработчиков исключений вставить вот это:
switch( se.getNtStatus() ) {
    case SmbException.NT_STATUS_OK:
..
    case SmbException.NT_STATUS_ACCESS_DENIED:
..
    case SmbException.NT_STATUS_WRONG_PASSWORD:
..
    case SmbException.NT_STATUS_LOGON_FAILURE:
..
    case SmbException.NT_STATUS_ACCOUNT_RESTRICTION:
..
    case SmbException.NT_STATUS_INVALID_LOGON_HOURS:
..
    case SmbException.NT_STATUS_INVALID_WORKSTATION:
..
    case SmbException.NT_STATUS_PASSWORD_EXPIRED:
..
    case SmbException.NT_STATUS_ACCOUNT_DISABLED:
..
    case SmbException.NT_STATUS_ACCOUNT_LOCKED_OUT:
..
}
(Разумеется, нужно дописать реакции.)
Re[8]: Изменение прав для своего процесса
От: fefelov Россия  
Дата: 18.05.05 21:53
Оценка: 1 (1)
Здравствуйте, Olexiy, Вы писали:

O>Логин и пароль, которые я использую — это локальные логин и пароль на машине, на которую я логинюсь.


А политики разрешают удаленный вход локальных клиентов?

И, повторюсь: А в эксплорере (или через net view) вы этот anotherpc видите?
Re[13]: Изменение прав для своего процесса
От: fefelov Россия  
Дата: 18.05.05 23:20
Оценка: 1 (1)
И еще кое-что забыл...

Не удалось соединиться со своей собственной машиной (Windows XP Home SP2).
jCIFS сказал:
Exception in thread "main" jcifs.smb.SmbAuthException: Logon failure: unknown user name or bad password.
        at jcifs.smb.SmbTransport.send(SmbTransport.java:689)
        at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:271)
        at jcifs.smb.SmbSession.send(SmbSession.java:228)
        at jcifs.smb.SmbTree.treeConnect(SmbTree.java:134)
        at jcifs.smb.SmbSession.logon(SmbSession.java:159)
        at jcifs.smb.SmbSession.logon(SmbSession.java:152)
        at ListFiles.main(ListFiles.java:10)
Re[5]: Изменение прав для своего процесса
От: Аноним  
Дата: 18.05.05 21:21
Оценка:
F>Дайте полный текст exception.

Я прошу прощения, я допустил одну неточность.
У меня в коде встречается

SmbSession.logon(mydomaincontroller, mycreds);


Так вот, если эта строчка в коде есть, то Exception вылетает при её исполнении. Если же её убрать — то там, где и было мной указано.

В обоих случаях, e.printStackTrace(); выводит следующее:



jcifs.smb.SmbException: Failed to negotiate
jcifs.smb.SmbException: Timeout trying to open socket
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:452)
at java.net.Socket.connect(Socket.java:402)
at java.net.Socket.<init>(Socket.java:309)
at java.net.Socket.<init>(Socket.java:211)
at jcifs.netbios.NbtSocket.<init>(NbtSocket.java:59)
at jcifs.smb.SmbTransport.run(SmbTransport.java:342)
at java.lang.Thread.run(Thread.java:534)

at jcifs.smb.SmbTransport.start(SmbTransport.java:315)
at jcifs.smb.SmbTransport.negotiate0(SmbTransport.java:865)
at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:941)
at jcifs.smb.SmbTree.treeConnect(SmbTree.java:119)
at jcifs.smb.SmbSession.logon(SmbSession.java:159)
at jcifs.smb.SmbSession.logon(SmbSession.java:152)
at jCIFSFileClass.DownLoadFile(jCIFSFileClass.java:57)
at jCIFSFileClass.main(jCIFSFileClass.java:18)

at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:947)
at jcifs.smb.SmbTree.treeConnect(SmbTree.java:119)
at jcifs.smb.SmbSession.logon(SmbSession.java:159)
at jcifs.smb.SmbSession.logon(SmbSession.java:152)
at jCIFSFileClass.DownLoadFile(jCIFSFileClass.java:57)
at jCIFSFileClass.main(jCIFSFileClass.java:18)
Re[6]: Изменение прав для своего процесса
От: fefelov Россия  
Дата: 18.05.05 21:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я прошу прощения, я допустил одну неточность.

А>У меня в коде встречается
А>
А>SmbSession.logon(mydomaincontroller, mycreds);
А>

А>Так вот, если эта строчка в коде есть, то Exception вылетает при её исполнении. Если же её убрать — то там, где и было мной указано.

Так у вас в коде
NtlmPasswordAuthentication mycreds = new NtlmPasswordAuthentication("smb://anotherpc", "login", "pass");
домен указан как
smb://anotherpc
. Разве это правильно?
Re[7]: Изменение прав для своего процесса
От: Olexiy http://www.topcoder.com/tc?module=MemberProfile&amp;cr=303644
Дата: 18.05.05 21:43
Оценка:
Да, анонимный пост, ясное дело, мой.

F>Так у вас в коде
NtlmPasswordAuthentication mycreds = new NtlmPasswordAuthentication("smb://anotherpc", "login", "pass");
домен указан как


smb://anotherpc
. Разве это правильно?

Я пробовал как "smb://anotherpc", так и "//anotherpc", так и "anotherpc" — эффект одинаковый.
Re[7]: Изменение прав для своего процесса
От: Olexiy http://www.topcoder.com/tc?module=MemberProfile&amp;cr=303644
Дата: 18.05.05 21:49
Оценка:
По поводу домена.

Логин и пароль, которые я использую — это локальные логин и пароль на машине, на которую я логинюсь.
Re[9]: Изменение прав для своего процесса
От: Olexiy http://www.topcoder.com/tc?module=MemberProfile&amp;cr=303644
Дата: 18.05.05 22:07
Оценка:
Ничего не словилось, выводится та же ошибка
Re[10]: Изменение прав для своего процесса
От: Olexiy http://www.topcoder.com/tc?module=MemberProfile&amp;cr=303644
Дата: 18.05.05 22:11
Оценка:
и эксплорер в сети ту машину видит
Re[12]: Изменение прав для своего процесса
От: fefelov Россия  
Дата: 18.05.05 23:10
Оценка:
Кое-что забыл... Исправляюсь:

System.out.println(Integer.toHexString(se.getNtStatus()) + ": " + se.getRootCause());

Расшифровку кода ошибки, выдаваемого SmbException.getNtStatus() можно подсмотреть в src/jcifs/smb/NtStatus.java.
Re[14]: Изменение прав для своего процесса
От: Olexiy http://www.topcoder.com/tc?module=MemberProfile&amp;cr=303644
Дата: 18.05.05 23:32
Оценка:
У меня тоже такое было в самом начале — не удавалось залогиниться на свою машину. Однако сейчас как раз наоборот — на свою могу, на остальные не могу. Буду пробовать
Re[14]: Изменение прав для своего процесса
От: Olexiy http://www.topcoder.com/tc?module=MemberProfile&amp;cr=303644
Дата: 18.05.05 23:35
Оценка:
Может быть нужны какие-то специфические требования к конфигурации сети?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.