nixp.ru v3.0

27 мая 2017,
суббота,
03:41:45 MSK

DevOps с компанией «Флант»
Longobard написал 20 октября 2004 года в 20:46 (329 просмотров) Ведет себя как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.

Вот фигня какая: есть у меня прога для монтирования/демонтирования самбашар с винды. Так вот, у нее серверная часть под линух. И вот добираемся до момента — над маунтить шары. Вот что делаю:

......
        err_msg( "%s = %s", sip, sss );
        command = "smbmount " + sss + " " + smp +" -o password=nopass" ;
        if ( system( command.c_str() ) != 0 )
        {
          err_msg( "Unable to mount share %s ", sss);
        }
        else
          err_msg( "Share %s has been mounted succesfully!", sss );
      }
.....

Эт приводит к тому, что самба пишет 1681: tree connect failed: ERRDOS — ERRnoaccess (Access denied.)

Пробую такую же команду с консоли — все работает. Пробовал даже вывод полученной команды в файл и дальнейший запуск — шара маунтится. Вот например:

smbmount //keeper911/e /home/ftp/keeper -o password=nopass

Прога работает из под рута. В мане к system я прочитал, что эта ф-я глючит из под рута. Тогда я переписал этот код с использованием fork() + execvp(). Получаю ту же какашку. В чем дело? Причем эта прога работает нормальнор на одних системах и вот такие вот глюки на других :)

Longobard

Самая ботва в том, что на моем хосте ЭТО РАБОТАЕТ. А на другом — нет. Вот его данные:

[root@keeper root]# uname -a
Linux keeper 2.6.8.1-ck1 #1 Sun Sep 12 19:53:38 MSD 2004 i686 i686 i386 GNU/Linux

Дистр реджопина

Fatal

А почему вы решили, что именно из-за system?

Longobard
Fatal
А почему вы решили, что именно из-за system?

А из за чего еще? Я делал вывод команды в лог:

err_msg («Doing \«%s\»», command.c_str());

Потом копирую команду из лога и пихаю в консоль — она работает

Подскажите, пожалуйста, как в баше сокет слушать и из сокета читать?

decvar

попробуй всесто system() использовать popen(). Я писал гуевый муантер шар с smb. Все работало.

Longobard

А можешь им поделиться? А то времени нету :) Попрбовал popen() — та же бтв

decvar

не могу. уже похерил.

Еще предложение:

execve на bash с параметром выполнения твоей команды. И главное не забудь про переменные окружения.

Longobard
decvar
не могу. уже похерил.

Еще предложение:

execve на bash с параметром выполнения твоей команды. И главное не забудь про переменные окружения.

а что с ними?

Вобщем на выходных буду дебажить smbmount, вызванный из проги и из консоли

Longobard

Раскопал одну особенность:

system( «mount //keeper911/e /home/ftp/keeper -o password=nopass» )

приводит:

1) Из обычной проги — работает и все нормально

2) из моег демона унмаунтера — не работает (самба пишет 2564: tree connect failed: ERRDOS — ERRnoaccess (Access denied.)

)

Предполагаю что это связано с тем, что прога — демон :)

decvar

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

Longobard
decvar
вот по этому я и говорю тебе запустить баш и из него свою команду. Ты же демон, у тя нет терминала, и нет всех переменных окружения.

Попробую либо так, либо с помощью сисколла mount()

Fatal

Демон здесь вряд ли причем, скорее ошибка не в system, а просто что-то на нее влияет, так трудно сказать. Демон таже программа, что и другие, только в терминал не пишет, ну это все мелочи, по сути, то все одно и то же.

Попробуй что-нибудь другое через system запустить.

decvar

проблема в том, что демона поле fork похорошему нет управляющего терминала, соответственно резальтат запуска чего-либо чрез system() может быть очень странным.

Longobard

Это все так, но почему связка fork() + execvp() приводит к тому же багу — загадка

Fatal
LONGOBARD
Это все так, но почему связка fork() + execvp() приводит к тому же багу — загадка

Приводит к той же ошибки, потому что скорее всего system реализован через парочку exec* fork.

Вы говорили выше, что у вас под консолью без ошибок запускается. Может причина в графичес кой оболочки, может запускать через другую графическую оболочку, к примеру через гном (если вы запускаете через KDE). У меня на FreeBSD KDE глючноватая, может у вас такая же штука…