Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
cat binc_ldapauth/src/binc_ldapauth.py #!/usr/bin/python ''' Created on Feb 12, 2010 @author: bartmann ''' import os; import string; import sys; import ldap; import ldap.sasl; class binc_ldapauth: def __init__(self): self.gssapi_auth=True; def get_creds(self): fd=os.fdopen(3,"r"); ncreds=os.read(3, 128); creds=ncreds; while(ncreds!=""): ncreds=os.read(3, 128); creds+=ncreds; creds=creds.split("\0"); self.username=creds[0]; self.password=creds[1]; def auth(self): ds = ldap.initialize("ldap://joomladev.dyndns.org"); ds.protocol_version=3; if self.gssapi_auth==False: try: ds.simple_bind_s("uid="+self.username+",ou=people,dc=joomladev.dyndns,dc=org",self.password); dn=string.replace(ds.whoami_s(),"dn:",""); except ldap.INVALID_CREDENTIALS: return 1; else: try: auth=ldap.sasl.gssapi(); ds.sasl_interactive_bind_s("",auth); dn=string.replace(ds.whoami_s(),"dn:",""); if(ds.compare_s(dn,'uid',self.username)): pass; else: return 1; except ldap.INVALID_CREDENTIALS: return 1; os.environ["USER"]=self.username; home=ds.search_s(dn,ldap.SCOPE_BASE,'(objectclass=person)',['homeDirectory']); os.environ["HOME"]=home[0][1]["homeDirectory"][0]; shell=home=ds.search_s(dn,ldap.SCOPE_BASE,'(objectclass=person)',['loginShell']); os.environ["SHELL"]=shell[0][1]["loginShell"][0]; gid=home=ds.search_s(dn,ldap.SCOPE_BASE,'(objectclass=person)',['gidNumber']); os.setgid(int(gid[0][1]["gidNumber"][0])); uid=home=ds.search_s(dn,ldap.SCOPE_BASE,'(objectclass=person)',['uidNumber']); os.setuid(int(uid[0][1]["uidNumber"][0])); os.chdir(os.environ["HOME"]); os.execlp(sys.argv[1],sys.argv[1]); if __name__ == '__main__': lauth=binc_ldapauth(); lauth.get_creds(); lauth.auth();a ten druhý autentifikuje přes PAM - k jeho funkci je nutné mít nainstalovaný PyPAM:
cat binc_pamauth/src/binc_pamauth.py #!/usr/bin/python ''' Created on Feb 12, 2010 @author: bartmann ''' import os; import sys; import PAM; import pwd; class binc_pamauth: def __init__(self): self.gssapi_auth=True; def get_creds(self): fd=os.fdopen(3,"r"); ncreds=os.read(3, 128); creds=ncreds; while(ncreds!=""): ncreds=os.read(3, 128); creds+=ncreds; creds=creds.split("\0"); self.username=creds[0]; self.password=creds[1]; def pam_conv(self,auth, query_list): resp=[]; for (q, qtype) in query_list: if qtype==PAM.PAM_PROMPT_ECHO_OFF : resp.append((self.password,0)); else: resp.append(('',0)); return resp; def auth(self): pam_auth = PAM.pam(); pam_auth.start("imap"); pam_auth.set_item(PAM.PAM_USER,self.username); pam_auth.set_item(PAM.PAM_CONV,self.pam_conv); try: pam_auth.authenticate(); pam_auth.acct_mgmt(); except PAM.error: return 1; pw=pwd.getpwnam(self.username); os.environ["USER"]=self.username; os.environ["HOME"]=pw[5]; os.environ["SHELL"]=pw[6]; os.setgid(int(pw[3])); os.setuid(int(pw[2])); os.chdir(os.environ["HOME"]); os.execlp(sys.argv[1],sys.argv[1]); if __name__ == '__main__': pauth=binc_pamauth(); pauth.get_creds(); pauth.auth();
Tiskni
Sdílej: