your code gave me a clue, I just add the magic binmode(OUT); and now it works fine, here's my new section of code:
$photo=$entry->get_attribute( 'jpegPhoto' );
if(ref($photo))
{
$picture = @$photo[0];
}
else
{
print "\n";
print "No jpegPhoto attribute for DN: $dn\n";
}
open (TMP, ">./photos/$uid");
binmode(TMP);
$| = 1;
print TMP $picture;
close(TMP);How comes the sample code from http://search.cpan.org/src/GBARR/perl-ldap-0.31/contrib/jpegDisplay.pl
works without that ?? the $|=1 is only for streaming the flow (not buffered it) i suppose ? that not enough in my case !.
anyway it works for me now :-)
Brian K Johnson wrote:
The junk below is what I ended up having to do to stuff a jpg into
Windows 2003 Active Directory...and then to read it out. Maybe it will
give you some hints.
Code to read image data from Active Directory
use Net::LDAP;
$ldapnode="192.168.2.10";
$ldap = new Net::LDAP("$ldapnode",port => 389,debug =>3, version => 3)
or
die "Failed on new\n";
$result=$ldap->ldapbind() || die "Bind Failed:$@"; @attr=("thumbnailPhoto"); $filter="([EMAIL PROTECTED])";
$mesg = $ldap->search(filter => $filter,attrs => [EMAIL PROTECTED], base =>
"CN=Users,DC=home,DC=yyy,DC=zzz,DC=xxx"
) or die "Search Failed using FILTER: $filter$@";
foreach $entry ($mesg->all_entries) {
$t=$entry->get("thumbnailPhoto");
}
open(OUT,">test.jpg"); binmode(OUT); foreach(@$t){ print OUT "$_"; } close(OUT); $ldap->unbind;
Code to put a photo in Active Directory
#get the name of the jpeg file ($in)[EMAIL PROTECTED]; open(IN,"$in"); binmode(IN); $c=0; while(<IN>){ $c++; $photo=$photo.$_; print "NEXT: $c\n"; } close(IN); use Net::LDAP; $ldapnode="192.168.2.10";
$ldap = new Net::LDAP("$ldapnode",port => 389,debug => 0) or die "Failed on new\n";
$pass="notmypassword"; $dn="[EMAIL PROTECTED]";
$dnu="CN=bozo,CN=Users,DC=home,DC=yyy,DC=zzz,dc=xxx";
$ldap->ldapbind(dn => "$dn", password => "$pass") || die "Bind Failed:$@";
if (!$photo){ print "DELETE\n"; $result=$ldap->modify( $dnu, delete => { thumbnailPhoto => [] } ); $err=$result->code; } else { print "REPLACE\n"; $result=$ldap->modify( $dnu, replace => { thumbnailPhoto => "$photo" } ); $err=$result->code; }
print "ERR: $err\n";
-----Original Message-----
From: Chris Ridd [mailto:[EMAIL PROTECTED] Sent: Monday, March 29, 2004 10:04 PM
To: jehan.procaccia; [EMAIL PROTECTED]
Subject: Re: retrieve jpegPhoto
On 29/3/04 1:09 pm, jehan.procaccia <[EMAIL PROTECTED]> wrote:
Hello,
I am trying to retrieve jpegPhotos from my openldap directory with Net::Ldap, however I keep getting files containing only "data" and not
a jpeg files. I took inspiration from: http://search.cpan.org/src/GBARR/perl-ldap-0.31/contrib/jpegDisplay.pl here's the section of code I took:
$photo=$entry->get_attribute( 'jpegPhoto' );
That really ought to be:
$photo=$entry->get_value( 'jpegPhoto' );
If you run the script with 'use warn;' you will see why.
if(ref($photo))
{$picture = @$photo[0];}
else
{print "\n";
print "No jpegPhoto attribute for DN: $dn\n";} open (TMP, ">./photos/$mail"); $| = 1; print TMP $picture; close(TMP);
$ file photos/[EMAIL PROTECTED]
photos/[EMAIL PROTECTED]: data which cannot be viewed as a jpeg photo :-(
What I am doing wrong ?
Is there a difference between the value you retrieved and the value in the file (ie is writing to the file going wrong)?
Are the JPEGs being *added* correctly to the server? Are any other clients able to read the JPEGs?
Cheers,
Chris
Cheers,
Chris
