Byl vydán Debian 13.5, tj. pátá opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.14, tj. čtrnáctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
CiviCRM (Wikipedie) bylo vydáno v nové verzi 6.14.0. Podrobnosti o nových funkcích a opravách najdete na release stránce. CiviCRM je robustní open-source CRM systém navržený speciálně pro neziskové organizace, spolky a občanské iniciativy. Projekt je napsán v jazyce PHP a licencován pod GNU Affero General Public License (AGPLv3). Český překlad má nyní 45 % přeložených řetězců a přibližuje se milníku 50 %. Potřebujeme vaši pomoc, abychom se dostali dál. Pokud máte chuť přispět překladem nebo korekturou, přidejte se na platformu Transifex.
Další lokální zranitelností Linuxu je ssh-keysign-pwn. Uživatel si může přečíst obsah souborů, ke kterým má právo ke čtení pouze root, například soubory s SSH klíči nebo /etc/shadow. V upstreamu již opraveno [oss-security mailing list].
Singularity (YouTube) je nejnovější otevřený film od Blender Studia. Jedná se o jejich první 4K HDR film.
Vyšla hra Život Není Krásný: Poslední Exekuce (Steam, ProtonDB). Kreslená point & click adventura ze staré školy plná černého humoru a nekorektního násilí. Vžijte se do role zpustlého exekutora Vladimíra Brehowského a projděte s ním jeho poslední pracovní den. Hra volně navazuje na sérii Život Není Krásný.
Společnost Red Hat představila Fedora Hummingbird, tj. linuxovou distribuci s nativním kontejnerovým designem určenou pro vývojáře využívající AI agenty.
Hru The Legend of Zelda: Twilight Princess od společnosti Nintendo si lze nově díky projektu Dusklight (původně Dusk) a reverznímu inženýrství zahrát i na počítačích a mobilních zařízeních. Vyžadována je kopie původní hry (textury, modely, hudba, zvukové efekty, …). Ukázka na YouTube. Projekt byl zahájen v srpnu 2020.
Byla vydána nová major verze 29.0 programovacího jazyka Erlang (Wikipedie) a související platformy OTP (Open Telecom Platform, Wikipedie). Detailní přehled novinek na GitHubu.
Po zranitelnostech Copy Fail a Dirty Frag přichází zranitelnost Fragnesia. Další lokální eskalace práv na Linuxu. Zatím v upstreamu neopravena. Přiřazeno ji bylo CVE-2026-46300.
Sovereign Tech Agency (Wikipedie) prostřednictvím svého fondu Sovereign Tech Fund podpoří KDE částkou 1 285 200 eur.
http://www.abclinuxu.cz/poradna/programovani/show/373050Potreboval bych tutez funkcionalitu implementovat s
mkfifo(). Cili aby mi to po spusteni programu s arametry a delimiterem:
./pipe ls -la @ grep -v .cprovedlo to stejne jakov shellu. Postup bude pravdepodobne stejny, budou tam dva openy asi. Zatim jsem se dostal k hrubemu kodu nize. Nefunguje mi tam ale otevreni fopen():
fopen: No such file or directoryCelkem tapu jak ty prikazy poskladat, aby mi to fungovalo. Budu rad za jakoukoliv radu. Diky. Dosavadni kod (puvodne to byl kod pro nepojmenovanou rouru, stare radky jsou vykomentovane):
int main(int argc,char *argv[]) {
if (argc < 2) {
printf("Programme must be run with with arguments and using pipe shell symbol as a delimiter!\n"
"For example: ./pipe ls -la @ grep -v .c\n");
exit(1);
}
int count, fw, fr;
char command1[50];
char command2[50];
char arguments1[50];
char arguments2[50];
strcpy(command1, argv[1]);
strcpy(arguments1, " ");
strcpy(arguments2, " ");
count = 2;
for (; count < argc; count++) {
if (strcmp(argv[count], "@") == 0) {
break;
}
strcat(arguments1, argv[count]);
strcat(arguments1, " ");
}
arguments1[strlen(arguments1)-1] = '\0'; //removing ending space
strcat(command1, arguments1);
strcpy(command2, argv[count+1]);
count += 2;
for ( ; count < argc; count++) {
strcat(arguments2, argv[count]);
strcat(arguments2, " ");
}
arguments1[strlen(arguments2)-1] = '\0';
strcat(command2, arguments2);
mkfifo(FIFO_FILE, S_IFIFO|0666);
pid_t pid = fork();
if (pid == -1)
return -1;
if (pid == 0) {
//close(fifo); //close write to pipe, in child
//dup2(fifo, STDIN_FILENO); // Replace stdin with the read end of the pipe
//close(fifo); // Don't need another copy of the pipe read end hanging about
if(fr = fopen(FIFO_FILE, "r") == NULL) {
perror("fopen");
exit(1);
}
dup2(fr, STDIN_FILENO);
close(fr);
system(command2);
}
else {
//close(fifo); //close read from pipe, in parent
//dup2(fifo, STDOUT_FILENO); // Replace stdout with the write end of the pipe
//close(fifo); // Don't need another copy of the pipe write end hanging about;
if(fw = fopen(FIFO_FILE, "w") == NULL) {
perror("fopen");
exit(1);
}
dup2(fw, STDOUT_FILENO);
close(fw);
system(command1);
}
return EXIT_SUCCESS;
}
Řešení dotazu:
man errno
, a jeste bych poradil man 3 getopt
návratová hodnota fopen je typu FILE
FILE*
./fifo ls -la @ grep -v .cuz po otevreni roury pro zapis
fw = open(fifo_name, O_WRONLY);hazi chybu:
grep: (standardní vstup): Chybný popisovač souboruCoz je divne, ze mi to hlasi zrovna grep pri otevreni roury teprve por zapis... To same potom pri otevreni roury pro cteni:
ls: chyba při zápisu: Roura přerušena (SIGPIPE)Promenne fr ani fw se mi neinicailzuji, po open() maji hodnotu 0. Pri kompilaci pak dostavam pochopitelne:
fifo.c: In function ‘main’: fifo.c:66:18: warning: ‘fw’ may be used uninitialized in this function [-Wuninitialized] fifo.c:82:18: warning: ‘fr’ may be used uninitialized in this function [-Wuninitialized]DOsavadni kod je takovyto:
int main(int argc,char *argv[]) {
if (argc < 2) {
printf("Programme must be run with with arguments and using pipe shell symbol as a delimiter!\n"
"For example: ./fifo ls -la @ grep -v .c\n");
exit(1);
}
int count, fw, fr, status;
char command1[50];
char command2[50];
char arguments1[50];
char arguments2[50];
char* fifo_name = "/tmp/myfifo";
strcpy(command1, argv[1]);
strcpy(arguments1, " ");
strcpy(arguments2, " ");
count = 2;
for (; count < argc; count++) {
if (strcmp(argv[count], "@") == 0) {
break;
}
strcat(arguments1, argv[count]);
strcat(arguments1, " ");
}
arguments1[strlen(arguments1)-1] = '\0'; //removing ending space
strcat(command1, arguments1);
strcpy(command2, argv[count+1]);
count += 2;
for ( ; count < argc; count++) {
strcat(arguments2, argv[count]);
strcat(arguments2, " ");
}
arguments1[strlen(arguments2)-1] = '\0';
strcat(command2, arguments2);
status = mkfifo(fifo_name, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
if(status == -1) {
perror( "Mkfifo failed" );
exit(1);
}
pid_t pid = fork();
if (pid == -1) {
return -1;
}
if (pid == 0) {
close(fw);
fr = open(fifo_name, O_RDONLY);
unlink(fifo_name);
if(fr == -1) {
printf("Could not open the pipe for reading.\n");
exit(1);
}
dup2(fr, STDIN_FILENO);
close(fr);
system(command2);
unlink(fifo_name);
}
else {
close(fr);
fw = open(fifo_name, O_WRONLY);
if(fw == -1) {
printf("Could not open the pipe for writting.\n");
exit(1);
}
dup2(fw, STDOUT_FILENO);
close(fw);
system(command1);
unlink(fifo_name);
}
return EXIT_SUCCESS;
}
Takze chce to vyresit deskriptory, mozna pouzit jinou fce nez open. Jenze kdyz pouziju fopen(), tak da se nejak jejich vysledek typy FILE* predelat na int a pouzit jako filedeskriptor? To je jediny mozny co me napada...
fileno(), ktera z FILE* promenne vrati file descriptor, ale stejne mi porad vraci nulu a chybove hlasku pro otevreni pomoci fopen() zustavaji stejne... (davam sem jen cast kodu). Proc mi fileno nic nevraci?
int fdr, fdw;
FILE* fr;
FILE* fw;
status = mkfifo(fifo_name, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH);
if(status == -1) {
perror( "Mkfifo failed" );
exit(1);
}
pid_t pid = fork();
if (pid == -1) {
return -1;
}
if (pid == 0) {
close(fdw);
fr = fopen(fifo_name, "r");
if(fr == NULL) {
perror("Could not open the pipe for reading: \n");
exit(1);
}
fdr = fileno(fr);
dup2(fdr, STDIN_FILENO);
close(fdr);
system(command2);
unlink(fifo_name);
}
else {
close(fdr);
fw = fopen(fifo_name, "w");
if(fw == NULL) {
perror("Could not open the pipe for writting: \n");
exit(1);
}
fdw = fileno(fw);
dup2(fdw, STDOUT_FILENO);
close(fdw);
system(command1);
unlink(fifo_name);
}
if (pid == -1) {
return -1;
}
if (pid == 0) {
fdr = open(fifo_name, O_RDONLY);
if(fdr == -1) {
perror("Could not open the pipe for reading: \n");
exit(1);
}
dup2(fdr, STDIN_FILENO);
close(fdr);
system(command2);
unlink(fifo_name);
}
else {
fdw = open(fifo_name, O_WRONLY);
if(fdw == -1) {
perror("Could not open the pipe for reading: \n");
exit(1);
}
dup2(fdw, STDOUT_FILENO);
close(fdw);
system(command1);
unlink(fifo_name);
}
Akorat bych potreboval jeste poradit, jak misto system() pouzit nejakou exec fci.
Me bohuzel nic jednoducheho nenapada. Ja si dokazu zpracovat vstup na command
retezec a arguments retezec, napriklad ls (command) a -la (arguments), mam to i
v kodu na abicku... jenze exec si neumi poradit se stringy typu "-l -a"
napr:
./fifo ls -l -a @ ....
execlp(command,command,"arguments,NULL) vypada rozepsane jako
execlp("ls","ls","-l -a",NULL);
Nenapada me zadne elegantni reseni. jen nacitat argumenty a testovat, zda
zacinaji"-", pokud ano, tak oddelat minus a spojit s predchozim do jedne velke
sady argumentu... pak jeste ale nejak vyresit parametry bez "-" a jejich
pripadne stridani.. coz nevim moc jak udelat ...a pocet, cim vic takovychto
stridani tim vic by se musela exec fce rozrystat o dalsi a dalsi parametry,
nebo ja fakt nevim, su uz z toho vystavenej...zkratka na zadne nerobustni
reseni nejsem schopnej prijit :(
Tiskni
Sdílej: