format results of duplicate ldapsearch records

Discussion in 'Perl Misc' started by marcorice@gmail.com, Jul 15, 2005.

  1. Guest

    Hello all,
    I a so new to perl it's not even funny, I started 3 weeks ago.
    The code below works when I do an ldapsearch for a first and last name
    from a ypcat passwd list and only one ldapsearch record is returned,
    but when there are many records only the last record is processed. I
    believe there should be a simple solution of either a while or foreach
    condition but I CANNOT find it for the life of me. Here is the code and
    the ldapsearch output below, CAN ANYONE HELP ME PLEASE.

    #!/bin/perl
    #
    my $YP="REMOVED";
    my $SHOST="REMOVED";
    my $PORT="REMOVED";
    my $UIDs_n_IDs_NOTMATCH="./UIDs_n_IDs_Not_Match";
    open(UIDs_n_IDs_NOTMATCH,">$UIDs_n_IDs_NOTMATCH") or die ("Can't open
    $UIDs_n_IDs_NOTMATCH: $!\n");
    my $UIDs_n_IDs_MATCH="./UIDs_n_IDs_Match";
    open(UIDs_n_IDs_MATCH,">$UIDs_n_IDs_MATCH") or die ("Can't open
    $UIDs_n_IDs_MATCH: $!\n");
    my $UIDs_MATCH_But_Not_IDs="./UIDs_MATCH_But_Not_IDs";
    open(UIDs_MATCH_But_Not_IDs,">$UIDs_MATCH_But_Not_IDs") or die ("Can't
    open $UIDs_MATCH_But_Not_IDs: $!\n");
    my $UIDs_NOTMATCH_But_IDs_MATCH="./UIDs_NOTMATCH_But_IDs_MATCH";
    open(UIDs_NOTMATCH_But_IDs_MATCH,">$UIDs_NOTMATCH_But_IDs_MATCH") or
    die ("Can't open $UIDs_NOTMATCH_But_IDs_MATCH: $!\n");
    my $UIDs_BLANK_n_LOGIN_NOTMATCH="./UIDs_BLANK_n_LOGIN_NOTMATCH";
    open(UIDs_BLANK_n_LOGIN_NOTMATCH,">$UIDs_BLANK_n_LOGIN_NOTMATCH") or
    die ("Can't open $UIDs_BLANK_n_LOGIN_NOTMATCH: $!\n");
    my $UIDs_n_IDs_NOTFOUND="./UIDs_n_IDs_NOTFOUND";
    open(UIDs_n_IDs_NOTFOUND,">$UIDs_n_IDs_NOTFOUND") or die ("Can't open
    $UIDs_n_IDs_NOTFOUND: $!\n");
    my $TEMPFILE="./TEMPFILE";
    open(TEMPFILE,">$TEMPFILE") or die ("Can't open $TEMPFILE: $!\n");

    my @ypsearch = (`ypcat passwd | grep user`);

    # Search through the list of unix userIDs from ypcat and get
    information
    foreach (@ypsearch) {
    ($unixid, $NULL, $unixuid, $group, $namefield) = split /:/;
    # split the gecos field and get fullname and employeeid
    ($FullName, $empid)=split (/\(|\,/, $namefield);
    # further split the fullname with first middle and last name
    ($fname,$middle,$lname)=split (/ /, $FullName);
    # Compensate for people with no middle name
    if (!($lname))
    {
    $lname = $middle;
    undef ($middle);
    }
    print "$unixid\n";
    print "unixname $fname, $middle, $lname, $empid\n";
    my @hash=();
    # Do ldapsearch for user and capture specific fields
    $info= (`ldapsearch -p $PORT -b DC=com -s sub -h $SHOST
    "(&(sn=$lname)(givenName=$fname))" givenName middleName sAMAccountName
    sn employeeID mail telep
    honeNumber extensionAttribute13 userPrincipalName`);
    print TEMPFILE "$info\n";
    close (TEMPFILE);
    chomp(@test=`cat $TEMPFILE`);
    $/="";

    foreach (@test){
    ($key, $value) = split /=/, $_;
    ;
    if ($key =~ m/extensionAttribute13/){
    $ntuid = $value;
    }

    elsif ($key =~ m/telephoneNumber/){
    $telenum = $value;
    }
    elsif ($key =~ m/mail=/){
    $mail = $value;
    }
    elsif ($key =~ m/employeeID/){
    if ($value eq $empid) {
    $employeeid = $empid;
    }
    else {
    $employeeid = $value;
    }
    }
    elsif ($key =~ m/sn/){
    $lastname = $value;
    }
    elsif ($key =~ m/sAMAccountName/){
    $ntid = $value;
    }
    elsif ($key =~ m/middleName/){
    if ("$value" eq "$middle") {
    $middlename = $middle;
    }
    else {
    $middlename = $value;
    }
    }
    elsif ($key =~ m/givenName/){
    $givenname = $value;
    }
    elsif ($key =~ m/userPrincipalName/){
    # Remove unwanted characters, probably better of doing it but.
    $value =~ s/.*@//;
    $value =~ s/\..*//;
    $domain = $value;
    }
    next if $key eq "";

    # Check to see if users have and or match IDs and UIDs and send it to
    appropriate files.
    if (("$unixuid" eq "$ntuid") && ("$unixid" eq "$ntid")) {
    print "UnixUserID | $unixid | UID | $unixuid | MATCHES LOGIN
    and UID found in LDAP | ldapusername | $ntid | NT_UserID | $ntuid |
    name | $givenname,$mi
    ddlename,$lastname | employeeid | $employeeid | email | $mail |
    telephone | $telenum | DOMAIN | $domain\n";
    print UIDs_n_IDs_MATCH "UnixUserID | $unixid | UID | $unixuid |
    matches LOGIN and UID found in LDAP | ldapusername | $ntid | NT_UserID
    | $ntuid | name
    | $givenname,$middlename,$lastname | employeeid | $employeeid | email
    | $mail | telephone | $telenum | DOMAIN | $domain\n";
    }
    elsif (("$unixuid" ne "$ntuid") && ("$unixid" ne "$ntid") &&
    ("$ntuid" ne "")) {
    print "UnixUserID | $unixid | UID | $unixuid | does NOT
    MATCH LOGIN and UID found in LDAP | ldapusername | $ntid | NT_UserID |
    $ntuid | name | $g
    ivenname,$middlename,$lastname | employeeid | $employeeid | email |
    $mail | telephone | $telenum | DOMAIN | $domain\n";
    print UIDs_n_IDs_NOTMATCH "UnixUserID | $unixid | UID |
    $unixuid | does not match LOGIN and UID found in LDAP | ldapusername |
    $ntid | NT_UserID |
    $ntuid | name | $givenname,$middlename,$lastname | employeeid |
    $employeeid | email | $mail | telephone | $telenum | DOMAIN |
    $domain\n";
    }
    elsif (("$unixuid" ne "$ntuid") && ("$unixid" eq "$ntid") &&
    ("$ntuid" ne "")) {
    print "UnixUserID | $unixid | UID | $unixuid | MATCHES
    LOGIN but NOT UID found in LDAP | ldapusername | $ntid | NT_UserID |
    $ntuid | name | $give
    nname,$middlename,$lastname | employeeid | $employeeid | email | $mail
    | telephone | $telenum | DOMAIN | $domain\n";
    print UIDs_MATCH_But_Not_IDs "UnixUserID | $unixid | UID |
    $unixuid | matches LOGIN but NOT UID found in LDAP | ldapusername |
    $ntid | NT_UserID
    | $ntuid | name | $givenname,$middlename,$lastname | employeeid |
    $employeeid | email | $mail | telephone | $telenum | DOMAIN |
    $domain\n";
    }
    elsif (("$unixuid" eq "$ntuid") && ("$unixid" ne "$ntid")) {
    print "UnixUserID | $unixid | UID | $unixuid | MATCHES
    LOGIN but not UID found in LDAP | ldapusername | $ntid | NT_UserID |
    $ntuid | name | $give
    nname,$middlename,$lastname | employeeid | $employeeid | email | $mail
    | telephone | $telenum | DOMAIN | $domain\n";
    print UIDs_NOTMATCH_But_IDs_MATCH "UnixUserID | $unixid |
    UID | $unixuid | MATCHES LOGIN but not UID found in LDAP | ldapusername
    | $ntid | NT_Us
    erID | $ntuid | name | $givenname,$middlename,$lastname | employeeid |
    $employeeid | email | $mail | telephone | $telenum | DOMAIN |
    $domain\n";
    }
    elsif (("$unixuid" ne "$ntuid") && ("$unixid" ne "$ntid") &&
    ("$ntuid" eq "") && ("$ldapusername" ne "")) {
    print "UnixUserID | $unixid | UID | $unixuid | does NOT
    MATCH LOGIN and UID is BLANK in LDAP | ldapusername | $ntid | NT_UserID
    | $ntuid | name |
    $givenname,$middlename,$lastname | employeeid | $employeeid | email |
    $mail | telephone | $telenum | DOMAIN | $domain\n";
    print UIDs_BLANK_n_LOGIN_NOTMATCH "UnixUserID | $unixid |
    UID | $unixuid | does NOT MATCH LOGIN and UID is BLANK in LDAP |
    ldapusername | $ntid |
    NT_UserID | $ntuid | name | $givenname,$middlename,$lastname |
    employeeid | $employeeid | email | $mail | telephone | $telenum |
    DOMAIN | $domain\n";
    }
    else {
    print "UnixUserID | $unixid | *****not found in LDAP***** |
    UNIXNAME | $fullname | UID | $unixuid\n";
    print UIDs_n_IDs_NOTFOUND "UnixUserID | $unixid | *****not
    found in LDAP***** | UNIXNAME | $fullname | UID | $unixuid\n";
    }

    }
    }

    close (UIDs_n_IDs_MATCH);
    close (UIDs_n_IDs_NOTMATCH);
    close (UIDs_MATCH_But_Not_IDs);
    close (UIDs_NOTMATCH_But_IDs_MATCH);
    close (UIDs_BLANK_n_LOGIN_NOTMATCH);
    close (UIDs_n_IDs_NOTFOUND);
    #close (TEMPFILE);
     
    , Jul 15, 2005
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. sumit
    Replies:
    1
    Views:
    6,468
    Anatoly
    Nov 25, 2003
  2. Jameel
    Replies:
    1
    Views:
    576
  3. Nico Grubert

    ldapsearch example in python-ldap?

    Nico Grubert, Nov 23, 2006, in forum: Python
    Replies:
    1
    Views:
    4,015
    =?ISO-8859-1?Q?Michael_Str=F6der?=
    Nov 23, 2006
  4. Paul Naude

    Urgent: Records duplicate on update!

    Paul Naude, Feb 21, 2006, in forum: ASP .Net Datagrid Control
    Replies:
    0
    Views:
    117
    Paul Naude
    Feb 21, 2006
  5. Replies:
    1
    Views:
    122
    A. Sinan Unur
    Jul 16, 2005
Loading...

Share This Page