Index: bin/gnump3d2 =================================================================== RCS file: /sources/gnump3d/gnump3d/bin/gnump3d2,v retrieving revision 1.152 diff -b -B -r1.152 gnump3d2 197a198 > our $AUTHORIZATION_TYPE= ""; 779c780 < if ( $request =~ /Authorization: Basic ([^\r\n]+)/ ) --- > if ( $request =~ /Authorization: (Basic|Digest) ([^\r\n]+)/ ) 781c782 < $AUTHORIZATION = $1; --- > $AUTHORIZATION = $2; 1421a1423,1431 > if ($AUTHORIZATION_TYPE eq 'Digest') > { > my $md5_handle = gnump3d::MD5->new(); > $md5_handle->add(rand() + time()); > my $nonce = $md5_handle->hexdigest; > $header .= "WWW-Authenticate: Digest realm=\"GNUMP3d\", nonce=\"" . $nonce . "\", algorithm=MD5, domain=\"" . $REQUEST . "\", qop=\"auth\"\r\n"; > } > elsif ($AUTHORIZATION_TYPE eq 'Basic') > { 1423a1434 > } 3037,3038d3047 < my $decoder = gnump3d::base64->new( ); < my $decoded = $decoder->decode( $AUTHORIZATION ); 3040a3050,3074 > my $digestRequest = ""; > > if ($AUTHORIZATION_TYPE eq 'Digest') > { > my $md5_handle = gnump3d::MD5->new(); > my ($username, $realm, $nonce, $uri, $algorithm, $response, $qop, $nc, $cnonce); > $username = $1 if ($AUTHORIZATION =~ /username="([^"]*)"/); > $realm = $1 if ($AUTHORIZATION =~ /realm="([^"]*)"/); > $nonce = $1 if ($AUTHORIZATION =~ /nonce="([^"]*)"/); > $uri = $1 if ($AUTHORIZATION =~ /uri="([^"]*)"/); > $response = $1 if ($AUTHORIZATION =~ /response="([^"]*)"/); > $qop = $1 if ($AUTHORIZATION =~ /qop=["]?([a-zA-Z]+)["]?/); > $nc = $1 if ($AUTHORIZATION =~ /nc=([0-9]+)/); > $cnonce = $1 if ($AUTHORIZATION =~ /cnonce="([^"]*)"/); > > $md5_handle->add('GET:' . &urlEncode($REQUEST)); > my $A2 = $md5_handle->hexdigest; > $user = $username; > $pass = $nonce . ':' . $nc . ':' . $cnonce . ':' . $qop . ':' . $A2; > $digestRequest = $response; > } > elsif ($AUTHORIZATION_TYPE eq 'Basic') > { > my $decoder = gnump3d::base64->new( ); > my $decoded = $decoder->decode( $AUTHORIZATION ); 3046a3081 > } 3074c3108,3123 < if ( $line eq "$user:$pass" ) --- > if ($AUTHORIZATION_TYPE eq 'Digest') > { > if ($line =~ /(.*):(.*)/) > { > my $md5_handle = gnump3d::MD5->new(); > $md5_handle->add($2 . ':' . $pass); > my $digest = $md5_handle->hexdigest; > if (($user eq $1) and ($digest eq $digestRequest)) > { > # Successful login - saved logged in username > $LOGGED_IN_USER = $user; > return; > } > } > } > elsif ( $line eq "$user:$pass" ) 3429a3479 > $AUTHORIZATION_TYPE = getConfig( 'authentication_type', 'Basic' ); Index: etc/gnump3d.conf =================================================================== RCS file: /sources/gnump3d/gnump3d/etc/gnump3d.conf,v retrieving revision 1.23 diff -b -B -r1.23 gnump3d.conf 309a310,318 > # OR, for Digest authentification, the password file should be of > # the following format: > # > # username:hash > # username2:hash2 > # > # hash or hash2 represent MD5(login:GNUMP3d:password) > # To generate an hash string, type: > # $> echo -n 'username:GNUMP3d:password' | md5sum 318a328 > # authentication_type = Basic # Basic or Digest