Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: system() problem


  • Subject: Re: lug-bg: system() problem
  • From: Peter Pentchev <roam@xxxxxxxxxxx>
  • Date: Wed, 27 Oct 2004 10:08:33 +0300

On Wed, Oct 27, 2004 at 09:44:19AM +0300, Dimitar Dimitrov wrote:
> Здравейте група.
> Може би това не е точното място за дискусия на C програмиране,

*perk up*  А?  Кой каза C? :)

> но знам, че има хора които разбират от него и може би ще ми помогнат.

Уф... "може би".. е айде, събуди ме вече... :P

> вижте следното:
> --------------------------------------------
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <error.h>
> #include <sys/types.h>
> #include <unistd.h>
> 
> int main(int argc, char *argv[]){
> char command[50]="/bin/echo ";
> 
> if(argc != 3) exit(1);
> 
> setuid(0);
> setgid(0);
> 
> strcat(command,argv[2]);
> strcat(command," | /usr/bin/smbclient -M ");
> strcat(command,argv[1]);

Бърза идейка: това може да стане по-просто с sprintf:

	sprintf(command, "/bin/echo %s | /usr/bin/smbclient -M %s",
	    argv[2], argv[1]);

...но НЕ ГО ПРАВИ ТАКА! :)  По-скоро използвай snprintf:

	snprintf(command, sizeof(command),
	    "/bin/echo %s | /usr/bin/smbclient -M %s", argv[2], argv[1]);

> //printf("%s\n",command);
> system("command")

А това, което всъщност искаш да направиш, е system(command), а не
system("command")   :))

> Този инструмент ми трябва за да изпращам съобшения със самба до Windows 
> машините през php интерфейс.

Мда.. има и други начини да се направи, ама като PHP-то няма pipe() или
нещо такова.. брррр.  По принцип друг път за изпълнение на външни команди
с untrusted параметри от потребителя можеш да използваш unquote -
http://devel.ringlet.net/misc/unquote/

В този случай обаче unquote няма да ти свърши работа, защото тя
изпълнява *една* команда, а ти искаш pipe заради подаването на нещо на
стандартния вход на smbclient...  а всъщност не съм прав - и unquote
може да се справи :)  Просто направи от PHP-то нещо като:

  system("unquote 1 /bin/echo ".bin2hex(msg).
      " | unquote 2 /usr/bin/smbclient -M ".bin2hex(destination))

...и няма да имаш нужда от външна програмка :)

Но ако го искаш съвсем просто и не съвсем сигурно (достатъчно дълго
съобщение ще препълни този буфер от 50 байта), просто махни кавичките :)

Поздрави,
Петър

-- 
Peter Pentchev	roam@xxxxxxxxxxx    roam@xxxxxxxx    roam@xxxxxxxxxxx
PGP key:	http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint	FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
What would this sentence be like if pi were 3?

Attachment: pgpdngOlj16vf.pgp
Description: PGP signature



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.