Index by: file name |
procedure name |
procedure call |
annotation
gscope_passman.tcl
(annotations | original source)
#rR gscope_passman.tcl
package require TclOO
oo::class create ::PassMan {
#rR Gère tout ce qui concerne les mots de passes encryptes dans un fichier type htpasswd"""
variable fichierPasswd
variable lesUser
variable lesEncpDe
constructor {{fichierAutre ""}} {
package require md5
package require md5crypt
if {$fichierAutre!=""} {
set fichierPasswd $fichierAutre
} else {
set fichierPasswd "/usr/local/apache2/users/blastome_passwd"
}
set lesUser {}
set lesEncpDe [dict create]
set f [open $fichierPasswd "r"]
while {[gets $f ligne]>=0} {
if { ! [regexp {^[^\:]+\:.+} $ligne]} { continue }
lassign [split $ligne ":"] user encp
lappend lesUser $user
#if { ! [dict exists lesEncpDe $user]} { dict create $lesEncpDe $user }
dict lappend lesEncpDe $user $encp
}
close $f
}
method users {} {
return $lesUser
}
method encpNE_DOIT_PAS_EXISTER {user} {
if {[dict exists $lesEncpDe $user]} {
return [dict get $lesEncpDe $user]
} else {
return {}
}
}
method userExists {user} {
return [expr [lsearch -exact $lesUser $user]>=0]
}
method passOk {user rawp} {
if { ! [my userExists $user] } { return 0 }
LogWscope "passOk $user $rawp"
foreach encp [dict get $lesEncpDe $user] {
LogWscope $encp
if {$encp==$rawp} { return 1 }
if {[llength [split $encp "\$"]]<4} { continue }
lassign [split $encp "\$"] bidon algo1 salt1 hash1
set hash2 "turlututu"
if {[regexp "apr" $algo1]} {
lassign [split [::md5crypt::aprcrypt $rawp $salt1] "\$"] bidon algo2 salt2 hash2
} elseif {[regexp "xxxxxxxxsha" algo1]} {
lassign [split [::xxxxxxx::xxxxxxxx $rawp $salt1] "\$"] bidon algo2 salt2 hash2
}
if {[string equal $hash1 $hash2]} { return 1 }
}
return 0
}
method createNew {login passe {dirsToCreate ""}} {
if {[my userExists $login]} { return "User already exists" }
set newSalt "8sFt66rZ" ; #rR a faire !!!!!!!
set newHash [::md5crypt::aprcrypt $passe $newSalt]
if { ! [dict exists $lesEncpDe $login] || [lsearch -exact [dict get $lesEncpDe $login] $newHash]<0} {
set newLine "$login:$newHash"
dict lappend lesEncpDe $login $newHash
set f [open $fichierPasswd "a"]
puts $f $newLine
close $f
}
foreach dir $dirsToCreate {
file mkdir $dir
}
return $login
}
}
proc TestPassman {} {
set pm [::PassMan new]
Espionne [$pm passOk ripp alphaRR]
$pm createNew titi titi
Espionne [$pm passOk titi tuututut]
Espionne [$pm passOk titi titi]
return ok
}
proc Cookie {{qui ""}} {
#rR a faire si on n'est pas dans Zinc
if {[info exists $::env(HTTP_COOKIE)]} { return "" }
set lesCook [dict create]
foreach cookie [split $::env(HTTP_COOKIE) ";"] {
lassign [split $cookie "="] key value
if {$key == $qui} { return $value }
dict set lesCook $key $value
}
if {$qui=="GetDict"} { return $lesCook }
return ""
}
proc MyLogin {{NewValue ""}} {
global MyLogin
if {$NewValue!=""} { set MyLogin $NewValue }
if { ! [info exists MyLogin]} { set MyLogin "AnonymousUser" }
return $MyLogin
}
Index by: file name |
procedure name |
procedure call |
annotation
File generated 2022-04-05 at 12:55.