2013-05-02 5 views
1

Это моя программа, и она, похоже, не работает. Иногда я думал, что это работает с \0 или \r вместо \n, но я думаю, это потому, что я уже выполнил команду sudo на терминале, где я запускал эту программу, поэтому он не запрашивал у меня пароль.Пытается передать пароль sudo напрямую через STDIN

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

int main() 
{ 
    FILE* pipe = popen("sudo -S ls", "w"); 
    pwrite(pipe,"mypass\n"); 
    pclose(pipe); 
    return 0; 
} 

Куда я иду не так? Как я могу это исправить? Благодарю.

+0

Я предполагаю, что 'sudo' проверяет, работает ли он на TTY и откажется работать, если нет. –

+0

Вы можете узнать, выполняется ли текущий процесс с правами root, а если не запрашивать _user_ вместо 'sudo'. – Nick

+0

Спасибо @KerrekSB и Nick за то, что они дали некоторые указатели. Действительно ценю это. Ответ найден ниже. –

ответ

1

Я только что нашел обходное решение, которое, кажется, работает. Спасибо всем, кто задумался.

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

int main() 
{ 
    FILE* pipe = popen("echo mypass | sudo -S ls", "w"); 
    pclose(pipe); 
    return 0; 
} 
+0

Этого лучше добиться, изменив конфигурацию sudo, чтобы он не запрашивал пароль. – spbnick

Смежные вопросы