Printer Agent Location and Description missing after iPrint Migration

  • 7004029
  • 30-Jul-2009
  • 26-Apr-2012

Environment

Novell iPrint for Linux

Situation

After migrating iPrint printers from NetWare to Linux using the OES 2 SP1 Migration tool, the Location and Description attributes of the iPrinter printers in eDirectory are blank.  In other words, the Location and Description values are not seen when going to iManager -> Manage Printer -> Identification.

However, the Location and Description values are present in the Managed Object Database (MOD, or psmdb.dat).  The Location and Description values from the MOD are viewed from:
  • http://x.x.x.x/ipp
  • https://x.x.x.x/psmstatus
  • Microsoft's Printers and Faxes Window after the printer is installed to the workstation
Cause:  One of the steps to the iPrint migration is to import an XML to the Linux server.  iprntman imports the values to the MOD, but not to eDirectory.  Therefore, the failure is not in the migration code, but rather iprntman, which is used by the migration tool.

Resolution

Reported to engineering.

Workaround 1:
Manually add the Location and Description information to the eDirectory printer objects using iManager.

Workaround 2:
Import the Location and Description information using LDIF.

1.  Create a text file called data.ldf.  The contents of the LDIF text file should contain the printer's CN, Location, and Description.  Below is a sample format:

dn: CN=MyPrinter,OU=Acct,O=MyCompany
changetype: modify
add: L
L: The location text of my choice
-
add: description
description: The description text of my choice

dn: CN=MyPrinter2 ... and so on.

Refer to the /opt/novell/iprint/bin/psmimport.xml to find the values to the above attributes.   Note:  "L" is the attribute name for Location.

The data.ldf can alternatively be auto created by using the script shown in the Addition Information section of this TID.

2.   Copy the data.ldf file to the OES server's /tmp directory
3.  Type these commands at a terminal:

#ice -SLDIF -f /tmp/data.ldf -DLDAP -s 192.168.150.12 -p 389 -d cn=admin,o=novell -w novell

Syntax:
ice -SLDIF -f /[path]/data.ldf -DLDAP -s [ServerIPorDNS] -p 389 -d [AdminFDN] -w [AdminPassword]

NOTE:  If the following error is returned

ldap_simple_bind failed: 13(Confidentiality required), dn: cn=admin.......

then follow these steps:
iManager -> LDAP -> LDAP Options -> choose the LDAP Group object -> uncheck "Require TLS for Simple Binds with Password" -> Click Apply -> LDAP -> LDAP Options -> View LDAP Servers -> Choose the LDAP Server object -> click the Refresh button -> run the command again.


Additional Information

  1. Create a script file named printerexport.pl to contain the following contents (don't include the -~-~ lines, but the text between those lines).
  2. Copy the file to the destination server's /opt/novell/iprint/bin
  3. Review the contents of the /opt/novell/iprint/bin/psminfo.xml file to ensure it contains the location and description information required to be created.
  4. Type these commands at the destination server's terminal:
    • cd /opt/novell/iprint/bin
    • chmod 775 printerexport.pl
    • ./printerexport.pl
  5. The script will generate a file named data.ldf.
  6. Review the data.ldf for unexpected hard returns or other unexpected characters.  Some special characters in the Location and Description fields don't transform clean when exporting the xml to ldf.  Manually fix the unexpected formating and other problems.
  7. Continue with Step 2 in Workaround 2 listed above.
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
#!/usr/bin/perl
#
use lib '/opt/novell/iprint/lib/perl5';
use XML::Simple;
my $xmlref;
$xmlref = XMLin("/opt/novell/iprint/bin/psmimport.xml" ,
                KeyAttr => [],
                ForceArray => ['printer'],
                ParserOpts => [ ProtocolEncoding =>'ISO-8859-1'],
                ContentKey => _CONTENT);
open (DATALDIF, '>data.ldf');
print DATALDIF "version: 1\n";
foreach my $ref (@{$xmlref->{'printer'}})
{
        my $dn = ref $ref->{'dn'} ? undef : $ref->{'dn'};
        my $name = ref $ref->{'name'} ? undef : $ref->{'name'};
        my $location = ref $ref->{'location'} ? undef : $ref->{'location'};
        my $description = ref $ref->{'description'} ? undef : $ref->{'description'};
        my $gwls = ref $ref->{'gatewayloadstring'} ? undef : $ref->{'gatewayloadstring'};
        my $dirprintena = ref $ref->{'directprintenabled'} ? undef : $ref->{'directprintenabled'};
        my $lprenabled = ref $ref->{'lprenabled'} ? undef : $ref->{'lprenabled'};
        my $lprdatafilter = ref $ref->{'lprdatafilter'} ? undef : $ref->{'lprdatafilter'};
        my $lprconfiguredtime = ref $ref->{'lprconfiguredtime'} ? undef : $ref->{'lprconfiguredtime'};
        my $banner = ref $ref->{'bannername'} ? undef : $ref->{'bannername'};
        my $auditflag = ref $ref->{'auditflag'} ? undef : $ref->{'auditflag'};
        my $security = ref $ref->{'security_enabled'} ? undef : $ref->{'security_enabled'};
      
        print DATALDIF "\ndn: $dn \n";
        print DATALDIF "changetype: modify\n";
        print DATALDIF "add: description\n";
        print DATALDIF "description: $description\n";
        print DATALDIF "-\n";
        print DATALDIF "add: l\n";
        print DATALDIF "l: $location\n";
}
close (DATALDIF);
-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~