• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    XCHAOSANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API
    /* Toto je klub především pro lidi, pro které je programování jednou z mnoha massive multiplayer online počítačových her, které lze hrát.
        V tomto klubu hrozí sémantická hereze a nezdravě vysoký obsah syntaktického cukru. Nevhodné pro algoritmické diabetiky.
        Od účastníků debaty se předpokládá automaticky přístup k instalovanému GNU C: sudo apt-get install build-essential
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C (programovací jazyk)#C99 Heslo na české Wikipedii
    Jazyk C - Základy praktického programování V Praze 2oo7 pro SSPŠ Tomáš Harvie Mudruňka a kolektiv - jak si programování v C představuje většina lidí
    http://stevenkobes.com/ctest.html C Programming Puzzlers - nepouštějte se do flamewars v tomhle klubu, pokud neuhodnete aspoň polovinu správně!
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    http://en.wikipedia.org/wiki/C99 C99 is a modern dialect of the C programming language.
    http://cprogramminglanguage.net/ C programming language
    http://cprogramminglanguage.net/c-programming-language-tutorial.aspx C programming language - úvod
    http://en.wikipedia.org/wiki/Criticism_of_the_C_programming_language C makes it easy to shoot yourself in the foot. (ještě že ne do hlavy...)
    http://en.wikipedia.org/wiki/C_preprocessor
    http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html C99 makra s proměnným počtem argumentů - __VA_ARGS__
    http://gcc.gnu.org/onlinedocs/gcc/ GNU C Compiler
    http://gcc.gnu.org/onlinedocs/gcc-4.2.2/gcc/Optimize-Options.html
    http://bellard.org/tcc/ Tiny C Compiler - prý C99 compliant (min. umí __VA_ARGS__) - vhodný pro skriptování v C - umí #!/usr/bin/tcc -run
    http://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest - pokud jste neviděli tohle, tak jste ještě neviděli opravdu nečitelný C zdroják
    http://bellard.org/otcc/ Obfuscated Tiny C Compiler - z tohohle vtípku vznikl Tiny C compiler
    http://en.wikipedia.org/wiki/ANSI_C Jak se střelit do nohy standardizovaným způsobem.
    http://eli-project.sourceforge.net/c_html/c.html ANSI C Specification
    http://www.lysator.liu.se/c/ Různý ANSI C bordel
    http://www.cs.rit.edu/~ats/books/ooc.pdf Object Oriented Programming with ANSI-C - a pak že to nejde
    http://en.wikipedia.org/wiki/Longjmp co jsou to setjmp()/longjmp() knihovní funkce (pro všechny, podle kterých to bez C++ try { } catch() ... nejde)
    http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/dcdc710c27f47c72 C neumí správně počítat (?)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    http://www.fastcgi.com/ FastCGI is simple because it is actually CGI with only a few extensions.
    http://www.metalshell.com/source_code/18/Mysql_Select.html How to do a simple connection and select with mysql
    http://xmlsoft.org/ The XML C parser and toolkit of Gnome
    http://curl.haxx.se/libcurl/ libcurl - the multiprotocol file transfer library
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    https://dev.arachne.cz/svn/cll1h SVN/Trac jazyka C<<1 (user-friendly nadstavba nad ANSI C99 - ve stylu JQuery vs. JavaScript)
    Benchmark iterace a serializace stringů v různých jazycích vs. v C
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        moderátor se velice zhruba řídí zvyklostmi moderace, která kdysi platila v řadě konferencí sítě FidoNet ... C != 0xdead */
    rozbalit záhlaví
    XCHAOS
    XCHAOS --- ---
    REDGUY: no v podstatě... v té fázi ve které to je, se opravdu nepředpokládá, že by se to instalovalo nějak "blbuvzdorně" - protože jméno restartovaného serveru se před kompilací píše přímo jako #define, tak tak opravdu není ve fázi, kdy bych řešil chybové hlášky: kdo to umí editovat a zkompilovat, měl by umět i zkontrolovat co do toho napsal. asi bych v první řadě uvažoval o externím konfiguračním souboru, a pak teprve o chybových hláškách, kdybych řešil tohle...

    to, že to případně skončí bez chybové hlášky i čehokoliv jiného, je sice asi pro někoho potenciálně nepříjemné... ale není to zrovna bezpečnostní díra. spíše jsem se chtěl ujistit, že neexistuje žádná mizivá pravděpodobnost, že sshd z nějakého obskurního důvodu na základě nějaké nedokumentované enviroment proměnné spustí místo shellu uvedeného v /etc/passwd nějaký naprosto náhodně zvolený program... prostě uvažuju, jestli je bezpečné pouštět uživatele až takhle daleko.

    (ale zase moc netuším, jak jinak to udělat... především jim vůbec nechci dávat ssh... samozřejmě čistší je možná povolit jim sudo na tu jedinou binárku a nepouštět tohle pod rootem? ... nevím, nejsem admin...)
    REDGUY
    REDGUY --- ---
    XCHAOS: a jakou jinou chybovou hlášku navrhuješ vypsat - hm, nevim. Co treba "Oh shit, something's borken"? Anebo, pozor, opet vysoce radikalni myslenka pouzivaji super-advanced techniky, co treba pouzit funkci perror? Ale pravda, to je zase jedna z tech novinek co jsou v unixu jenom par desitek let 8))

    hostitelský stroj, na kterém by se nepodařil např. fork() by v první řadě ani po navázání ssh spojení nebyl schopný spustit tenhle skript Jo, jasne. Protoze mezi spustenim tohohle bastlu a pokusem o fork se nemuze stat nic co by forkovani znemoznilo. A execl se povede taky vzdycky, protoze ten spoustenej binar je vzdycky na svym miste a vzdycky ma spravny prava a...
    XCHAOS
    XCHAOS --- ---
    REDGUY: no, popravdě... hostitelský stroj, na kterém by se nepodařil např. fork() by v první řadě ani po navázání ssh spojení nebyl schopný spustit tenhle skript... a jakou jinou chybovou hlášku navrhuješ vypsat? co se dále může nepodařit?

    je fakt, že lidi tohle budou mít tendenci spouštět, když se něco rozbije. na hostitelském serveru s XEN virtuály ale neběží kromě toho sshd nic... a když se tam něco rozbije tak, že ani fork() ani exec(), tak se to především ani nedostane tak daleko, aby se tenhle skript spustil.

    takže buď ti leží na srdci duševní zdraví tak hloupého admina, který si to nainstaluje, aniž by chápal, co a proč vlastně dělá... a nebo patříš k těm lidem, co se neustále vrací z ulice zpět do bytu zkontrolovat, jestli vypli vodu v koupelně, zhasli a zamkli :-)
    XCHAOS
    XCHAOS --- ---
    ok... tak viz nový http://teckacz.arachne.cz/xchaos/files/xen-reboot.c
    trochu jsem tam vyladil ty sleepy, to jsem chtěl už dřív, ale až teď jsem si na to vzpomněl... je blbost tam zběsile bez čekání smyčkovat, a čekat než něco skončí, že jo.
    REDGUY
    REDGUY --- ---
    XCHAOS: Mozna je to prilis radikalni myslenka, ale coz takhle vypsat chybovou hlasku? Nebo nastavit nejakej navratovej kod? Ale mozna je to moc radikalni, navratovy kody se v Unixu pouzivaji jenom asi ctyricet let 8))
    A mozna v behu programu tupe nepokracovat kdyz se nejakej ten execl nepovede? Chapu, jsou to dost advanced techniky, ale mozna by to stalo za uvahu 8))
    (btw, "pro klienty", takze ti za tohle nekdo zaplatil? Dobrej dzob 8) )
    XCHAOS
    XCHAOS --- ---
    ANT_39: ale no jo furt, to byla rychlá redakční úprava, abych neodhaloval jméno klienta :-) zatím se to kompiluje na míru každýmu klientovy, právě proto,že to podsouvám jako shell.

    popravdě, případné bezpečnostní díry téhle koncepce by mě fakt zajímaly - běží to pod uid 0, ale teoreticky... pokud není díra v tom závěrečným xm console....
    XCHAOS
    XCHAOS --- ---
    REDGUY: a co v tomto případě navrhuješ dělat? u neinteraktivního skriptu?
    ANT_39
    ANT_39 --- ---
    Nevim, jestli je to umysl, ale...

    #define SERVERNAME "servename"
    REDGUY
    REDGUY --- ---
    XCHAOS: Jojo, ignorovat navratovy hodnoty a pokud se neco pokazi tak tise failovat, to dava smysl 8))
    XCHAOS
    XCHAOS --- ---
    Je taková užitečná legrácka, co jsem teď "vyvinul" pro naše klienty. Pro vserver totéž bylo triviální - u Xenu ovšem byla finta v tom, že po vykillování a reinicializaci právě bylo nutné ještě přesměrovat konzoli na stdout, aniž by člověk použil něco volání system():

    http://teckacz.arachne.cz/xchaos/files/xen-reboot.c

    Minimálně si z toho uděláte přesdstavu, jak asi vypadá implementace části funkčnosti shellu "uvnitř" (ostatně - shell je přece taky napsaný v Céčku :-)

    Proč je to v Céčku? Inu.... (cituji z /etc/passwd):

    servername-reboot:x:0:0:Reboot virtualu servername,,,:/home/servername-reboot:/home/servername-reboot/servername-reboot

    ...prostě chci mít lepší kontrolu nad bezpečností pokud někoho nechávám přihlásit s uid 0 (resp. chci mít jistotu, že se nedostane do shellu).

    Pokud mi v tom někde najdete nějakou bezpečnostní díru, budu jedině rád. Jinak pochopitelně v kombinaci s těmi ncurses - pochopitelně, taky přímo v céčku - z toho chci udělat plnou ovládací konzoli (min. 4 možnosti - shutdown, restart, konzole i tvrdý restart - a klienti se dožadují i možnosti mountování iso image a reinstalace systému z něj... což bude tedy asi oříšek, ale skripty pro XEN toto zahrnují tak jako tak...)

    Z toho vyplývá logický dotaz: jsou ncurses tak bezpečné, aby je v tomto režimu (kdy z nich nejde vyskočit do shellu, který danný uživatel ani nemá povolené) bylo možné pustit pro kohokoliv s uid 0 ? a napadá vás jiný způsob, jak toto řešit?

    (tady vidíte, že občas přeci jen řeším v C praktické otázky, např. otázk bezpečnosti pod Linuxem - a nepoužívám ho jen pro samoúčelná intelektuální cvičení...)

    Vzhledem k tomu, jak nebetyčně chytří je určitá část účastníků tohohle klubu, tak očekávám nějaký geniální nápad, jak se tomuto vyhnout (třeba koupit si hotové komerční řešení nebo doinstalovat balíček, který toto umí a je pro XEN už hotový, apod. :-)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: hele, zatím jsem se na to koukal jen letmo, ale spousta toho, co píšou v prvním odstavci, docela odpovídá...

    jenže když se podíváš, tak hned na tom obrázku vedou z kořene tři odkazy ("every node has degree at most O(log n)"). je to hezké, ale u mé struktury každý node má max. dva potomky (z důvodu snadné implementace)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    Ja si rikam jestli se nesnazis treba o neco takovyhleho:
    Fibonacci heap - Wikipedia, the free encyclopedia
    http://en.wikipedia.org/wiki/Fibonacci_heap
    (plus minus)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no ano, ale v tom potom nic nevyhledáš se složitostí logN.

    tak mi prostě dopřej nějakou malou neškodnou chiméru, nad kterou bych si mohl zbytek života lámat hlavu :-)
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: No, proto sem to chtel sepsat vsechny ty veci.
    Protoze na tohle nepotrebujes nic specialni, staci linked list.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: ach jo, tak tady. popravdě, ty tady netřídíš pokaždé zcela náhodná data, ale přidáváš jeden prvek mezi již setříděná data. Toto je triviání a má to složitost N: typicky si představ třeba klasické jednoduché pole, které "sešoupneš" o jednu pozici od místa, kam vložíš zatřiďovaný prvek.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Tak to zkus tam, nebo to proste sepis jako 1ks prispevku. Podle toho co si matne pamatuju to vede na comparison-sort serazeni rychlejsi nez v NlogN.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: já si myslím, že tenhle klub je spíš o céčku, než o mých datových strukturách. když už, tak je tu klub [ Algoritmy všeho druhu :: podělte se, pochlubte se, diskutujte etc... ]
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    Ja se s tim presunu sem. Muzes nejak znova specifikovat pozadovany vlastnosti ty datovy struktury (a jelikoz si zacal bejt alergickej na Marusku, tak tomu rikejme treba XLIST, to skoro urcite neexistuje a nebude se nikomu s nicim omylem plest).
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: já jsem spíš textově, než matematicky orientovaný programátor. mě zaujala spíš nativní podpora unicode.
    Kliknutím sem můžete změnit nastavení reklam