Here’s what I wrote in the qmail documentation in December 1995:
Every few months CERT announces Yet Another Security Hole In Sendmail—something that lets
local or even remote users take complete control of the machine. I’m sure there are many more
holes waiting to be discovered; Sendmail’s design means that any minor bug in 41000 lines of code
is a major security risk. Other popular mailers, such as Smail, and even mailing-list managers,
such as Majordomo, seem just as bad.
A dokumentum itt.
- A hozzászóláshoz be kell jelentkezni
- 2953 megtekintés
Hozzászólások
Jo srac lenne djb ha picit visszabb venne az arcabol. Programozonak kivallo.
- A hozzászóláshoz be kell jelentkezni
nem veletlen van ekkora arca.
a kivalo az egy l.
synapse
- A hozzászóláshoz be kell jelentkezni
Egy már működő qmail démon hűséges és megbízható barát. Csak azt a telepítést, azt tudnám feledni... :)
- A hozzászóláshoz be kell jelentkezni
"I'm a Qmail admin. I sleep at night." :)
--
Sokan nincsenek tudatában annak, / hogy egyszer mindenki meghal. / Akik ráébrednek erre, / azonnal abbahagyják az ellenségeskedést.
- A hozzászóláshoz be kell jelentkezni
Uh.
"Distraction 3: speed, speed, speed"
Ja, a qmail más. fork, fork, fork, fsync, fsync, fsync.
Broáf. A qmail felett eljárt az idő, bár DJB érdemei elvitathatatlanok. :)
- A hozzászóláshoz be kell jelentkezni
Tetszett a reusing the filesystem resz, ezt en is hasznalom. Egy idoben az aknamezore lepett IP-cimeket MySQL tablaban taroltam, de aztan egyszerusitettem, es egy adott konyvtarban az open()-close() parossal helyeztem el az IP-cimet, ami egyuttal a file neve is. Az ellenorzes pedig a stat() system call-lal tortenik. Peace of cake.
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
egy nem programozónak ezt egy icipicit kifejtve leírnád? sztem értem, de biztosra akarok menni. persze, ha nem fáradtság :)
--
xterm
- A hozzászóláshoz be kell jelentkezni
Igy teszem be:
snprintf(buf, MAXBUFSIZE-1, "%s/%s", cfg.blackhole_path, state.ip); unlink(buf); fd = open(buf, O_RDWR|O_CREAT, S_IRUSR|S_IRGRP|S_IROTH); if(fd != -1){ syslog(LOG_PRIORITY, "putting %s to blackhole", state.ip); close(fd); }
Igy ellenorzom:
snprintf(ipfile, MAXBUFSIZE-1, "%s/%s", dir, ipaddr); if(stat(ipfile, &st) == 0) return 1; else return 0;
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Így magyarázol nem programozóknak? :)
- A hozzászóláshoz be kell jelentkezni
:-)))
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
:D azért köszi
--
xterm
- A hozzászóláshoz be kell jelentkezni
van egy konyvtar: /ezeketkellbannolni, ha valami ipt bannolni akar, akkor csinal egy fajl az ip nevevel( pl: 123.23.43.23)
aztan amikor csak ellenorizni akarja, hogy az adott ip bannolva van-e, akkor csak stat-al megnezi hogy letezik-e olyan nevu fajl. ha igen, akkor bannolva van, ha nem akkor. programozasilag egyszerubb, mert csak 1 dolog kell: touch, rm, stat. nemkell configfajlt olvasgatni, irni.
szerk: megelozott...
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
a kettő együtt már segített megérteni :)
--
xterm
- A hozzászóláshoz be kell jelentkezni
En is igy oldottam meg az IP blacklistezeset a sajat greylist megoldasomban, de egy ido utan (amikor mar tobb millio IP cim van) nem tul hatekony... ilyenkor jon hogy alkonyvtarakba rakjuk stb, de az meg akkor rohadt lassu es i/o igenyes ha vegig kell menni a listan (pl. regi entry-k kitakaritasa).
A'rpi
- A hozzászóláshoz be kell jelentkezni
Bámulatos, hogy a programozók miket képesek elkövetni. A Berkeley DB-t pontosan ilyen feladatokra találták ki.
Egyébként pedig "The cake is a lie" :)
- A hozzászóláshoz be kell jelentkezni
Mi van a cake-kel? :-)
DJB (akinek a "visszaemlekezeset" te is elolvashatod) nem ertene veled egyet (imho). Az o alapotlete ugyanis az, hogy ne talald fel ujra a kereket, hanem hasznald a mar bevalt (proven, time tested) megoldasokat, mint pl. a filerendszer. Nyilvan nem jo mindenre az fs, de erre aligha tudsz jobbat mondani. Meg aztan van par problema a Berkley DB ilyen celra felhasznalasa ellen, pl.
- lockolas (r/w)
- sebesseg
- stabilitas
- ...
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Egy piros fekete fa, bene egy process memoriajaban, esetleg mmap olva. (van ettol is gyorsabb, de az tobb memet eszik)
- A hozzászóláshoz be kell jelentkezni
Ok, ha memoriaba teszed, az tuti gyorsabb. De vajon melyik az egyszerubb? A fenti kod olyan rovid, hogy (remelhetoleg) bug-free. A te implementaciod is?
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
4Gbit tomb mem-es kb. ilyen egyszeru, es eleg gyors :), es lockokkal sem kell bajlodni.
mmapolod oszt az is jo valamire. (itt lehet cachelesi strategiat is valasztani)
De C++ ban van sok piros fekete fa.
En C -ben egy elfajultabb valtozatott irnek. (celnak leginkabb megfelelot), tobb bug lehetoseg ,de teszteles is van a vilagon.
Jo fele a megoldasod, de egy magamfajta orajel buzinak nem valo :) (ha kicsivel tobb idom lenne akkor [s]printf nevu szornyeket is kinyirnam kodbol, syscallok sem a vilag leggyorsabb muveletei)
- A hozzászóláshoz be kell jelentkezni
Ok, 512MB-ba beleferhet a dolog, de kisse pazarloan banik a memoriaval, ill. nem tunik egyszerunek a lejart IP-címeket rendszeresen eltavolitani (ok, irhatsz ra egy rutint, de mennyivel egyszerubb cron-bol lefuttatni egy find-ot...).
Btw. mi a baj a snprintf()-fel, es mi lenne jobb helyette?
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Aprosagok.
Futas idoben keresi meg a % jeleket, es ertelmezi az utanna levo feladatot.
Stringeket karakterenkent mozgat, mikor tudod meretet.
- A hozzászóláshoz be kell jelentkezni
Jobb az strncpy() vagy az strncat()?
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Ahogy neztem kodjukat, nem vagy nem sokkal, vagy akkar roszabb is.
Nem volt szo datum szerinti eltavolitasrol.
Nem eszik 512 Mb memoriat, csak address spacet, ha mmapolod. a rendszer kezeli oda az adat beolvasasat ill, page felszabaditasat, ha kell masra a mem.
- A hozzászóláshoz be kell jelentkezni
Ha nem mondasz jobbat, akkor maradok az snprintf-nel :-)
Lehet, hogy nem vagom egeszen az mmap()-ot, de ha egyszer beolvastal egy 300k-s file-t, akkor az mindaddig lefoglalja a 300k memoriat, amig munmap()-pal fel nem szabaditod.
Nem volt szo datum szerinti eltavolitasrol.
Ahogy a Fuggetlenseg napjaban mondta a szemuveges szaki: Hoppa! Az aknamezoben az a poen egy hagyomanyos feketelistaval szemben, hogy automatikusan eltavoiltja az eloregedett IP-cimeket.
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
#include <stdio.h>
int main()
{
char cel[16];
static const char src1[]="asdfghjk";
static const char src2[]="asdfghj";
sprintf(cel,"asdfghjk%s",src2);
puts(cel);
// vs.
((long long*)cel)[0]=*(long long*)src1;
((long long*)cel)[1]=*(long long*)src2;
write(fileno(stdout),cel,15);
return 0;
}
Minden kiiratasnal ossze kell rakni megfelelot. (altalaban) Minimalis gyorsoluas, sok melo, nehezen atlathato kod...
- A hozzászóláshoz be kell jelentkezni
Kossz az utanajarast, akkor ugy tunik, egyelore nincs okom leszokni a snprintf()-rol :-)
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
turul@gluon8 /tmp $ dd if=/dev/zero of=file_dat bs=1M count=2k
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB) copied, 46.9877 s, 45.7 MB/s
turul@gluon8 /tmp $ ./mmap_demo
mmaped:2147483648 , see top
VSZ: 2100728 mem: ~%0 (ps -t neztem)
paged, see top
VSZ:2051m RES:783m SHR:783m (top szerint)
1Gb fizikai ramom van. A folyamat alatt a swap 170Mb re kuszott. Teheat 2Gb soha nem volt tenylegesen swap+fizikai ramban.
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
int fd;
struct stat mystat;
void * mymap;
long sum;
long long cnt;
fd=open("file_dat",O_RDONLY);
if (fd==-1) return 1;
if (fstat(fd,&mystat)==-1) return 2;
mymap=mmap(NULL,mystat.st_size,PROT_READ,MAP_SHARED,fd,0);
if ((long)mymap==(long)-1) return 3;
printf("mmaped:%lld , see top\n",(long long)mystat.st_size);
getchar();
long long target=mystat.st_size/sizeof(long);
for (cnt=0;cnt<target;cnt++) //Ez igy lassu
sum+=((long*) mymap)[cnt];
printf("paged, see top, sum:%lld\n",(long long)sum);
getchar();
if (munmap(mymap,mystat.st_size))
{
perror("munmap");
return 4;
}
return 0;
}
- A hozzászóláshoz be kell jelentkezni
Ok, meggyoztel :-)
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
FIFO, ketiranyba lancolt lista, queue , jo lehet ido rendben beletenni az elmeket majd kivenni a mar orgnek szamitokat...
(itt is celszeru nagyobb lapokat hasznalni, ha kevesebb cache miss -t szeretne az ember)
- A hozzászóláshoz be kell jelentkezni
Ha jól értem a hasonlatot, akkor itt a kerék feltalálása a B-fák használata adatok tárolására és elérésére. Ha szerencséd van, és az operációs rendszered megfelelően friss, ezt is fogod kapni a fájlrendszeredben. A probléma viszont az, hogy ahhoz, hogy valóban gyors legyen az elérés (ne kelljen I/O művelet), a fájlneveket cache-elni kell. Ezt a cache-t elég nehéz hangolni - Solarison csak reboot-tal lehet állítani, Linuxon pedig sehogyan. Ez a kisebbik baj, a nagyobbik, hogy más, normálisan működő alkalmazások elől fogod elvenni ezt az erőforrást, az egész rendszert lelassítva ezzel.
- A hozzászóláshoz be kell jelentkezni
Mit, hogyna lehet allitani solarsiban amirol beszelsz ?
- A hozzászóláshoz be kell jelentkezni
Hogy a sok kis file-t milyen sebesseggel tudod elerni, nyilvan a konkret fs-tol is fugg. Azonban nehezen hiszem el, hogy a Berkeley DB
- stabilabb, mint egy fs
- megfeleloen kezeli a tobbszoros hozzaferest
- nagy rekord szamnal (de egyaltalan) gyorsabb, mint az fs olvasasa (sok file-lal)
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
"- nagy rekord szamnal (de egyaltalan) gyorsabb, mint az fs olvasasa (sok file-lal)"
Neked 10k filet ls -l -el menyi ido alatt ir ki a rendszered, ha nincs benne cachben ?
10k int -et tartalmazo filet mennyi ido alatt olvas be a rendszered ?
Legyenek inkabb 128 byteos blokkok a pelda kedveeret.
- A hozzászóláshoz be kell jelentkezni
Meg fogom nezni meddig tart, de az emlitett felhasznalasnal nem az a feladat, hogy listazd ki az osszes file-t, hanem azt megallapitani, hogy letezik-e egy bizonyos file (es mi a hozzatartozo timestamp).
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
(torolve)
- A hozzászóláshoz be kell jelentkezni
O jaj! JFS filerendszerrel 21 ms-ba telt, amig a ~2,3k file-t tartalmazo konyvtar eseten rajottem, hogy az letezik vagy sem, es hogy mi az i-node timestamp erteke. Osszedobok egy db file-t is az osszehasonlitas vegett....
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Olyan sokba? Nyilvan cache-ben volt az egesz, ugy elfogadhato a sebessege. Nekem az a bajom, hogy tobb millio file van, es az mar nem fer be a cache-be, de ha bele is ferne akkor is eleg hamar "kiesne" onnan egyeb alkalmazasok es i/o miatt.
A'rpi
- A hozzászóláshoz be kell jelentkezni
Tobb futast is megnezve volt azert jobb is (az eredmenyek usec-ben vannak):
38
43
26
40
25
25
36
21248
21824
7566
13429
17143
29
49
42
38
44
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
sync ; echo 3 > /proc/sys/vm/drop_cache #rootkent meresek elott.
- A hozzászóláshoz be kell jelentkezni
Igazabol egy program fut le automatikusan minden bejovo levelnel, es az nez bele a konyvtarba, van-e benne IP-file. Ezert nem jarhato ut a minden futas elott root-kent modositani a /proc tartalmat.
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
turul@gluon8 /tmp $ time ls -lR /usr/bin >/dev/null
real 0m17.411s
user 0m0.028s
sys 0m0.161s
turul@gluon8 /tmp $ time ls -lR /usr/bin >/dev/null
real 0m0.080s
user 0m0.027s
sys 0m0.054s
turul@gluon8 /tmp $ time ls -lR /usr/bin |wc -l
4562
real 0m0.087s
user 0m0.028s
sys 0m0.057s
http://qdbm.sourceforge.net/benchmark.pdf
1 000 000 rekord.
- A hozzászóláshoz be kell jelentkezni
Aztan ... hogyan biztositottad az konzisztenciat az emlitett peldaban? ;-) Avagy a time to check time to use problemak akcioban...
- A hozzászóláshoz be kell jelentkezni
Mire gondolsz konzisztencia alatt?
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Pl.: A 21ms alatt meg is valtozhat a directory tartalma...
- A hozzászóláshoz be kell jelentkezni
Ok, ertem. Azonban nem veszes, ha eppen kozben valtozik a konyvtar tartalma. Egy spamszuro hasznalja a dolgot, hogy megnezze, egy adott IP-cim szerepel-e feketelistan. Ezert nem gaz, ha eppen akozben kerul bele az IP-cim, amikor a stat()-al megneztem, de nem talaltam (ez annyit tesz, hogy akkor nem az aknamezo miatt fogom spamkent felismerni, hanem a bunos tokenek miatt), vagy forditva: megtalaltam, de eppen kozben a cronjob kitorolte az adott IP-cimet (ez annyit tesz, hogy a bejegyzes "TTL"-je mondjuk 1 sec-cel nagyobb lett - mocskos spammer megerdemli).
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Én arra tippelnék, hogy a harmadik pontra nézve általánosságban véve a BDB lenne a nyerő. Főleg, hogy ott az IP-ket tárolhatod mondjuk egy 32 bites kulcsként, így az egész még kompaktabb is lesz.
De a másodikat sem látom nagy problémának, elég nagy adatbázisok vannak ilyenben megvalósítva (pld. LDAP backend formájában, de akár natívan is).
És az első kapcsán bár sok embernek van rossz véleménye róla, azért meglehetősen soknak van jó.
- A hozzászóláshoz be kell jelentkezni
Elismerem, hogy a funkcio megoldhato BDB-vel, mysql-lel, memoriablokkal, etc, de meg mindig allitom, hogy a filerendszer hasznalatanal egyszerubben (=kevesebb hibaval) aligha. A tobbszoros hozzaferes kivalosaganak a demonstralasara pedig nem biztos, hogy az ldap a legjobb valasztas, mert (legalabbis az openldap eseteben) fut egy processz a hatterben, es o egyedul irja es olvassa a db file-t. Nalam viszont tobb (fork-olt) processznek kell (rw) hozzafernie az IP-cim "adatbazishoz".
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
meg mindig allitom, hogy a filerendszer hasznalatanal egyszerubben (=kevesebb hibaval) aligha
Attól függ mit veszel hibának... Ahogy handler is írta, a megoldásod tartalmaz egy hatalmas race condition problémát, amelyet általában hibaként szokás kezelni. :)
- A hozzászóláshoz be kell jelentkezni
Fentebb irtam, hogy miert nem problema ennel a felhasznalasnal.
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Ezert nem gaz, ha eppen akozben kerul bele az IP-cim, amikor a stat()-al megneztem, de nem talaltam (ez annyit tesz, hogy akkor nem az aknamezo miatt fogom spamkent felismerni, hanem a bunos tokenek miatt)
Bár nem tudom, hogy a bűnös tokenek ezesetben mit jelentenek, de az, hogy az IP-t nem találja a megoldásod, amikor már kellene neki, számomra pont azt jelenti, hogy arra amire való lenne nem alkalmas, mert hibázik és ezáltal kijátszható...
Ha 1000 egyszerre nyitott kapcsolatot csinál a spammer és azon egyszerre küldi el a spamet, hogy a vizsgálat is nagyjából egyszerre fusson le mindegyikre és ebből az 1000-ből _csak_ a tizede csúszik át a teszten, az még mindig elég jó arány lehet neki. 100 spam átment a rostán az 1000-ből, neki ideális még így is.
Az meg hogy az IP vizsgálat után még milyen más módszerekkel ellenőrzöd a levelet az teljesen más téma, a szóban forgó probléma szempontjából érdektelen...
- A hozzászóláshoz be kell jelentkezni
Technikailag neked van igazad, de az osszkepet tekintve meg nekem....
ASK Me No Questions, I'll Tell You No Lies
- A hozzászóláshoz be kell jelentkezni
Milyen jó, hogy ott valakiből már 38 évesen professzor lehet.
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
Nálunk akár hamarabb is:
http://www.kfki.hu/chemonet/TermVil/tv99/tv9903/lovasz.html
- A hozzászóláshoz be kell jelentkezni
Ez a szabályt erősítő kivétel.
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
Orvosoknál valószínűleg kicsit kötöttebb a menetrend :)
- A hozzászóláshoz be kell jelentkezni
Csak én ám nem az orvosokból indultam ki, hanem egy sereg más helyen is ez a tapasztalat. Emellett MTA-tag is 50 vagy 55 fölött lehet valaki.
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
Nem ismerem az MTA szabályait, de ismét csak Lovász példája alpján hamarabb is _lehet_. Persze az is lehet, hogy azóta változtak a szabályok. Ezt nem tudom.
Meg az is lehet, hogy zsenik esetén időnként kivételt tesznek :)
- A hozzászóláshoz be kell jelentkezni
Persze lehetőség van rá, de hát...
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
djb egyik legnagyobb erdeme a tinydns kb. 700-1000 soros allapotautomataja, tele gotoval meg osszehanyt koddal. franko, csak ne istenitsuk mar. (:
- A hozzászóláshoz be kell jelentkezni
Jajh , ezek a mai fiatalok, nem hisznek jol ganyolt kod felsobrendusegeben :)
- A hozzászóláshoz be kell jelentkezni