Eclipse utraci

Problemy dotyczące innych systemów operacyjnych
Pad19
Posty: 29
Rejestracja: 11 listopada 2010, 11:32

Eclipse utracił uprawnienia do otwierania sock_raw jako zwykły użytkownik

Post autor: Pad19 »

Witam.
M
am zainstalowane Ubuntu 12.04, nic nie zmieniane przy uprawnieniach, standardowo stworzony jeden użytkownik przy instalacji systemu.

Mam zainstalowany program Eclipse, w którym programowałem aplikacje sieciowe w języku C. Program Eclipse zainstalowany przez centrum oprogramowania, też bez żadnych modyfikacji.

Dzisiaj Eclipse mi się zawiesił przy zamykaniu projektu, w końcu zabiłem jego proces i od tej pory nie mogę otwierać w nim funkcji socket jako sock_raw.

Przykładowy kod:

Kod: Zaznacz cały

s_out = socket(AF_PACKET, SOCK_RAW, ETH_P_ALL);
                if (s_out == -1)
                {
                    printf ("Nie moge otworzyc gniazda s_out\n");
                }
Wcześniej wszystko działało prawidłowo, jako zwykły użytkownik nie root. Teraz niestety zawsze

Kod: Zaznacz cały

s_out
przyjmuje wartość: i zwraca błąd:

Kod: Zaznacz cały

SIOCGIFINDEX: Bad file descriptor

Myślę, że nadpisały się uprawnienia jakiegoś pliku ale nie mam pojęcia jakiego.

W internecie znalazłem wiele informacji o tym, że sock_raw zadziała tylko uruchamiany z konta roota i owszem działa. Jednakże, tak jak napisałem wcześniej, wszystko również działało mi na koncie zwykłego użytkownika i chciałbym aby dalej tak było.

Pozdrawiam.
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Socket otwierasz w programie, który napisałeś przy pomocy Eclipse? A próbowałeś uruchomić program poza Eclipse? I czy jesteś pewien, że problem nie jest błędny kod?
Pad19
Posty: 29
Rejestracja: 11 listopada 2010, 11:32

Post autor: Pad19 »

Tak, jestem pewny, że kod jest poprawny, mam napisane kilka programów w ten sam sposób i wszystkie działały prawidłowo.

Mam zapisane zrobione projekty, które jeszcze działały około dwie godziny temu, teraz je otwieram i nie działają. Poza programem Eclipse, w tej chwili, też nie otwiera funkcji socket, wcześniej niestety nie pamiętam, czy działało poza Eclipse, bo prawie zawsze uruchamiałem przez niego.
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Dołącz zawartość:

Kod: Zaznacz cały

/var/log/syslog
z momentu awarii.
Zgodnie z dokumentacją funkcji socket:
RETURN VALUE On success, a file descriptor for the new socket is returned. On
error, -1 is returned, and errno is set appropriately.
Sprawdź wartość zmiennej errno, powinna ona dostarczyć więcej informacji na temat problemu. Więcej o zmiennej w:

Kod: Zaznacz cały

man errno
Pad19
Posty: 29
Rejestracja: 11 listopada 2010, 11:32

Post autor: Pad19 »

W log/syslog nic nie ma na ten temat, nie jest to problem z jądrem, system się nie zawiesił. Żadne nowe wpisy nie pojawiają się tam przy otwieraniu socketu. Tak samo nie ma wpisu nawet jak zabijałem proces Eclipsa. Funkcja perror operująca na errno zwraca: "Operation not permitted". ioctl(s_out, SIOCGIFINDEX, &ifr) powoduje błąd "SIOCGIFINDEX: Bad file descriptor". W "http://debian.linux.pl/threads/12771-Za ... #post81406" nie ma nic co mogłoby mieć związek z tym co mi się stało.

Sytuacja dla mnie jest jasna od początku. Problem występuje z uprawnieniami które miał Eclipse a je stracił przez nieprawidłowe zamknięcie. Zgodnie z dokumentacją przeczytaną w internecie jak już pisałem otwieranie socketu jako raw jest dozwolone tylko spod roota. Jeśli działało mi to spod zwykłego użytkownika to znaczy że Eclipse podczas instalacji dokonał zmian w systemie i nadał uprawnienia. Prawdopodobnie podczas zamykania i przez to że zabiłem mu proces narobił będów w tych plikach uprawnień. Reinstalacja Eclipsa niestety nie pomogła. Teraz pytanie do osoby która zna się na uprawnieniach Linuxa :) Gdzie i jak działają mechanizmy które pozwalają użytkownikom odpalać programy z pewnymi przywilejami roota(nie sudo) i jak przywrócić tą funkcjonalność do Eclipsa.
fnmirk
Senior Member
Posty: 8321
Rejestracja: 03 grudnia 2007, 06:37

Post autor: fnmirk »

Pad19, nie ma odpowiedzi opisowej, że Twoim zdaniem, w logu nic nie ma. Zostałeś poproszony przez Rafala_F ,o dostarczenie konkretnych informacji to proszę ich dostarczyć.

Proszę zapoznać się z opisem:
http://debian.linux.pl/threads/12771-Za ... #post81406

Wstawiając na forum polecenia, ich wyniki, logi itp. proszę używać znaczników code.

Ps. Zielony kolor jest na tym forum zarezerwowany, wyłącznie dla moderatorów.
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Eclipse tu nie ma nic do rzeczy (o ile nie był uruchomiony jako root), a przynajmniej nie powinien. Eclipse nie tworzy żadnego wirtualnego środowiska, sam w sobie nie zawiera też kompilatora, uruchamia po prostu zewnętrzne programy. Spróbuj przebudować projekt poza eclipse używając make, bądź samego gcc w zależności od poziomu skomplikowania projektu i ponownie go uruchomić. U mnie przykładowa funkcja z pierwszego postu uruchomiona w przestrzeni użytkownika nie zwraca błędu.
ODPOWIEDZ