Počítačová hra Factorio (Wikipedie) nově běží nativně na ARM64 Linuxu a headsetu Steam Frame.
Fugleramme, v překladu 'ptačí rámeček', je open-source projekt postavený na Raspberry Pi, který pomocí lokální umělé inteligence BirdNET-Go rozpoznává ptačí druhy podle jejich zpěvu a na displeji následně zobrazuje koláž tvořenou odpovídajícími ilustracemi. Databáze obsahuje přes 800 ručně vybraných historických přírodovědných ilustrací více než 400 druhů ptáků.
… více »Unicode Consortium, nezisková organizace koordinující rozvoj standardu Unicode, oznámila vydání Unicode 18.0. Přidáno bylo 13 007 nových znaků. Celkově jich je 172 808. Přibylo 9 nových Emoji.
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 169 (pdf).
Byla vydána nová verze 6.4 programovacího jazyka Swift (Wikipedie). Zdrojové kódy jsou k dispozici na GitHubu.
Německý kancléř Friedrich Merz (CDU) se během debaty s finalisty studentské vědecké soutěže Jugend forscht vyjádřil pro konec anonymity na internetu a vyslovil názor, že pro uživatele Internetu by měla platit podobná právní odpovědnost jako pro novináře tradičních médií. Na dotaz studenta, jak by se tedy povinnost uvádět pravé jméno slučovala s prací investigativních novinářů nebo ochranou jejich zdrojů, Merz neodpověděl, ve své
… více »Společnost Fujitsu představila FUJITSU-MONAKA CPU a Fujitsu MONAKA Server. Navrženo, vyvinuto a vyrobeno v Japonsku. Pro suverénní AI infrastrukturu.
Předprodej v květnu představených notebooků Googlebook, nástupců notebooků Chromebook, bude spuštěn v pondělí 21. září.
Byla vydána betaverze Fedora Linuxu 45 (ChangeSet), tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 20. října. S konzolí kmscon místo fbcon. Současně byla vydána betaverze Fedora Linux Asahi Remixu 45. S podporou čipů M3.
Po půl roce vývoje od vydání verze 50 bylo vydáno GNOME 51 s kódovým názvem "A Coruña" (Mastodon). Podrobný přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře. Videopředstavení na PeerTube a YouTube.
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: