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
|